From 38f5fc8aa71caa1c3e99c0be4c9cbc96c11c529f Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Sat, 27 Apr 2019 23:20:01 +0200 Subject: [PATCH] Added simple buttons Need to open GUI without placing block we held --- src/main/java/fr/jcs/bigalarm/BigAlarm.java | 1 + .../java/fr/jcs/bigalarm/BigAlarmRefs.java | 1 + .../fr/jcs/bigalarm/gui/GuiAlarmBlock.java | 54 ++++++- .../fr/jcs/bigalarm/gui/GuiTextureButton.java | 46 ++++++ .../fr/jcs/bigalarm/proxy/ClientProxy.java | 2 + .../fr/jcs/bigalarm/proxy/CommonProxy.java | 2 +- .../bigalarm/tileentitys/TileEntityAlarm.java | 9 ++ .../java/fr/jcs/bigalarm/utils/GuiHelper.java | 139 ++++++++++++++++++ .../jcs/bigalarm/utils/ResourceHandler.java | 27 ++++ .../resources/assets/bigalarm/lang/en_US.lang | 4 +- .../bigalarm/textures/gui/configPanel.png | Bin 0 -> 16238 bytes .../assets/bigalarm/textures/gui/widgets.png | Bin 0 -> 8916 bytes 12 files changed, 282 insertions(+), 3 deletions(-) create mode 100644 src/main/java/fr/jcs/bigalarm/gui/GuiTextureButton.java create mode 100644 src/main/java/fr/jcs/bigalarm/utils/GuiHelper.java create mode 100644 src/main/java/fr/jcs/bigalarm/utils/ResourceHandler.java create mode 100644 src/main/resources/assets/bigalarm/textures/gui/configPanel.png create mode 100644 src/main/resources/assets/bigalarm/textures/gui/widgets.png diff --git a/src/main/java/fr/jcs/bigalarm/BigAlarm.java b/src/main/java/fr/jcs/bigalarm/BigAlarm.java index 877c6b5..b5d3bed 100644 --- a/src/main/java/fr/jcs/bigalarm/BigAlarm.java +++ b/src/main/java/fr/jcs/bigalarm/BigAlarm.java @@ -28,6 +28,7 @@ public class BigAlarm { public void preInit(FMLInitializationEvent event) { System.out.println("[BigAlarm]: Making nuut sound..."); + proxy.registerTileEntities(); } @EventHandler diff --git a/src/main/java/fr/jcs/bigalarm/BigAlarmRefs.java b/src/main/java/fr/jcs/bigalarm/BigAlarmRefs.java index 02ff74e..e8d33da 100644 --- a/src/main/java/fr/jcs/bigalarm/BigAlarmRefs.java +++ b/src/main/java/fr/jcs/bigalarm/BigAlarmRefs.java @@ -8,6 +8,7 @@ public class BigAlarmRefs { public static final String PROXY_CLIENT = "fr.jcs.bigalarm.proxy.ClientProxy"; public static final String PROXY_SERVER = "fr.jcs.bigalarm.proxy.CommonProxy"; public static final boolean isDevEnv = (Boolean)Launch.blackboard.get("fml.deobfuscatedEnvironment"); + public static final String RESOURCESPREFIX = MOD_ID.toLowerCase() + ":"; public static final String GUI = "gui." + MOD_ID + "."; diff --git a/src/main/java/fr/jcs/bigalarm/gui/GuiAlarmBlock.java b/src/main/java/fr/jcs/bigalarm/gui/GuiAlarmBlock.java index d9049e5..18977da 100644 --- a/src/main/java/fr/jcs/bigalarm/gui/GuiAlarmBlock.java +++ b/src/main/java/fr/jcs/bigalarm/gui/GuiAlarmBlock.java @@ -1,7 +1,16 @@ package fr.jcs.bigalarm.gui; +import java.util.ArrayList; +import java.util.List; + +import org.lwjgl.input.Keyboard; + import fr.jcs.bigalarm.tileentitys.TileEntityAlarm; +import fr.jcs.bigalarm.utils.GuiHelper; +import fr.jcs.bigalarm.utils.ResourceHandler; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; public class GuiAlarmBlock extends GuiScreen{ private TileEntityAlarm tile; @@ -10,12 +19,22 @@ public class GuiAlarmBlock extends GuiScreen{ this.tile = alarm; } + @Override + public boolean doesGuiPauseGame() { + return false; + } + @Override public void initGui() { int guiLeft = (width / 2) - (197 / 2); int guiTop = (height / 2) - (88 / 2); buttonList.clear(); + buttonList.add(new GuiTextureButton(0, guiLeft + 20, guiTop + 20, 0, 108, 18, 18, "")); + buttonList.add(new GuiTextureButton(1, guiLeft + 159, guiTop + 20, 0, 54, 18, 18, "")); + + buttonList.add(new GuiTextureButton(2, guiLeft + 20, guiTop + 50, 0, 108, 18, 18, "")); + buttonList.add(new GuiTextureButton(3, guiLeft + 159, guiTop + 50, 0, 54, 18, 18, "")); /* if (tile.flowOverridden) return; @@ -34,6 +53,39 @@ public class GuiAlarmBlock extends GuiScreen{ int guiTop = (height / 2) - (88 / 2); drawDefaultBackground(); - //ResourceHandler.bindResource("textures/gui/ToolConfig.png"); + ResourceHandler.bindResource("textures/gui/configPanel.png"); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, 197, 88); + fontRendererObj.drawString(StatCollector.translateToLocal("gui.bigalarm.alarmBlock.name"), guiCrt - (fontRendererObj.getStringWidth(StatCollector.translateToLocal("gui.bigalarm.alarmBlock.name")) / 2), guiTop + 5, 0x2c2c2c); + + ResourceHandler.bindResource("textures/gui/widgets.png"); + super.drawScreen(mouseX, mouseY, partialTicks); + + List hoverText = new ArrayList(); + boolean shift = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + boolean ctrl = Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL); + + if (GuiHelper.isInRect(guiLeft + 20, guiTop + 20, 18, 18, mouseX, mouseY)) { + //hoverText.add(StatCollector.translateToLocal("gui.de.decrement.name") + " " + tile.getToolTip(1, shift, ctrl)); + hoverText.add(StatCollector.translateToLocal("gui.de.decrement.name")); + } + if (GuiHelper.isInRect(guiLeft + 159, guiTop + 20, 18, 18, mouseX, mouseY)) { + //hoverText.add(StatCollector.translateToLocal("gui.de.increment.name") + " " + tile.getToolTip(1, shift, ctrl)); + hoverText.add(StatCollector.translateToLocal("gui.de.increment.name")); + } + + if (GuiHelper.isInRect(guiLeft + 20, guiTop + 50, 18, 18, mouseX, mouseY)) { + //hoverText.add(StatCollector.translateToLocal("gui.de.decrement.name") + " " + tile.getToolTip(0, shift, ctrl)); + hoverText.add(StatCollector.translateToLocal("gui.de.decrement.name")); + } + if (GuiHelper.isInRect(guiLeft + 159, guiTop + 50, 18, 18, mouseX, mouseY)) { + //hoverText.add(StatCollector.translateToLocal("gui.de.increment.name") + " " + tile.getToolTip(0, shift, ctrl)); + hoverText.add(StatCollector.translateToLocal("gui.de.increment.name")); + } + + if (!hoverText.isEmpty()) { + hoverText.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("gui.de.pressOrScroll.name")); + //drawHoveringText(hoverText, x - (x < width / 2 ? fontRendererObj.getStringWidth(StatCollector.translateToLocal("gui.de.decrement.name") + " " + tile.getToolTip(1, shift, ctrl)) + 25 : 0), y, fontRendererObj); + drawHoveringText(hoverText, mouseX - (mouseX < width / 2 ? fontRendererObj.getStringWidth(StatCollector.translateToLocal("gui.de.decrement.name")) + 25 : 0), mouseY, fontRendererObj); + } } } diff --git a/src/main/java/fr/jcs/bigalarm/gui/GuiTextureButton.java b/src/main/java/fr/jcs/bigalarm/gui/GuiTextureButton.java new file mode 100644 index 0000000..b01583f --- /dev/null +++ b/src/main/java/fr/jcs/bigalarm/gui/GuiTextureButton.java @@ -0,0 +1,46 @@ +package fr.jcs.bigalarm.gui; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.renderer.OpenGlHelper; + +public class GuiTextureButton extends GuiButton { + public int textureXPos; + public int textureYPos; + + public GuiTextureButton(int id, int xPos, int yPos, int textureXPos, int textureYPos, int xSise, int ySise, String text) { + super(id, xPos, yPos, xSise, ySise, text); + this.textureXPos = textureXPos; + this.textureYPos = textureYPos; + } + + @Override + public void drawButton(Minecraft mc, int x, int y) { + if (this.visible) { + FontRenderer fontrenderer = mc.fontRendererObj; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.hovered = x >= this.xPosition && y >= this.yPosition && x < this.xPosition + this.width && y < this.yPosition + this.height; + int k = this.getHoverState(this.hovered); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.drawTexturedModalRect(this.xPosition, this.yPosition, textureXPos, textureYPos + k * height, this.width, this.height); + + this.mouseDragged(mc, x, y); + int l = 14737632; + + if (packedFGColour != 0) { + l = packedFGColour; + } else if (!this.enabled) { + l = 10526880; + } else if (this.hovered) { + l = 16777120; + } + + this.drawCenteredString(fontrenderer, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, l); + } + } +} diff --git a/src/main/java/fr/jcs/bigalarm/proxy/ClientProxy.java b/src/main/java/fr/jcs/bigalarm/proxy/ClientProxy.java index ba829ce..fbc05a9 100644 --- a/src/main/java/fr/jcs/bigalarm/proxy/ClientProxy.java +++ b/src/main/java/fr/jcs/bigalarm/proxy/ClientProxy.java @@ -9,6 +9,7 @@ import fr.jcs.bigalarm.tileentitys.TileEntityAlarm; import net.minecraft.client.Minecraft; public class ClientProxy extends CommonProxy { + /* @Override public void registerTileEntities() { //TileEntityIC2ThermoRenderer renderThermalMonitor = new TileEntityIC2ThermoRenderer(); @@ -16,6 +17,7 @@ public class ClientProxy extends CommonProxy { //ClientRegistry.registerTileEntity(shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityThermo.class, "IC2Thermo", renderThermalMonitor); //GameRegistry.registerTileEntity(shedar.mods.ic2.nuclearcontrol.tileentities.TileEntityHowlerAlarm.class, "IC2HowlerAlarm"); } + */ @Override public void openGui(int id, Object arg) { diff --git a/src/main/java/fr/jcs/bigalarm/proxy/CommonProxy.java b/src/main/java/fr/jcs/bigalarm/proxy/CommonProxy.java index f679d55..6a4d790 100644 --- a/src/main/java/fr/jcs/bigalarm/proxy/CommonProxy.java +++ b/src/main/java/fr/jcs/bigalarm/proxy/CommonProxy.java @@ -10,7 +10,7 @@ import net.minecraft.world.World; public class CommonProxy { public void registerTileEntities() { - //GameRegistry.registerTileEntity(TileEntityThermo.class, "IC2Thermo"); + GameRegistry.registerTileEntity(TileEntityAlarm.class, BigAlarmRefs.MOD_ID + "TileAlarmBlock"); } public void openGui(int id, Object arg) {} diff --git a/src/main/java/fr/jcs/bigalarm/tileentitys/TileEntityAlarm.java b/src/main/java/fr/jcs/bigalarm/tileentitys/TileEntityAlarm.java index 419f747..61cd71b 100644 --- a/src/main/java/fr/jcs/bigalarm/tileentitys/TileEntityAlarm.java +++ b/src/main/java/fr/jcs/bigalarm/tileentitys/TileEntityAlarm.java @@ -67,4 +67,13 @@ public class TileEntityAlarm extends TileEntity { nbttagcompound.setString("soundName", soundName); nbttagcompound.setInteger("range", range); } + + /* + public String getToolTip(int selector, boolean shift, boolean ctrl) { + int i = selector == 0 ? flowRSLow / 100000 * 10000 : flowRSHigh / 100000 * 10000; + int b1 = shift ? ctrl ? 10000 + i : 1000 : ctrl ? 5 : 50; + int b2 = shift ? ctrl ? 1000 : 100 : ctrl ? 1 : 10; + return b1 + "/" + b2 + " RF/t"; + } + */ } diff --git a/src/main/java/fr/jcs/bigalarm/utils/GuiHelper.java b/src/main/java/fr/jcs/bigalarm/utils/GuiHelper.java new file mode 100644 index 0000000..1e56b4c --- /dev/null +++ b/src/main/java/fr/jcs/bigalarm/utils/GuiHelper.java @@ -0,0 +1,139 @@ +package fr.jcs.bigalarm.utils; + +import java.util.Iterator; +import java.util.List; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; + +public class GuiHelper { + public static final double PXL128 = 0.0078125; + public static final double PXL256 = 0.00390625; + + public static boolean isInRect(int x, int y, int xSize, int ySize, int mouseX, int mouseY){ + return ((mouseX >= x && mouseX <= x+xSize) && (mouseY >= y && mouseY <= y+ySize)); + } + + public static void drawTexturedRect(int x, int y, int u, int v, int width, int height){ + drawTexturedRect(x, y, width, height, u, v, width, height, 0, PXL256); + } + + public static void drawTexturedRect(double x, double y, double width, double height, int u, int v, int uSize, int vSize, double zLevel, double pxl){ + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV(x, y + height, zLevel, u * pxl, (v + vSize) * pxl); + tessellator.addVertexWithUV(x + width, y + height, zLevel, (u + uSize) * pxl, (v + vSize) * pxl); + tessellator.addVertexWithUV(x + width, y, zLevel, (u + uSize) * pxl, v * pxl); + tessellator.addVertexWithUV(x, y, zLevel, u * pxl, v * pxl); + tessellator.draw(); + } + + public static void drawHoveringText(List list, int x, int y, FontRenderer font, float fade, double scale, int guiWidth, int guiHeight) { + if (!list.isEmpty()) + { + GL11.glPushMatrix(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glScaled(scale, scale, 1); + x = (int)(x/scale); + y = (int)(y/scale); + + int k = 0; + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) + { + String s = (String)iterator.next(); + int l = font.getStringWidth(s); + + if (l > k) + { + k = l; + } + } + + int adjX = x + 12; + int adjY = y - 12; + int i1 = 8; + + if (list.size() > 1) + { + i1 += 2 + (list.size() - 1) * 10; + } + + if (adjX + k > (int)(guiWidth/scale)) + { + adjX -= 28 + k; + } + + if (adjY + i1 + 6 > (int)(guiHeight/scale)) + { + adjY = (int)(guiHeight/scale) - i1 - 6; + } + + int j1 = -267386864; + drawGradientRect(adjX - 3, adjY - 4, adjX + k + 3, adjY - 3, j1, j1, fade, scale); + drawGradientRect(adjX - 3, adjY + i1 + 3, adjX + k + 3, adjY + i1 + 4, j1, j1, fade, scale); + drawGradientRect(adjX - 3, adjY - 3, adjX + k + 3, adjY + i1 + 3, j1, j1, fade, scale); + drawGradientRect(adjX - 4, adjY - 3, adjX - 3, adjY + i1 + 3, j1, j1, fade, scale); + drawGradientRect(adjX + k + 3, adjY - 3, adjX + k + 4, adjY + i1 + 3, j1, j1, fade, scale); + int k1 = 1347420415; + int l1 = (k1 & 16711422) >> 1 | k1 & -16777216; + drawGradientRect(adjX - 3, adjY - 3 + 1, adjX - 3 + 1, adjY + i1 + 3 - 1, k1, l1, fade, scale); + drawGradientRect(adjX + k + 2, adjY - 3 + 1, adjX + k + 3, adjY + i1 + 3 - 1, k1, l1, fade, scale); + drawGradientRect(adjX - 3, adjY - 3, adjX + k + 3, adjY - 3 + 1, k1, k1, fade, scale); + drawGradientRect(adjX - 3, adjY + i1 + 2, adjX + k + 3, adjY + i1 + 3, l1, l1, fade, scale); + + for (int i2 = 0; i2 < list.size(); ++i2) + { + String s1 = (String)list.get(i2); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + font.drawStringWithShadow(s1, adjX, adjY, ((int)(fade*240F)+0x10 << 24) | 0x00FFFFFF); + + adjY += 10; + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + } + + public static void drawGradientRect(int x1, int y1, int x2, int y2, int colour1, int colour2, float fade, double scale) { + float f = ((colour1 >> 24 & 255) / 255.0F) * fade; + float f1 = (float)(colour1 >> 16 & 255) / 255.0F; + float f2 = (float)(colour1 >> 8 & 255) / 255.0F; + float f3 = (float)(colour1 & 255) / 255.0F; + float f4 = ((colour2 >> 24 & 255) / 255.0F) * fade; + float f5 = (float)(colour2 >> 16 & 255) / 255.0F; + float f6 = (float)(colour2 >> 8 & 255) / 255.0F; + float f7 = (float)(colour2 & 255) / 255.0F; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.setColorRGBA_F(f1, f2, f3, f); + tessellator.addVertex((double)x2, (double)y1, 300D); + tessellator.addVertex((double)x1, (double)y1, 300D); + tessellator.setColorRGBA_F(f5, f6, f7, f4); + tessellator.addVertex((double)x1, (double)y2, 300D); + tessellator.addVertex((double)x2, (double)y2, 300D); + tessellator.draw(); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } +} diff --git a/src/main/java/fr/jcs/bigalarm/utils/ResourceHandler.java b/src/main/java/fr/jcs/bigalarm/utils/ResourceHandler.java new file mode 100644 index 0000000..10552ff --- /dev/null +++ b/src/main/java/fr/jcs/bigalarm/utils/ResourceHandler.java @@ -0,0 +1,27 @@ +package fr.jcs.bigalarm.utils; + +import java.util.HashMap; +import java.util.Map; + +import fr.jcs.bigalarm.BigAlarmRefs; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public class ResourceHandler { + public static ResourceHandler instance = new ResourceHandler(); + private static Map cachedResources = new HashMap(); + + public static ResourceLocation getResource(String rs) { + if (!cachedResources.containsKey(rs)) + cachedResources.put(rs, new ResourceLocation(BigAlarmRefs.RESOURCESPREFIX + rs)); + return cachedResources.get(rs); + } + + public static void bindTexture(ResourceLocation texture) { + Minecraft.getMinecraft().renderEngine.bindTexture(texture); + } + + public static void bindResource(String rs) { + bindTexture(ResourceHandler.getResource(rs)); + } +} diff --git a/src/main/resources/assets/bigalarm/lang/en_US.lang b/src/main/resources/assets/bigalarm/lang/en_US.lang index 2b2fb6e..3017426 100644 --- a/src/main/resources/assets/bigalarm/lang/en_US.lang +++ b/src/main/resources/assets/bigalarm/lang/en_US.lang @@ -1 +1,3 @@ -tile.bigalarm:alarmBlock.name=Alarm \ No newline at end of file +tile.bigalarm:alarmBlock.name=Alarm + +gui.bigalarm.alarmBlock.name=Configuration Panel \ No newline at end of file diff --git a/src/main/resources/assets/bigalarm/textures/gui/configPanel.png b/src/main/resources/assets/bigalarm/textures/gui/configPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..11a5ab8799e136b0ee0d2292f04013383e887dbe GIT binary patch literal 16238 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 Z5B$jprb^JqU@tWRl;t(#>SWBr{x3gQ7B&C? literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bigalarm/textures/gui/widgets.png b/src/main/resources/assets/bigalarm/textures/gui/widgets.png new file mode 100644 index 0000000000000000000000000000000000000000..1ecd02f5d75ba5c412f98a1095685719425ec9f7 GIT binary patch literal 8916 zcmcI~cT^MWxAp`=h}58np$G{eMS2rZfe=920Rbseq)3sXROuxF0xB(t2uLr|n+>TF z4oZkZ`_^6e@0+zIGb{6E=6&}(d+%pId!Fg(s?*c3(EtEIuc@JG z000p15CXtq;LgIc$N}8J?rW>7f_w0@uTqZ#cjw$SOuYbr_QKf)0aDYE;E&XgHFeae z$7wIY_^v+FdME+_C_qzH+0gITa)wn5M_a}?$>`pw!VT@OIGZ^%{)L=e!u>J3P}uo3 z)sF9fQy;WUsNgw7;i8D1M8^tVNp3;yHl>7?3--^n`;(r7r#uQf%E3mSa#X_hdayK2~~l+u0hK#R_5>0TaGer7=6rBCz=7s z4@_@{%z(QLJk~gd!xP5pW|NhYcfGE^orhQCVv|qj9p~Q{_o!Xe8mqngxT4xmm>@t$ zxShcJz2;)q$49@DwoWLi873zF4!7O?6l=hXI$>@;Ir`9|^q5#a>cKWhp1h5Y;}lUp z>NnXC?$ip)Xx0|ADUV2e=hw{|R-%lulVJ^=iC@eORW1PbT9Z464`ap1Z9=`Jw{+^@ z7!p=m`rmOr;=g&mo~bC_y$hF0W8*)KlDF%3?6lfN!N@(pvgLM~%m z?x{j5V2DUG4}j%yua0e!ZKRtBA1lg!yv&u&ujMWS_+B2oIbKOwGnviE14xQ$Ejm+# zGmIyjU1+~}EV)((xPMq&#`&=Njow)Ih6GJ@?#^VXF4CEGnJD@Q%*w&bhS(;O}Roo^qYG4EX_d9(717JM5KFoSlMm~b^ z^P8tE{n9gH;bm<0%jB7ih8sphA(kQYDq;RBq`=Ra29AtD_^jjg&Qa3o=D|5!KD_DT zjzx|b-DfjO(0I+b0)WsuE$SC?=@)MEIrn*im}K%yw96{TW?on`AV+j7S4%C3PzGn( zn!>&6D~PQhjT~ZYMXKt5v4ZDpj8o05M(&JiG(Ff|d7D5s!oDr5su;tl896x|rHHZS zr{f7@r@e(-lRBmjGpGH@jZncWi3UIFeOEH~37FEs<_AiLra>ED`KzTVTEw%>sk5s@9ZvVVm4oso zaw$lG2-8>TH+(CGiiYWruja4Sj~~Zb{d$^UZ|cM}eyMSd%7PRUtjvQ7-QeZIhJWUW-iZpzlzWwWDqv!PLq|6NZ=~m$Afn-?n-E$ zw=<1QlXas26i@eilW7Q7C?|de%lEDX#yDS{m^y&PzkDXO)Tp0qa6ce`tu5}d(5%;< zep5MJ04W{!Z53VpWQeWYnASiGL;)pk?=#ohSN^Q*QCA+#gl5F|0wAQCYnbXs)*@FV zx>;PfEJ~Xx$;p9-b%NN;>f=icX0+1TKTx9%Cv2WeqRwYFD>wEyos<(@d0WMD;lhQK zl$1G5s>IcqQO|K+O+=)P=HCO-A|a}xr~E>v>iRMZW-d!(pX$GlT+vL(EOM*;@%{l3 z+!)<@B)>UV1#myU^mG4oM-`~JQo{wSn{NtKqUd`;PTO4iqhjL0vRgwjm*$23lV{EaXBLH1K6C zF%~N+1x`+{-WZfTrAst$yp|SW{Z6u&&8M0a?gpfjH4>m+US863Jg(4LG8s*1N|kW| zmm;pDL}ZtBofx>SRDKy|*a&gA3Cj{2+NNxOS60NbTPm9HGQ4!$Ft&>Qrw6@dYB!(j zNX^^qvIxEtx($Wto)|p)f=iWIv=!|{L!%p=h5ol)KGF0o-*dTbcYmtt8;;c19bg8F z#yhe}9tT^Gh>PQ21KTs$Lx1OdM|`PVs+Wg|_WGuU*LaoCtF(8BFtm7Bur=RnFB-@u z!ot~fjR5!g{wo&sKIMu0b*?1WfSgYL;BbubHP@OU9fZg8(LAE!ui+xGp*+g!YUES8 zBxU--tK=(3@o#@V}Vv&1HgsF3~iEd1!H|>CcDM1T-o zNGUBCyO~^I;>)uOM|{TU)rL)mihK3f;)_-|k64E{D~%~J#{A=_C%e?wOb)Amboq~$ z4g%@5jy56_G%Z-bjC>hI@l#=p{XWHmvFp()fwG%vympB^crUlCas@OO{Tujaz$q0C z?|6CInJl(x&TIFb9y3NUf{Lp1&z4}(XU4ct+CI!V!UFot*`qyL{&|b4DsWabr8V94 z=%6}F#Z?4Pj&~JL{36UQ$GeyZ;iZbbMK|y1ub#)mtuqQkyT;Zi*DpJqo)dWK3w6Gx z;sfQj`_6-x_I`nZepo4h^wd5u&7?6be8H#LdgV1CCIC8-?w49u@%Frp0Qv?G;K5;i zpIf-c!$#=_1=BkkZs5|a&=s4QmhQAi(rh!F_~nnckR7=U+1|#l;e>dmYk)E!FvE5W zh>Z+Oq&WHR?h-03)3WH#3tWpw*?qqQ*y=Iw@ui^?X|fYl-?Jw1LF`|JR^f+Sxges{ ze0I}3_#l>SyabEarc>KgwC?ZKp!VB>&rtF0lHs?>(vt!hB+TOcU+vCCki=#R!Rsz9 zeXlN9_c_ndt4!Xt$;}bRNvS2+Ex}dWoy7rzStcO<$(|XzG+T)VeXamLF?SBNZK#Z{Xsn@*|V3waBu7FINqb z^-co?Hx2>p#AimOFI`=9^Z;uX+*&4JjHq}}bi#e3I41gG$-pb}?Cf4CYRVpfO-oSo zJwOc=IeZFpv0w4&+O{hFO&c2j_89=1kuZrOdv64*=#8#@HwmdO@pxPQ_M9obhLv)u zQV3aMQ~)z*dvH3Y)w5*cAaVHer&=fL4{8fcMZK|X|DTV2e0EFR_z=#`Qmf;u_@GV1 z>2?U``>gbkj#`e)VaD~vk1d`|8ryzJ_Ax-a9~<6T)FNNkX{7bSapK`8+$JY5ae`|k zZT;#Zb$cCqlT1yJPn82K$KkauK5YlA5ze3R@oy!7>Wvg#dDj_?(r z&7x;DuS&G%L9~?QkYH0dqvGAbNlM0>dI2XZ^{b)_jNkJw3>MjZ`~J0z(`$Gp3fBX7 zkCI}&L8*6XOzc|kj>2sAG~HDick}e&LD7-%(jhpUwUZ4$)t|4OpZ-G)3OcebvDsK* z7Mtli>NYf!Ih^`yE$~}rwH3{TRXrDd4XKwIA9IgBJM~FDg{h3M@2R$6PGX6X*=}YP z$&waGIqrD4-iT^9k0zb2j#0-G8Ma=$H{9sf{%ibKMBq{{)mksVU70hWt9cw%n?({E zvOUNg{u34KtyKq_Bx`y~ouda)`zka<0W_O5U}Rrenprhx)`##InxVw;6vrmv4rl5bMH8fx)o0qIYnQUnW-Xpqk_zMB%B z0LB!C@Flo(yNemk&iCRw!2@9t&h%J#x)P3aU|=A;h5>u46!s>y#{Ca={D2?yUn(a!pi9R;aC4h2Qo+9&q$^p z(ys&yR90h|qNsG-yPdN3pwR`(0Jw_-26tO=ZId4Pfo;T%zYd?k?r@LieU| zm&ej1ecp5~*S-_H*m~enDWOx#f{(F+e(SY8cjT&^#H{hcfoEL=IKRCQP!6skv70{kYw z@&nn-RCMQYGd84DmF@R+M$eXg(nvItmQ46n3F74&#(|UCVxJ5H8okIpR0@@NyjnF% z0L_G&+oAumAx%+yi{r$5zbYE6u09h$9;A$LulJG+flcTdPYLE*my7s!g?L&(t!<)Z z08#p)7gF)x3I;~ybOwGo@@Xa*;KCi=|Gd+NvJ<8QZ&z4Qpmk%e;b5T@z+b-Mlh}N8 zomd-B9)0Vg{&kZAk8c_o8F}YtdFj`%H&koj!|O8+S{!QLrP}`EJ5Z8&+a*?7M>{Gn z5sQqBxG$5Y^TlIiN@8@=O=;&5(DZDIUn>u$C3rOVM5!aT`^BB$8R3iNG6}r%=Jjir z(D_bLXT-;W2GjZ;Ho^ScUtQ4N>0Q@-g@RT8%N3}(jS!{FcNuyYjak@iK|&JMYa63n zKML|Bco?8nJZT~O1q1;bzT};WZ^t%&Urmm*pgpnevFD^*Yen%ruw>@Hoh~eR+EbiS zOCEHxlGpwN27nr$WiuP-hoPsrMdFqr&lS2Tg{iP2A{xh^$Y7l`arG&I}$M41vK2DbE9+-J+* z%YE?OL{)^x_h~?kdB|gm=5CkEA|zOBkSHA~sB-Oz`~HUg|8TP*v)9GS%-$|^SU`(P zBY{pcH^)$qgP02}`?U4}l9^0R**9mk)*4!C>{~}kR|uF?2k}bs8J zaTvP>0q}_?l;vvFHp4;*5+C)<(0I9?i$xVYdPZ@Grp-XE*5}7Wl;&3MwD7!&|Hu43 z`16AO_&fvULV(pL0LG>vh)^q$>j5vdbcUp=72Q`xT9ZEuul<=AV0;;aO?7arlJ1u- zeGDy0eoe69I+dgNfpzFyfIPbfziG$c6v;mmEX)&$6 z0O&*pJ}-8Bes`Z-xN_TU1#Xz+<+sYh5fI>&vn7g^+uCxtNpkCa=Woe>Rp*}i{b%A` zr@OWOQdX&B2@yESNEv`E0ny(`X}lAcJNBrdg!BE?!noVyIxnhx~aj@ z#0gJp(5;*NyMCjiDDFllv@P+s$?r9&-8ELda6B#iGDsA=a{T*ItN;xvAD_5iC6k6u z;1!C(XZ1LJ(Z`F^)$pdoWP$bZtTw-B_Fxa{3L+AcIkwLQ0J!bp2hZ(c%JJku|LEm+ zZCf*si8GnIKY1QxSA{P4ja7IcIv4y)t7v6uKvES!!}~w^Rcj?|BCxA=pV`zQ-kxQ1 zvzTo3$mvJf=#a*Mb1%Lky^t{j27r%8yLa!9_K*ua-XBpK>R@fBelfb-9{ZKdH?5CR zT*39GB4Z=3DrBX{q)^1Kmq83)@>javda zgrilY0bs39oog_2BFabfNu}t>tF$yB1+GL6Y&+r(Q2of)$mt&Y>H=R{Nd4+U;KKCH zjWpAn8;c;%1H+31g}c_g*!H&XxrzYK>JZXFfRenEj?-o}xE*cwkNCK1&?B2n%BZ(7u9HYoB+VpRNS%EO_8L zm(Aqo;^x27AuLCP$CsRFOn{)fWV6v;LouGB|g@4d}Wuu>P#FxA*PB8=QSBW>d}NPh0^|wtXf|M+)~fDt@dw93s~@W@yL-|8T7l5)r9Zg0uJ=OXqT#|Q`s}Ke=OA~v ze@4{UZM9l3R;S3JQP{m?qIf}ZHkJRL0}^t0j-w0)K|EbT5akD1Heib0hN32 zs!&$-*Vh3MK{4G2uW2+z3xB9tT@rfzEYGK3A;iZ2T}Au;c$69&)GVV_UBr~`y}i3&*ib?*`~ z)ukRW!;JrkP_3wc=LSqPN6=RB*W9;6MrsUvP=8)&`N=FmQQ+*J1;CIQ$g{-iu7)6> z`B9CCT!A&Ci?vzl!Agp8!8n{}-x=bffRPxII9*PaXcC1`en82lYw8<`0>34aF+VlX z%$s#=BEzDYu+{z#zSip32{u2ZM23;!(mK(cp{_@YaZ~+zRz^L(r#o_)`&I+~$>?*) zS7IkW4@rgVT)*YFt% zLF8LnYCW@UixXLhz2Uo3rm!*%{~b$%ADJ>YofomLrHPNPcLi4LWHJqChRi?_Wimxf z{V`jJp+bW>B>?ahC4*?lg{%p!-MMoo{}`}n8Ta?RG+S*Z0#(*~4KtEA2AqCemht=3 zOM2nPnrUClG$(gbTU*O{wzeU_Vr=!B8IR6DvsZm8$WdFS9Ns^Ziwiv1uO~k_9bkad zE}gDF>n{p5pm}n-A_HZ0-|Eep69QrLg$;ja2{dKw^^vONN#xuUDf(dIX=w2Do#ms_jm zk7fdd@G7{sLdjFzBGxpR_Ir|m>&Gmm#on2dWgm7A4jy<|e;1~(MzJy7xYS7XJoQQE zRP~jAuKwS0ik@Y;Os>Gy=3tV?lgf4@*x6YQUVvBAfa7T{{EXlT?(SBfbGw$-GKoT~ z3VI{YLX+8g94iN8FBYdR5&s`E9Hl`T8uP(E~tw z;NipNbNh~XH6%=9fKFMDflbt^(c(W4_Vr$cP5^_=uswILx+ZzjV0PW{a{GRdwQ- z+e0UMKRZcdUl-3$&$-vKE>VVm52{RlW%#_ z*7y2Eo^l(VJvCLz_yX4q#q26&=Gx_kZxR5D{`dM=lLWi`?IRE>vtB3BTNog#=Sn+8 z6C7kTKIQ+c7Vp*Qv=FeTO~@f6j@}GD(^Te%nc9;#lhtJ@S@!xuy=sNS@3;P4N+dyS zLKXN=UmKsrZJB@c7LT?0CoJ2o$Gs%e*KkGMIP-0C|1)Wd4-_k=7cRkg+dXad`N662 zQX-(ElOy+^TpC)^!lEoSUJ#P@zBM>SeGPONZ1G#0gjC-`p>i7sz0+c63G64Dd|Kb*-7!YGYi`^QI2&$G6x)O(@kk5cYT`{b9x6CS(TIqA@`Ko z%yAlFEzl@%7^Y*yi|k()Is^mBL+eSNfB^P1h=lnm@o&yw<=j&8nYB5!Roc5=hUsHj z`XTiIMZhq(H=YH(GRSmooe1_=JW=C(?EXIUix>JHUB7}x#*pCxB`YXHF>+M~36saf zvYIx>d~)!w#f~;6f7f`)6S)3klM!QNolUEqeW+eCcI)!)r`WKIwK*h~h zCmBI}{Fmn7(nv5s{Ar5A5MpW}NaiFMKAx!zLKmfzc5U=kD{UyF(h)*RN~(c}5K{sH z@Mn^c;>|hc(~$z6K`IO=$TqMO=w5~1CT&)q?hw0sdaQkX3VzrW)!4w##mf0(*Z*n;Y!cjt&ia#0X6X+q=o!kTZ$vWj?@wYx`3tfX~c|H@XiH z5Y@}w$I^I&WHT(gC#~Lgaj1M%6*}YfVW{Q2Ew&v#3XiNq{H0A1Py)Z|(rpm#|pC-+&hi8ox!MGm0i zG@w9-1d?}ewD|1flI+!JCITqsZ2z{wV2wi|dwWyF=-Eu&zcU_GvcN&b7hZdV?gM;| zybfm5$SmEyQIb}%L3y@oBY?K^w^2c0kq`v-F6CYBLfwpoG!|jQng68H*~@4syh{j|rf$E?;(9e-!ig`qY4&|AwlQ9R{w?Oe4<-K1*4k zV%Q298ErNNw$l=Lm#8uA&Ki)T3Pl^_G82P|COZ$;j9SZqpc zeV4$Ll9r}|fIgi{`F8+*MWZS1G7$pkrpsBXQh9Kw2u2KB9@^;Bf;|Cn)FB1p9h)<7 zMxeC%@IpIAU*DA>FS>U=J%{Fb2w3!q#o2<30$YFX8`IDFSOCoYH|?08Jd-9kY1v@VjbQ)1w(9+dx`WyC4WT)-v(;V^^}F^)oD zR~RV0KWQc~6Y~U`Kkbg0|2p~YABcv6U4<}|z!0M$nHGUf;sSw50O=_~27kqKHaDUQ zpSH&j7So(;(073iZ8Xx1F=7BfVRZH`faXM(`2!EfRfjPq?5#lnXsWI59U@Z?H6x?N z>Ea7m!?HPoEE9hWpunp8t5(b8m*-mcAM75zu>jC`o|IF_%jPw8J2_LfcxH| z8xLJ4&Y{-|ETbAc_nzyD;8jiuF+t$V6Q&N?iCej0p1kh8sWpkKg-$R*Cjidse-`|? zvxut`RXySoeciix0{E)4oD8}+^2IQ4BoP9J^PQGzu)Z^Zn29X2QbY2g$&?o)7i9iR zbid7YL_(S`v0*Ydf9J9wBF`UY;V#79ddmCNI!2i} z;tk7~SIZ6M_9Aw?m1PjSNrlBc@?X9EIz`o)-d+JgO^ZrS#9>AkLO9xL$WmGJ<4lg8 r31Gmh?R*0omVm&*|Bt^|X-|}vMWFT~P1^NmFQ;g#>8e&>t;7BwSvZgG literal 0 HcmV?d00001