From be5c4ba9d6bc9d7e5478de787014313687f5c250 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 23 May 2023 21:54:10 +0200 Subject: [PATCH] fish oil, some experimental mixer stuff --- .../java/com/hbm/inventory/fluid/Fluids.java | 10 +++- .../hbm/inventory/recipes/CokerRecipes.java | 2 + .../inventory/recipes/CrucibleRecipes.java | 4 +- .../recipes/CrystallizerRecipes.java | 1 + .../recipes/LiquefactionRecipes.java | 8 +++ .../hbm/inventory/recipes/MixerRecipes.java | 46 ++++++++++++++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../hbm/textures/gui/fluids/fishoil.png | Bin 0 -> 489 bytes .../hbm/textures/gui/fluids/sunfloweroil.png | Bin 0 -> 490 bytes .../hbm/textures/gui/processing/gui_mixer.png | Bin 3119 -> 3122 bytes .../gui/processing/gui_mixer_experimental.png | Bin 0 -> 3194 bytes .../hbm/textures/models/tank/tank_FISHOIL.png | Bin 0 -> 1350 bytes .../models/tank/tank_SUNFLOWEROIL.png | Bin 0 -> 1075 bytes 14 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/fishoil.png create mode 100644 src/main/resources/assets/hbm/textures/gui/fluids/sunfloweroil.png create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_mixer_experimental.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_FISHOIL.png create mode 100644 src/main/resources/assets/hbm/textures/models/tank/tank_SUNFLOWEROIL.png diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index bf2ce2575..9b0c6f33a 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -130,6 +130,8 @@ public class Fluids { public static FluidType EGG; public static FluidType CHOLESTEROL; public static FluidType ESTRADIOL; + public static FluidType FISHOIL; + public static FluidType SUNFLOWEROIL; private static final HashMap idMapping = new HashMap(); private static final HashMap nameMapping = new HashMap(); @@ -270,7 +272,9 @@ public class Fluids { GAS_COKER = new FluidType("GAS_COKER", 0xDEF4CA, 1, 4, 0, EnumSymbol.NONE).addTraits(GASEOUS); EGG = new FluidType("EGG", 0xD2C273, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); CHOLESTEROL = new FluidType("CHOLESTEROL", 0xD6D2BD, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); - ESTRADIOL = new FluidType(109, "ESTRADIOL", 0xCDD5D8, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); + ESTRADIOL = new FluidType("ESTRADIOL", 0xCDD5D8, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); + FISHOIL = new FluidType("FISHOIL", 0x4B4A45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID); + SUNFLOWEROIL = new FluidType(111, "SUNFLOWEROIL", 0xCBAD45, 0, 1, 0, EnumSymbol.NONE).addTraits(LIQUID); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE @@ -357,6 +361,8 @@ public class Fluids { metaOrder.add(BIOGAS); metaOrder.add(BIOFUEL); metaOrder.add(ETHANOL); + metaOrder.add(FISHOIL); + metaOrder.add(SUNFLOWEROIL); metaOrder.add(NITAN); metaOrder.add(BALEFIRE); //processing fluids @@ -523,6 +529,8 @@ public class Fluids { registerCalculatedFuel(WOODOIL, 110_000 /* 20_000 TU per 250mB + a bonus */, 0, null); registerCalculatedFuel(COALCREOSOTE, 250_000 /* 20_000 TU per 100mB + a bonus */, 0, null); + registerCalculatedFuel(FISHOIL, 75_000, 0, null); + registerCalculatedFuel(SUNFLOWEROIL, 50_000, 0, null); registerCalculatedFuel(SOLVENT, 100_000, 0, null); // flammable, sure, but not combustable registerCalculatedFuel(RADIOSOLVENT, 150_000, 0, null); diff --git a/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java index 1c74b406c..e87da47ca 100644 --- a/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CokerRecipes.java @@ -50,6 +50,8 @@ public class CokerRecipes extends SerializableRecipe { registerAuto(AROMATICS, GAS_COKER); registerAuto(REFORMATE, GAS_COKER); registerAuto(XYLENE, GAS_COKER); + registerAuto(FISHOIL, NAPHTHA_COKER); + registerAuto(SUNFLOWEROIL, GAS_COKER); registerSFAuto(WOODOIL, 340_000L, new ItemStack(Items.coal, 1, 1), GAS_COKER); diff --git a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java index 9fa52a29e..1c87197ba 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrucibleRecipes.java @@ -186,11 +186,11 @@ public class CrucibleRecipes extends SerializableRecipe { input[i] = new MaterialStack(Mats.matByName.get(matname), amount); } MaterialStack[] output = new MaterialStack[obj.get("output").getAsJsonArray().size()]; - for(int i = 0; i < input.length; i++) { + for(int i = 0; i < output.length; i++) { JsonArray entry = obj.get("output").getAsJsonArray().get(i).getAsJsonArray(); String matname = entry.get(0).getAsString(); int amount = entry.get(1).getAsInt(); - input[i] = new MaterialStack(Mats.matByName.get(matname), amount); + output[i] = new MaterialStack(Mats.matByName.get(matname), amount); } recipes.add(new CrucibleRecipe(id, name, freq, icon).inputs(input).outputs(output)); } diff --git a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java index 933a7c970..3eee4adf6 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java @@ -102,6 +102,7 @@ public class CrystallizerRecipes extends SerializableRecipe { registerRecipe(new ComparableStack(ModItems.powder_semtex_mix), new CrystallizerRecipe(ModItems.ingot_semtex, baseTime)); registerRecipe(new ComparableStack(ModItems.powder_desh_ready), new CrystallizerRecipe(ModItems.ingot_desh, baseTime)); registerRecipe(new ComparableStack(ModItems.powder_meteorite), new CrystallizerRecipe(ModItems.fragment_meteorite, utilityTime)); + registerRecipe(CD.dust(), new CrystallizerRecipe(ModItems.ingot_rubber, baseTime), new FluidStack(Fluids.FISHOIL, 250)); registerRecipe(new ComparableStack(ModItems.meteorite_sword_treated), new CrystallizerRecipe(ModItems.meteorite_sword_etched, baseTime)); registerRecipe(new ComparableStack(ModItems.powder_impure_osmiridium), new CrystallizerRecipe(ModItems.crystal_osmiridium, baseTime), new FluidStack(Fluids.SCHRABIDIC, 1_000)); diff --git a/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java b/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java index bd6698749..7a663f90d 100644 --- a/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/LiquefactionRecipes.java @@ -23,6 +23,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemFood; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; public class LiquefactionRecipes extends SerializableRecipe { @@ -56,6 +57,8 @@ public class LiquefactionRecipes extends SerializableRecipe { recipes.put(new ComparableStack(ModBlocks.plant_flower, 1, 3), new FluidStack(150, Fluids.ETHANOL)); recipes.put(new ComparableStack(ModBlocks.plant_flower, 1, 4), new FluidStack(50, Fluids.ETHANOL)); recipes.put(new ComparableStack(ModItems.biomass), new FluidStack(125, Fluids.BIOGAS)); + recipes.put(new ComparableStack(Items.fish, 1, OreDictionary.WILDCARD_VALUE), new FluidStack(100, Fluids.FISHOIL)); + recipes.put(new ComparableStack(Blocks.double_plant, 1, 0), new FluidStack(100, Fluids.SUNFLOWEROIL)); recipes.put(new ComparableStack(Items.wheat_seeds), new FluidStack(50, Fluids.SEEDSLURRY)); recipes.put(new ComparableStack(Blocks.tallgrass, 1, 1), new FluidStack(100, Fluids.SEEDSLURRY)); @@ -74,6 +77,11 @@ public class LiquefactionRecipes extends SerializableRecipe { ComparableStack comp = new ComparableStack(stack.getItem(), 1, stack.getItemDamage()); + if(recipes.containsKey(comp)) + return recipes.get(comp); + + comp = new ComparableStack(stack.getItem(), 1, OreDictionary.WILDCARD_VALUE); + if(recipes.containsKey(comp)) return recipes.get(comp); diff --git a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java index 9e79c597a..421453a5d 100644 --- a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java @@ -21,12 +21,16 @@ import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemFluidIcon; +import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraftforge.oredict.OreDictionary; public class MixerRecipes extends SerializableRecipe { public static HashMap recipes = new HashMap(); + public static HashMap recipes_experimental = new HashMap(); + @Override public void registerDefaults() { recipes.put(Fluids.COOLANT, new MixerRecipe(2_000, 50).setStack1(new FluidStack(Fluids.WATER, 1_800)).setSolid(new OreDictStack(KNO.dust()))); @@ -40,6 +44,8 @@ public class MixerRecipes extends SerializableRecipe { recipes.put(Fluids.MUSTARDGAS, new MixerRecipe(1000, 20).setStack1(new FluidStack(Fluids.REFORMGAS, 750)).setStack2(new FluidStack(Fluids.CHLORINE, 250)).setSolid(new OreDictStack(S.dust()))); recipes.put(Fluids.IONGEL, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.WATER, 1000)).setStack2(new FluidStack(Fluids.HYDROGEN, 200)).setSolid(new ComparableStack(ModItems.pellet_charged))); recipes.put(Fluids.EGG, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.RADIOSOLVENT, 500)).setSolid(new ComparableStack(Items.egg))); + recipes.put(Fluids.FISHOIL, new MixerRecipe(100, 50).setSolid(new ComparableStack(Items.fish, 1, OreDictionary.WILDCARD_VALUE))); + recipes.put(Fluids.SUNFLOWEROIL, new MixerRecipe(100, 50).setSolid(new ComparableStack(Blocks.double_plant, 1, 0))); recipes.put(Fluids.SOLVENT, new MixerRecipe(1000, 50).setStack1(new FluidStack(Fluids.NAPHTHA, 500)).setStack2(new FluidStack(Fluids.AROMATICS, 500))); recipes.put(Fluids.SULFURIC_ACID, new MixerRecipe(500, 50).setStack1(new FluidStack(Fluids.ACID, 800)).setSolid(new OreDictStack(S.dust()))); @@ -62,6 +68,22 @@ public class MixerRecipes extends SerializableRecipe { recipes.put(Fluids.KEROSENE_REFORM, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.KEROSENE, 900)).setStack2(new FluidStack(Fluids.REFORMATE, 100))); } + public static void registerExperimental(FluidType type, MixerRecipe... recipes) { + recipes_experimental.put(type, recipes); + } + + public static MixerRecipe[] getOutputExperimental(FluidType type) { + return recipes_experimental.get(type); + } + + public static MixerRecipe getOutputExperimental(FluidType type, int index) { + MixerRecipe[] recs = recipes_experimental.get(type); + + if(recs == null) return null; + + return recs[index % recs.length]; + } + public static MixerRecipe getOutput(FluidType type) { return recipes.get(type); } @@ -130,6 +152,30 @@ public class MixerRecipes extends SerializableRecipe { return recipes; } + + public static HashMap getRecipesExperimental() { + + HashMap recipes = new HashMap(); + + for(Entry entry : MixerRecipes.recipes_experimental.entrySet()) { + + FluidType type = entry.getKey(); + MixerRecipe[] recs = entry.getValue(); + + for(MixerRecipe recipe : recs) { + FluidStack output = new FluidStack(type, recipe.output); + + List objects = new ArrayList(); + if(recipe.input1 != null) objects.add(ItemFluidIcon.make(recipe.input1)); + if(recipe.input2 != null) objects.add(ItemFluidIcon.make(recipe.input2)); + if(recipe.solidInput != null) objects.add(recipe.solidInput); + + recipes.put(objects.toArray(), ItemFluidIcon.make(output)); + } + } + + return recipes; + } public static class MixerRecipe { public FluidStack input1; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 4a9c5faf2..8f2c19202 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -625,6 +625,7 @@ hbmfluid.egg=Gelöstes Ei hbmfluid.estradiol=Estradiollösung hbmfluid.ethanol=Ethanol hbmfluid.enderjuice=Endersaft +hbmfluid.fishoil=Fischöl hbmfluid.fracksol=Frackinglösung hbmfluid.gas=Erdgas hbmfluid.gas_coker=Koker-Gas @@ -689,6 +690,7 @@ hbmfluid.sourgas=Saures Gas hbmfluid.spentsteam=Niedrigdruckdampf hbmfluid.steam=Dampf hbmfluid.sulfuric_acid=Schwefelsäure +hbmfluid.sunfloweroil=Sonnenblumenkernöl hbmfluid.superhotsteam=Superverdichteter Dampf hbmfluid.syngas=Synthesegas hbmfluid.tritium=Tritium diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index b179aee53..9ba04761b 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1197,6 +1197,7 @@ hbmfluid.egg=Dissolved Egg hbmfluid.estradiol=Estradiol Solution hbmfluid.ethanol=Ethanol hbmfluid.enderjuice=Ender Juice +hbmfluid.fishoil=Fish Oil hbmfluid.fracksol=Fracking Solution hbmfluid.gas=Natural Gas hbmfluid.gas_coker=Coker Gas @@ -1261,6 +1262,7 @@ hbmfluid.sourgas=Sour Gas hbmfluid.spentsteam=Low-Pressure Steam hbmfluid.steam=Steam hbmfluid.sulfuric_acid=Sulfuric Acid +hbmfluid.sunfloweroil=Sunflower Seed Oil hbmfluid.superhotsteam=Super Dense Steam hbmfluid.syngas=Syngas hbmfluid.tritium=Tritium diff --git a/src/main/resources/assets/hbm/textures/gui/fluids/fishoil.png b/src/main/resources/assets/hbm/textures/gui/fluids/fishoil.png new file mode 100644 index 0000000000000000000000000000000000000000..59a2057bdb491f1ecf6cfd833124cf81499a9f27 GIT binary patch literal 489 zcmV@o%48uU%w%BnTQA&|gLMesT8m%=cB~nVI zp@^{WJKlTddFJ(cky64MV^B&VBIQ8-R!U*5MJYwwwq-K!{r~>}F~(9b#^9VI##nC8 zb*(k)x|Tepgw6PjF=d_SnUqpFtdzogf8a(bMT`-fZw3kktu<}ivhRCo(lia*wjm;j zNP%IUbL{($h#VSi+g3&e$Vv^vP>BBd`N8&m&-Hrc{eCk|Q^DQ$Jt2ewC9mT+VvM2d zy05H#-?JZmoYNvyfjS|cKa5WYUh zrm0!Z>eP-j#uPQ0runK+Z>*K5^SYKN3L$(ss7K2i>ZtSD;whysZ}nrzo3nhirJJU~ z7{jtG2bc#4H4k}2tu$qO8hzPgajmP6rd}5oXp>1122mo|l$K`S%#>nUMA;yUJ gp6By<@I^M*KYijnZ0#n!+W-In07*qoM6N<$f;^7o1ONa4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer.png index dae11341596fb9f50342357f592ecdd19a724971..1bb5e85f15bff9b71477d24b72c32ca467896ce5 100644 GIT binary patch delta 2725 zcmYLJdpwkB8-Cu`n1e%%3XK?}Eee?$QaMc_*^=3rXmDDiBoY|Tijl*oQU}NH4+cDWjmyY5ht5#8-`Ibi*`TQaV{sZdxrj3u4 z%!<4)QP5RaTSH?fJ@K^BM8rjFot(dK^@#1n{sL}O5o0QN&GXdpoAb_Ri@p;Vg^{rR019qsg zl3@gxZ(Y9d&VL<$hUW#HOGX{E`PbfNec*zek0NMz1H9y9bL>d zp(q~oBWxH&qKX-}YOx6e{W(#*j9)qB(ULC>pa3~Z~6hlj}>i!Jp<+0Pn0AL+`A z|Ky-A@PaF&KlcR)QSnIpS_k=Hfhm7}%y^~4*yjFnRUA>Etmk{W57Fd=X?rHILjKj(0BHJ%D zv^qUmEYgA|T*gLrZArtQZxlzndvkaF7g|F&{pD zGPYN)x@HHN($x(O-pQSa)TD0E7&|mu@Vv}EVf@1NO6hxKy;QoK12<=PgEQgnpx1kA zgPIcGykl{q<(^TLd8O2&rvMz;NO%~dLMN7{YFUA$n%;s-J9@Y!&pI>N$d$!NTb8kMc|5`%9f6)VH2~Gd-fo_1=D>$Zn5%>Wa;zV>;8bX2x{HmbpjVB8g$$( zkQpYSSib47XM^Qq&d}pE`;&xFFDo+xp{b#zH<9QPZd6u!%+ln-uq-I`OLwbvK4++U zjnHS&(te1p{|E}*8=_{X_K*%8+^%&&xz?tlSJjw!4s2OORejLMTZfDp09$T-H zaFY4;N-^Z{H2|!%fr)TJp$0pL7SB?RzrVW-8}o_pJy=JGB`aycCm*P@wXE2pHfh~u zdNGL;e6ulQQd#$&&Ncmbe0)HN68Cp>T%e!mZY<@JyL2|~9Cj_jfelf|;ESM?CzUMK zh;VJi6lm7eov#I+O4s3P^5$jIMy;#`;Vr_s5!_^Jt6@MS@2-NQ&1Lk!yVeILLf;$MMWaP!H}IaydTaXktDP%O z=jP4<6MrQW%DXt|+^F%x0#wB=4aMO5m?;UuGOlz3lk-Cs2QU#uIpnD%L`< z!Z8eY=inpVWD?u%lM?skES!HA8N3Kl$={_BtQNXQq7wT4xpdBl(3mONh}KYQ%&--K zu>)ic7+|}aTm+D-3iqN{%w#aS<$nw^J?e#t3Hjf;>zq%S>mM~Nu+rK>tLXgNl+tqGL5EI zZOJ5b@!R!0O|$?>5~DD5SDC3=@aX6l;U4Trx*h19c{|}Y99L|I3Gcn3_bB!{C3&G7 zOGi5B9a?brV`%~TslfY5pb$~2wx)Op%NJIyI@J_M5Y8O$SIRH%r z{EO-|vj^OIyX8f2yD|)no*&Eb#IT9}oI1f4m{Fg_WFZ2YjPm>-<6M>!=LG-sAtml# zo82n5lfCfIz29sH`E9IKpmZ5yXyhdFHS^sKI+sJ;R}MO>ShP>#(`7x`rgMZNpEnsY zbRnR-3xF#`VDdrSRq}@hq~(S2i;=(K{pIb_`mGgn%h&1WBNco;Id7FuL`;mC)^KbR zA(*wW;h;@v;xi2ZQqvve!6Xgys#8fXSpy*z!3&OwuYxH%@lI3eR9RlLL04BMp4M)n z{XtnUKRfx_K%FXh`}StiXJWA0LkuSEtm=xi2^G?oQSnMyU!S2&d1hv2U|`@<4- z8x69(S}1P3Jyf-h$J6-=CnhF_hllU9c}#nvAL`+rxF@Yo#d^o6Sc4H3=DtirBOwsw z;aI*&jUg4jSCjmDqT}`Be=fKZnPmg(>+4@lYMh!XYh04N$VgJ0&qa0;P4q)RS_#1- zO+dh{slP#g>=A3TJMsU~NX*^bPdz~{+=xO*q0_%ujI|B?cAs?IF!#NFJeyRuX1}c; ztcbINFo59`MojgOKcTp|23}(jseB*Jk+(H>+3o-Fal7h^1^>OvKR$0+4czczE%>(` z^p)0fm(|uzN6UQ7yqHX8#70I+He^=G<0Tv5saR#f)-3(14dE*U(Q0vNZ&h8=`c$zx a$Hx#K)f(}5+js#$m#gzWr{bNAU;Y7kr~79B delta 2717 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 RuYzyjAl>yqm4pBJ{{f-52?YQE diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer_experimental.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer_experimental.png new file mode 100644 index 0000000000000000000000000000000000000000..a04e3e7a7aa6e466705f4cae7b27c2ba3b8cc458 GIT binary patch literal 3194 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 Qmm8?o7WU*~Gs=~}1EiZ{`v3p{ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/tank/tank_FISHOIL.png b/src/main/resources/assets/hbm/textures/models/tank/tank_FISHOIL.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9c063b537df683600ebde779e4e786bd64a2ee GIT binary patch literal 1350 zcmV-M1-bf(P)*xP zba%7tXP=qpv-8ZPAqUH^y!^oBb{Mw)^=4z#ZQ`%((xnw`e6u$AI*KA49_)?fxiknd z9Ib`LL9nfbMMY7hna2IGJT^faF*EHafXN_eBM91vk+VXHS$9!+XWc$Aq64yYX=Ui^ z*23c09-CQrK&V$JjZL=^1Z@OC8$rGDhtyeC$n`N~6llQfa?`xwddRVXA?l!w~+MA3TXvX7=-c{Hhd<mCIvgVKNqwtP8WdydkpQ4Ad)+SR9B{EDl5_4r&-dk2ZpHucnN1uaJsMTT~R6 zwm>Q_ZGlY8x{cuIl@T1hnlcs#A{C1RD=MVLfsE*YaPAc{G3z#hO}7zT+G5JMv;|Ue zX^VjOc*4)~o)EJP+!XN51M+k*gt4 zuL8oQEl?UGy5d|mXdF7*C6`hSU84HNddPUF` zQTFmv?4yk!Xd|ds9))z}Kt^;x__M+l71H0mV%8lHj$WZOf;NJnji6q|tgUZIl2(?N zBuQ_*e_226ey{H~t`vGa>Q#XHAt%3!Bp+ zpFi^-9?TK7o!uwNTR9`i8!`aU9_1AHJ>mm!4Pi>=_;X-czsB)#HCZ zq9@O{BuNLJgXZX!C-IQ4cdreF+&p_mot<4B{CHD8Y~PS1J^Rf0X+GUj%A{gFZKA3KK6tpsoid$`WjE_wKX}S`#m`s^48|6wl-IFbN^e-HRsj6{qu?Y zh)J8>BMGxXMIz1&3Wx_-x>s6B;+D|)+>`Ey6>|$-wP&WsrZ!x zU6`&{?|kuzB&pZwsJ{?g+$)qu&_)on5!5S>s8>iuy{ahc6;e^J zP#QrSLC{7}uRNk&Arc#16vpxAA~)!o1LOedlF3UuWlHx3bd0PMWCc7nNK45{=dlyWZBRQDSi^g>_p+ukB|Q}+u^MbpMUSBw&@<* z$Cq2Vx%_o{9YT=%{d1DbuTq{)NP3tosq|v+c&Qd$E#%fCSDmLUSV}~-A+(wCn&TN#4AI@D?|~m3Prqv ziLp}!U3UdET|9-ZKnP)S8wy>4uV4O7ZbQ5>w06AW99@W|@k+BD@ygIz@k+BD@v0(p z-JsAlAV)i)$@oMs6yo)(s1h%@xy5B#mZ&7OgAn3X)pt;sf zp`D=66;NI4&S?T$ZPq%roTCe~G+t@W(Znl5Ob$d+ZI0&3Sml^A<^(w!C)~XgIrCI=!Zx^5>JbvwarN+(#_Vq+|Afhd-?C=`xPJM!K8TF2jpqdP7tpQS;VV; zw4y~9NE5G?L@N>El_`sOwIo`J5U+}-?YbFt7vkLIr#MGDL7|->UKz@1*~F`i zbc@^;Huk%%(RH6;sG!}~TXo~9xh?ciOO6f5YACkLLQi$qH5QwtEew78{$4~xnx+{% z#%mp0mn}NhQe)@na|dNj)9l8I+-DiDT#vfP3c1C|ySqfi;dmt>gwy&Y=Z?Bv7g~gP zQmm7$#C)qlj`xeAre$zcEh002ovPDHLkV1iDi{v`ka literal 0 HcmV?d00001