From cf0f46a8a5bbab91c558fcc8ae34258e03cfbd85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 27 Jul 2021 01:59:49 +0200 Subject: [PATCH] Centralized UI sprite and texture definitions. --- .../java/li/cil/oc2/client/ClientSetup.java | 4 +- .../client/gui/AbstractTerminalWidget.java | 65 +++++------------- .../oc2/client/gui/BusInterfaceScreen.java | 29 +++----- ...reen.java => ComputerContainerScreen.java} | 25 +++---- .../oc2/client/gui/RobotContainerScreen.java | 24 +++---- .../oc2/client/gui/RobotTerminalScreen.java | 7 +- .../java/li/cil/oc2/client/gui/Sprites.java | 41 +++++++++++ .../java/li/cil/oc2/client/gui/Textures.java | 26 +++++++ .../li/cil/oc2/client/gui/util/GuiUtils.java | 25 ++----- .../li/cil/oc2/client/gui/widget/Sprite.java | 38 ++++++---- .../li/cil/oc2/client/gui/widget/Texture.java | 24 +++++++ .../oc2/textures/gui/container/computer.png | Bin 11301 -> 0 bytes .../oc2/textures/gui/container/robot.png | Bin 12442 -> 0 bytes ...robot_selection.png => slot_selection.png} | Bin .../textures/gui/overlay/terminal_focused.png | Bin 0 -> 5206 bytes .../oc2/textures/gui/screen/bus_interface.png | Bin 3489 -> 0 bytes .../oc2/textures/gui/screen/terminal.png | Bin 6442 -> 0 bytes .../textures/gui/screen/terminal_focused.png | Bin 6271 -> 0 bytes .../gui/widget/bus_interface_screen.png | Bin 0 -> 2560 bytes .../oc2/textures/gui/widget/cancel_button.png | Bin 0 -> 2121 bytes .../gui/widget/computer_container.png | Bin 0 -> 10112 bytes .../textures/gui/widget/confirm_button.png | Bin 0 -> 2013 bytes .../assets/oc2/textures/gui/widget/energy.png | Bin 0 -> 2357 bytes .../assets/oc2/textures/gui/widget/hotbar.png | Bin 0 -> 2341 bytes .../oc2/textures/gui/widget/input_button.png | Bin 0 -> 2168 bytes .../textures/gui/widget/intentory_button.png | Bin 0 -> 2204 bytes .../oc2/textures/gui/widget/power_button.png | Bin 0 -> 2197 bytes .../textures/gui/widget/robot_container.png | Bin 0 -> 11205 bytes .../oc2/textures/gui/widget/sidebar_2.png | Bin 0 -> 2010 bytes .../oc2/textures/gui/widget/sidebar_3.png | Bin 0 -> 2057 bytes .../textures/gui/widget/terminal_screen.png | Bin 0 -> 3232 bytes 31 files changed, 169 insertions(+), 139 deletions(-) rename src/main/java/li/cil/oc2/client/gui/{ComputerInventoryScreen.java => ComputerContainerScreen.java} (68%) create mode 100644 src/main/java/li/cil/oc2/client/gui/Sprites.java create mode 100644 src/main/java/li/cil/oc2/client/gui/Textures.java create mode 100644 src/main/java/li/cil/oc2/client/gui/widget/Texture.java delete mode 100644 src/main/resources/assets/oc2/textures/gui/container/computer.png delete mode 100644 src/main/resources/assets/oc2/textures/gui/container/robot.png rename src/main/resources/assets/oc2/textures/gui/overlay/{robot_selection.png => slot_selection.png} (100%) create mode 100644 src/main/resources/assets/oc2/textures/gui/overlay/terminal_focused.png delete mode 100644 src/main/resources/assets/oc2/textures/gui/screen/bus_interface.png delete mode 100644 src/main/resources/assets/oc2/textures/gui/screen/terminal.png delete mode 100644 src/main/resources/assets/oc2/textures/gui/screen/terminal_focused.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/bus_interface_screen.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/cancel_button.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/computer_container.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/confirm_button.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/energy.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/hotbar.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/input_button.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/intentory_button.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/power_button.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/robot_container.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/sidebar_2.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/sidebar_3.png create mode 100644 src/main/resources/assets/oc2/textures/gui/widget/terminal_screen.png diff --git a/src/main/java/li/cil/oc2/client/ClientSetup.java b/src/main/java/li/cil/oc2/client/ClientSetup.java index 80fe48b6..bf285239 100644 --- a/src/main/java/li/cil/oc2/client/ClientSetup.java +++ b/src/main/java/li/cil/oc2/client/ClientSetup.java @@ -1,7 +1,7 @@ package li.cil.oc2.client; import li.cil.oc2.api.bus.device.DeviceType; -import li.cil.oc2.client.gui.ComputerInventoryScreen; +import li.cil.oc2.client.gui.ComputerContainerScreen; import li.cil.oc2.client.gui.ComputerTerminalScreen; import li.cil.oc2.client.gui.RobotContainerScreen; import li.cil.oc2.client.gui.RobotTerminalScreen; @@ -40,7 +40,7 @@ public final class ClientSetup { CustomItemModelProperties.initialize(); CustomItemColors.initialize(); - ScreenManager.register(Containers.COMPUTER.get(), ComputerInventoryScreen::new); + ScreenManager.register(Containers.COMPUTER.get(), ComputerContainerScreen::new); ScreenManager.register(Containers.COMPUTER_TERMINAL.get(), ComputerTerminalScreen::new); ScreenManager.register(Containers.ROBOT.get(), RobotContainerScreen::new); ScreenManager.register(Containers.ROBOT_TERMINAL.get(), RobotTerminalScreen::new); diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java b/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java index 90ad1afc..15c31dd4 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractTerminalWidget.java @@ -2,9 +2,7 @@ package li.cil.oc2.client.gui; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import li.cil.oc2.api.API; import li.cil.oc2.client.gui.terminal.TerminalInput; -import li.cil.oc2.client.gui.widget.Sprite; import li.cil.oc2.client.gui.widget.ToggleImageButton; import li.cil.oc2.common.Constants; import li.cil.oc2.common.vm.Terminal; @@ -13,7 +11,6 @@ import net.minecraft.client.gui.AbstractGui; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.Widget; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextProperties; import net.minecraft.util.text.TextFormatting; @@ -29,29 +26,6 @@ import java.util.List; import static li.cil.oc2.common.util.TooltipUtils.withColor; public abstract class AbstractTerminalWidget extends AbstractGui { - public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(API.MOD_ID, "textures/gui/screen/terminal.png"); - public static final ResourceLocation TERMINAL_FOCUSED_LOCATION = new ResourceLocation(API.MOD_ID, "textures/gui/screen/terminal_focused.png"); - public static final int TEXTURE_SIZE = 512; - - private static final Sprite BACKGROUND = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 336, 208, 0, 0); - - private static final Sprite CONTROLS_BACKGROUND = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 19, 34, 50, 250); - - private static final Sprite POWER_BASE = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 12, 15, 255); - private static final Sprite POWER_PRESSED = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 12, 29, 255); - private static final Sprite POWER_ACTIVE = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 12, 1, 255); - - private static final Sprite CAPTURE_INPUT_BASE = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 12, 15, 241); - private static final Sprite CAPTURE_INPUT_PRESSED = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 12, 29, 241); - private static final Sprite CAPTURE_INPUT_ACTIVE = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 12, 1, 241); - - private static final Sprite ENERGY_BACKGROUND = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 19, 34, 80, 250); - - private static final Sprite ENERGY_BASE = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 26, 110, 250); - private static final Sprite ENERGY_BAR = new Sprite(BACKGROUND_LOCATION, TEXTURE_SIZE, 12, 26, 125, 250); - - private static final Sprite TERMINAL_FOCUSED = new Sprite(TERMINAL_FOCUSED_LOCATION, TEXTURE_SIZE, 336, 208, 0, 0); - public static final int TERMINAL_WIDTH = Terminal.WIDTH * Terminal.CHAR_WIDTH / 2; public static final int TERMINAL_HEIGHT = Terminal.HEIGHT * Terminal.CHAR_HEIGHT / 2; @@ -63,7 +37,7 @@ public abstract class AbstractTerminalWidget extends AbstractGui { public static final int HEIGHT = TERMINAL_HEIGHT + MARGIN_SIZE * 2; private static final int CONTROLS_TOP = 8; - private static final int ENERGY_TOP = CONTROLS_TOP + CONTROLS_BACKGROUND.height + 4; + private static final int ENERGY_TOP = CONTROLS_TOP + Sprites.SIDEBAR_2.height + 4; private static boolean isInputCaptureEnabled; @@ -90,24 +64,23 @@ public abstract class AbstractTerminalWidget extends AbstractGui { } public void renderBackground(final MatrixStack matrixStack, final int mouseX, final int mouseY) { + RenderSystem.color4f(1f, 1f, 1f, 1f); + isMouseOverTerminal = isMouseOverTerminal(mouseX, mouseY); - RenderSystem.color4f(1f, 1f, 1f, 1f); - getClient().getTextureManager().bind(BACKGROUND_LOCATION); - - CONTROLS_BACKGROUND.draw(matrixStack, windowLeft - CONTROLS_BACKGROUND.width, windowTop + CONTROLS_TOP); + Sprites.SIDEBAR_2.draw(matrixStack, windowLeft - Sprites.SIDEBAR_2.width, windowTop + CONTROLS_TOP); if (maxEnergy > 0) { - final int x = windowLeft - ENERGY_BACKGROUND.width; + final int x = windowLeft - Sprites.SIDEBAR_2.width; final int y = windowTop + ENERGY_TOP; - ENERGY_BACKGROUND.draw(matrixStack, x, y); - ENERGY_BASE.draw(matrixStack, x + 4, y + 4); + Sprites.SIDEBAR_2.draw(matrixStack, x, y); + Sprites.ENERGY_BASE.draw(matrixStack, x + 4, y + 4); } - BACKGROUND.draw(matrixStack, windowLeft, windowTop); + Sprites.TERMINAL_SCREEN.draw(matrixStack, windowLeft, windowTop); if (shouldCaptureInput()) { - TERMINAL_FOCUSED.draw(matrixStack, windowLeft, windowTop); + Sprites.TERMINAL_FOCUSED.draw(matrixStack, windowLeft, windowTop); } } @@ -132,9 +105,9 @@ public abstract class AbstractTerminalWidget extends AbstractGui { } if (maxEnergy > 0) { - ENERGY_BAR.drawFillY(matrixStack, windowLeft - ENERGY_BACKGROUND.width + 4, windowTop + ENERGY_TOP + 4, currentEnergy / (float) maxEnergy); + Sprites.ENERGY_BAR.drawFillY(matrixStack, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + ENERGY_TOP + 4, currentEnergy / (float) maxEnergy); - if (isMouseOver(mouseX, mouseY, -ENERGY_BACKGROUND.width + 4, ENERGY_TOP + 4, ENERGY_BAR.width, ENERGY_BAR.height)) { + if (isMouseOver(mouseX, mouseY, -Sprites.SIDEBAR_2.width + 4, ENERGY_TOP + 4, Sprites.ENERGY_BAR.width, Sprites.ENERGY_BAR.height)) { final List tooltip = Arrays.asList( new TranslationTextComponent(Constants.TOOLTIP_ENERGY, withColor(currentEnergy + "/" + maxEnergy, TextFormatting.GREEN)), new TranslationTextComponent(Constants.TOOLTIP_ENERGY_CONSUMPTION, withColor(String.valueOf(energyConsumption), TextFormatting.GREEN)) @@ -185,13 +158,13 @@ public abstract class AbstractTerminalWidget extends AbstractGui { getClient().keyboardHandler.setSendRepeatsToGui(true); addButton(new ToggleImageButton( - parent, windowLeft - CONTROLS_BACKGROUND.width + 4, windowTop + CONTROLS_TOP + 4, + parent, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + CONTROLS_TOP + 4, 12, 12, new TranslationTextComponent(Constants.COMPUTER_SCREEN_POWER_CAPTION), new TranslationTextComponent(Constants.COMPUTER_SCREEN_POWER_DESCRIPTION), - POWER_BASE, - POWER_PRESSED, - POWER_ACTIVE + Sprites.POWER_BUTTON_BASE, + Sprites.POWER_BUTTON_PRESSED, + Sprites.POWER_BUTTON_ACTIVE ) { @Override public void onPress() { @@ -206,13 +179,13 @@ public abstract class AbstractTerminalWidget extends AbstractGui { }); addButton(new ToggleImageButton( - parent, windowLeft - CONTROLS_BACKGROUND.width + 4, windowTop + CONTROLS_TOP + 18, + parent, windowLeft - Sprites.SIDEBAR_2.width + 4, windowTop + CONTROLS_TOP + 18, 12, 12, new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_CAPTION), new TranslationTextComponent(Constants.COMPUTER_SCREEN_CAPTURE_INPUT_DESCRIPTION), - CAPTURE_INPUT_BASE, - CAPTURE_INPUT_PRESSED, - CAPTURE_INPUT_ACTIVE + Sprites.INPUT_BUTTON_BASE, + Sprites.INPUT_BUTTON_PRESSED, + Sprites.INPUT_BUTTON_ACTIVE ) { @Override public void onPress() { diff --git a/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java b/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java index 38ba4193..fc7dbd5c 100644 --- a/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/BusInterfaceScreen.java @@ -2,9 +2,7 @@ package li.cil.oc2.client.gui; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import li.cil.oc2.api.API; import li.cil.oc2.client.gui.widget.ImageButton; -import li.cil.oc2.client.gui.widget.Sprite; import li.cil.oc2.common.Constants; import li.cil.oc2.common.item.Items; import li.cil.oc2.common.network.Network; @@ -13,7 +11,6 @@ import li.cil.oc2.common.tileentity.BusCableTileEntity; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.util.Direction; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.util.text.TranslationTextComponent; import org.lwjgl.glfw.GLFW; @@ -21,14 +18,6 @@ import org.lwjgl.glfw.GLFW; import static li.cil.oc2.common.util.TranslationUtils.text; public final class BusInterfaceScreen extends Screen { - private static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation(API.MOD_ID, "textures/gui/screen/bus_interface.png"); - - private static final Sprite BACKGROUND = new Sprite(BACKGROUND_LOCATION, 256, 240, 30, 0, 0); - private static final Sprite CONFIRM_BASE = new Sprite(BACKGROUND_LOCATION, 256, 12, 12, 5, 35); - private static final Sprite CONFIRM_PRESSED = new Sprite(BACKGROUND_LOCATION, 256, 12, 12, 20, 35); - private static final Sprite CANCEL_BASE = new Sprite(BACKGROUND_LOCATION, 256, 12, 12, 5, 50); - private static final Sprite CANCEL_PRESSED = new Sprite(BACKGROUND_LOCATION, 256, 12, 12, 20, 50); - private static final int TEXT_LEFT = 9; private static final int TEXT_TOP = 11; private static final int CONFIRM_LEFT = 206; @@ -59,8 +48,8 @@ public final class BusInterfaceScreen extends Screen { getMinecraft().keyboardHandler.setSendRepeatsToGui(true); - left = (width - BACKGROUND.width) / 2; - top = (height - BACKGROUND.height) / 2; + left = (width - Sprites.BUS_INTERFACE_SCREEN.width) / 2; + top = (height - Sprites.BUS_INTERFACE_SCREEN.height) / 2; nameField = new TextFieldWidget(font, left + TEXT_LEFT, top + TEXT_TOP, 192, 12, text("{mod}.gui.bus_interface_name")); nameField.setCanLoseFocus(false); @@ -74,11 +63,11 @@ public final class BusInterfaceScreen extends Screen { addButton(new ImageButton( this, left + CONFIRM_LEFT, top + CONFIRM_TOP, - CONFIRM_BASE.width, CONFIRM_BASE.height, + Sprites.CONFIRM_BASE.width, Sprites.CONFIRM_BASE.height, new TranslationTextComponent(Constants.TOOLTIP_CONFIRM), null, - CONFIRM_BASE, - CONFIRM_PRESSED + Sprites.CONFIRM_BASE, + Sprites.CONFIRM_PRESSED ) { @Override public void onPress() { @@ -90,11 +79,11 @@ public final class BusInterfaceScreen extends Screen { addButton(new ImageButton( this, left + CANCEL_LEFT, top + CANCEL_TOP, - CANCEL_BASE.width, CANCEL_BASE.height, + Sprites.CANCEL_BASE.width, Sprites.CANCEL_BASE.height, new TranslationTextComponent(Constants.TOOLTIP_CANCEL), null, - CANCEL_BASE, - CANCEL_PRESSED + Sprites.CANCEL_BASE, + Sprites.CANCEL_PRESSED ) { @Override public void onPress() { @@ -137,7 +126,7 @@ public final class BusInterfaceScreen extends Screen { @Override public void render(final MatrixStack matrixStack, final int mouseX, final int mouseY, final float partialTicks) { renderBackground(matrixStack); - BACKGROUND.draw(matrixStack, left, top); + Sprites.BUS_INTERFACE_SCREEN.draw(matrixStack, left, top); super.render(matrixStack, mouseX, mouseY, partialTicks); diff --git a/src/main/java/li/cil/oc2/client/gui/ComputerInventoryScreen.java b/src/main/java/li/cil/oc2/client/gui/ComputerContainerScreen.java similarity index 68% rename from src/main/java/li/cil/oc2/client/gui/ComputerInventoryScreen.java rename to src/main/java/li/cil/oc2/client/gui/ComputerContainerScreen.java index 13ec1331..eb1aa670 100644 --- a/src/main/java/li/cil/oc2/client/gui/ComputerInventoryScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/ComputerContainerScreen.java @@ -2,26 +2,18 @@ package li.cil.oc2.client.gui; import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; -import li.cil.oc2.api.API; import li.cil.oc2.api.bus.device.DeviceTypes; import li.cil.oc2.client.gui.util.GuiUtils; import li.cil.oc2.common.container.ComputerInventoryContainer; import net.minecraft.client.gui.screen.inventory.ContainerScreen; import net.minecraft.entity.player.PlayerInventory; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; -import static java.util.Objects.requireNonNull; - -public final class ComputerInventoryScreen extends ContainerScreen { - private static final ResourceLocation BACKGROUND = new ResourceLocation(API.MOD_ID, "textures/gui/container/computer.png"); - - /////////////////////////////////////////////////////////////////// - - public ComputerInventoryScreen(final ComputerInventoryContainer container, final PlayerInventory inventory, final ITextComponent title) { +public final class ComputerContainerScreen extends ContainerScreen { + public ComputerContainerScreen(final ComputerInventoryContainer container, final PlayerInventory inventory, final ITextComponent title) { super(container, inventory, title); - imageWidth = 176; - imageHeight = 197; + imageWidth = Sprites.COMPUTER_CONTAINER.width; + imageHeight = Sprites.COMPUTER_CONTAINER.height; inventoryLabelY = imageHeight - 94; } @@ -31,9 +23,9 @@ public final class ComputerInventoryScreen extends ContainerScreen { - private static final ResourceLocation BACKGROUND = new ResourceLocation(API.MOD_ID, "textures/gui/container/robot.png"); - private static final ResourceLocation SELECTION = new ResourceLocation(API.MOD_ID, "textures/gui/overlay/robot_selection.png"); - private static final int SLOT_SIZE = 18; /////////////////////////////////////////////////////////////////// public static void renderSelection(final MatrixStack matrixStack, final int selectedSlot, final int x, final int y, final int columns) { RenderSystem.color4f(1f, 1f, 1f, 1f); - Minecraft.getInstance().getTextureManager().bind(SELECTION); final int slotX = (selectedSlot % columns) * SLOT_SIZE; final int slotY = (selectedSlot / columns) * SLOT_SIZE; - final float offset = SLOT_SIZE * (int) (15 * (System.currentTimeMillis() % 1000) / 1000f); - blit(matrixStack, x + slotX, y + slotY, 0, offset, SLOT_SIZE, SLOT_SIZE, SLOT_SIZE, 270); + final int offset = SLOT_SIZE * (int) (15 * (System.currentTimeMillis() % 1000) / 1000); + Sprites.SLOT_SELECTION.draw(matrixStack, x + slotX, y + slotY, 0, offset); } /////////////////////////////////////////////////////////////////// public RobotContainerScreen(final RobotContainer container, final PlayerInventory playerInventory, final ITextComponent title) { super(container, playerInventory, title); - imageWidth = 176; - imageHeight = 197; + imageWidth = Sprites.ROBOT_CONTAINER.width; + imageHeight = Sprites.ROBOT_CONTAINER.height; inventoryLabelY = imageHeight - 94; } @@ -47,9 +40,9 @@ public final class RobotContainerScreen extends ContainerScreen renderSelection(matrixStack); - GuiUtils.renderMissingDeviceInfoIcon(matrixStack, this, DeviceTypes.FLASH_MEMORY, GuiUtils.WARN_ICON); - GuiUtils.renderMissingDeviceInfoIcon(matrixStack, this, DeviceTypes.MEMORY, GuiUtils.WARN_ICON); - GuiUtils.renderMissingDeviceInfoIcon(matrixStack, this, DeviceTypes.HARD_DRIVE, GuiUtils.INFO_ICON); + GuiUtils.renderMissingDeviceInfoIcon(matrixStack, this, DeviceTypes.FLASH_MEMORY, Sprites.WARN_ICON); + GuiUtils.renderMissingDeviceInfoIcon(matrixStack, this, DeviceTypes.MEMORY, Sprites.WARN_ICON); + GuiUtils.renderMissingDeviceInfoIcon(matrixStack, this, DeviceTypes.HARD_DRIVE, Sprites.INFO_ICON); GuiUtils.renderMissingDeviceInfoTooltip(matrixStack, this, mouseX, mouseY, DeviceTypes.FLASH_MEMORY); GuiUtils.renderMissingDeviceInfoTooltip(matrixStack, this, mouseX, mouseY, DeviceTypes.MEMORY); @@ -63,8 +56,7 @@ public final class RobotContainerScreen extends ContainerScreen @Override protected void renderBg(final MatrixStack matrixStack, final float partialTicks, final int mouseX, final int mouseY) { RenderSystem.color4f(1f, 1f, 1f, 1f); - getMinecraft().getTextureManager().bind(BACKGROUND); - blit(matrixStack, leftPos, topPos, 0, 0, imageWidth, imageHeight); + Sprites.ROBOT_CONTAINER.draw(matrixStack, leftPos, topPos); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java index 4fa7ac18..fd65e264 100644 --- a/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/RobotTerminalScreen.java @@ -1,7 +1,6 @@ package li.cil.oc2.client.gui; import com.mojang.blaze3d.matrix.MatrixStack; -import li.cil.oc2.client.gui.widget.Sprite; import li.cil.oc2.common.container.RobotTerminalContainer; import li.cil.oc2.common.network.Network; import li.cil.oc2.common.network.message.RobotPowerMessage; @@ -16,9 +15,7 @@ import net.minecraft.util.text.ITextComponent; import java.nio.ByteBuffer; public final class RobotTerminalScreen extends ContainerScreen { - private static final Sprite INVENTORY_BACKGROUND = new Sprite(AbstractTerminalWidget.BACKGROUND_LOCATION, AbstractTerminalWidget.TEXTURE_SIZE, 224, 26, 80, 300); - - private static final int SLOTS_X = (AbstractTerminalWidget.WIDTH - INVENTORY_BACKGROUND.width) / 2; + private static final int SLOTS_X = (AbstractTerminalWidget.WIDTH - Sprites.HOTBAR.width) / 2; private static final int SLOTS_Y = AbstractTerminalWidget.HEIGHT - 1; private final RobotTerminalWidget terminalWidget; @@ -34,7 +31,7 @@ public final class RobotTerminalScreen extends ContainerScreen WARNING_BY_DEVICE_TYPE = Util.make(() -> { final HashMap map = new HashMap<>(); @@ -40,20 +35,10 @@ public final class GuiUtils { /////////////////////////////////////////////////////////////////// - public static void renderMissingDeviceInfoIcon(final MatrixStack matrixStack, final ContainerScreen screen, final DeviceType type, final ResourceLocation icon) { - findFirstSlotOfTypeIfAllSlotsOfTypeEmpty(screen.getMenu(), type).ifPresent(slot -> { - screen.getMinecraft().getTextureManager().bind(icon); - AbstractGui.blit(matrixStack, - screen.getGuiLeft() + slot.x - 1 + RELATIVE_ICON_POSITION, - screen.getGuiTop() + slot.y - 1 + RELATIVE_ICON_POSITION, - 200, - 0, - 0, - DEVICE_INFO_ICON_SIZE, - DEVICE_INFO_ICON_SIZE, - DEVICE_INFO_ICON_SIZE, - DEVICE_INFO_ICON_SIZE); - }); + public static void renderMissingDeviceInfoIcon(final MatrixStack matrixStack, final ContainerScreen screen, final DeviceType type, final Sprite icon) { + findFirstSlotOfTypeIfAllSlotsOfTypeEmpty(screen.getMenu(), type).ifPresent(slot -> icon.draw(matrixStack, + screen.getGuiLeft() + slot.x - 1 + RELATIVE_ICON_POSITION, + screen.getGuiTop() + slot.y - 1 + RELATIVE_ICON_POSITION)); } public static void renderMissingDeviceInfoTooltip(final MatrixStack matrixStack, final ContainerScreen screen, final int mouseX, final int mouseY, final DeviceType type) { diff --git a/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java b/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java index cf174a45..e630154e 100644 --- a/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java +++ b/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java @@ -1,21 +1,26 @@ package li.cil.oc2.client.gui.widget; import com.mojang.blaze3d.matrix.MatrixStack; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.AbstractGui; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; -public final class Sprite extends AbstractGui { - public final ResourceLocation image; - public final int textureSize; +public final class Sprite { + public final Texture texture; public final int width, height; public final int u0, v0; /////////////////////////////////////////////////////////////////// - public Sprite(final ResourceLocation atlas, final int textureSize, final int width, final int height, final int u0, final int v0) { - this.image = atlas; - this.textureSize = textureSize; + public Sprite(final Texture texture) { + this.texture = texture; + this.width = texture.width; + this.height = texture.height; + this.u0 = 0; + this.v0 = 0; + } + + public Sprite(final Texture texture, final int width, final int height, final int u0, final int v0) { + this.texture = texture; this.width = width; this.height = height; this.u0 = u0; @@ -25,13 +30,20 @@ public final class Sprite extends AbstractGui { /////////////////////////////////////////////////////////////////// public void draw(final MatrixStack stack, final int x, final int y) { - Minecraft.getInstance().getTextureManager().bind(image); - blit(stack, x, y, u0, v0, width, height, textureSize, textureSize); + draw(stack, x, y, 0, 0); + } + + public void draw(final MatrixStack stack, final int x, final int y, final int uOffset, final int vOffset) { + blit(stack, x, y, u0 + uOffset, v0 + vOffset, width, height); } public void drawFillY(final MatrixStack stack, final int x, final int y, final float value) { - Minecraft.getInstance().getTextureManager().bind(image); - final int h = (int) (this.height * value); - blit(stack, x, y + (height - h), u0, v0 + (height - h), width, h, textureSize, textureSize); + final int h = (int) (this.height * MathHelper.clamp(value, 0, 1)); + blit(stack, x, y + (height - h), u0, v0 + (height - h), width, h); + } + + private void blit(final MatrixStack stack, final int x, final int y, final int u0, final int v0, final int width, final int height) { + texture.bind(); + AbstractGui.blit(stack, x, y, u0, v0, width, height, texture.width, texture.height); } } diff --git a/src/main/java/li/cil/oc2/client/gui/widget/Texture.java b/src/main/java/li/cil/oc2/client/gui/widget/Texture.java new file mode 100644 index 00000000..06b93195 --- /dev/null +++ b/src/main/java/li/cil/oc2/client/gui/widget/Texture.java @@ -0,0 +1,24 @@ +package li.cil.oc2.client.gui.widget; + +import li.cil.oc2.api.API; +import net.minecraft.client.Minecraft; +import net.minecraft.util.ResourceLocation; + +public final class Texture { + public final ResourceLocation location; + public final int width, height; + + public Texture(final String location, final int width, final int height) { + this(new ResourceLocation(API.MOD_ID, location), width, height); + } + + public Texture(final ResourceLocation location, final int width, final int height) { + this.location = location; + this.width = width; + this.height = height; + } + + public void bind() { + Minecraft.getInstance().getTextureManager().bind(location); + } +} diff --git a/src/main/resources/assets/oc2/textures/gui/container/computer.png b/src/main/resources/assets/oc2/textures/gui/container/computer.png deleted file mode 100644 index 73cba94a441f7f4efa5d049fbde1d9824a3079ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11301 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 diff --git a/src/main/resources/assets/oc2/textures/gui/container/robot.png b/src/main/resources/assets/oc2/textures/gui/container/robot.png deleted file mode 100644 index 168fdcbb02ebcb700009bd316a47e44e51647ce9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12442 zcmdUWby$?$_UH`VEg>}wNJ!1lHFT(S2}lkwlyo-(A|;{H0us_FAV_zKv`BZ0(jc98 z(C>WboO{mi-oNf2_jzWXdH1_wuf5j0_F8+rYa%t&lnC+e;sF2v!iNv!wEzGh>JkXR z!9x8QxfWUh09cN;I{NPVsw!d@P7XY9ODA&#kGF#}3Jw5BNO?QMEuJFWLFNc+TSpjp zx1j|LvbBVP^#oNRs?Kr<8`}rIt_W>kH607zrxv1?U@1vF32!kJ0|$gV9OUg_@8~Ax z4Fmt?D~7thz0C^-{YG(r3Ipq_YJlXNToE8a9zh-mSP~B;;c96mrX{cV7cpuC1KYT} zJB#u1dU<*Ac=7W%xmxo=MMXt)vx4)K;QUvcUgcr&K;r&;1XB#JXCpQ}>=f5TT zH=4h}|3T<(YxO_Oa|`(obd>u3`wZT2=l_PRs``IMcX0T(Ww^O3c%l^Xms0<23ICYD zO~=O>!K;OEbMkPtKqz=39Nn4!RTGvLf73gAxZ3|ViKPWE!XDv(LUlt43H>wWtsceX zoa~)kwNZ}}0tSZuX7l^DhOIZkUSHl8MdF4s5)8~IDD=NU4gL%CZ#DnntLkKlV$1)V z@SmWEa&j83PFA+|D43g;k}T+u8HoBj4|tf79sy69xkd^P!&S+h^@J$l$+%P=*#$MR|lJ+#N0t zcSp&}2jPQqL!jJHK^>@&7{7oRKR+h~DhBz(>NmcVrLC3E{|)=r3qTSmd{tGk2exkR zPOd(`Z~bu%ZG_98(VwBc?QfsB^@>}3xW(=2U|?rgCrb|tgyrv5{Pvk!sGF0OyBFLQ zA!CiQGz=_bWo3)fgAYjK);T~>9ub~Dw)mUC%LZ|4TL>S78zRchC#nPG6XO#U;}_wC z@ZBzq_y3_Ng8wf2zlZ|m?>pM{_je?-S5Qg;f~fYus63Q!V2zT z?+%u9buxEyH??p=?VYxc2-iPz+1vib==aS3;3UEOuhaa&{Fe{{8cWUTI7hFy^*3I`9p6&ZOu}s}JREUf*#lJ?Y?tQ`mz9)`Qwg2k&HucTJ@98^D znHNp#={qngi6>flTL+F0@+u#*&>al*51w&ma&)lGhwAB7i$Vo+G`~siusqqyANimw zwqsgiAYhM)&~1O#`>CS+UHb~B!N{7!l49als^{v@#kuOT_CAy-xm_;1N_3m@7(TJY zkvM9<_9j(&p?~jvLV07l^!>W`2PZD3T2FHe3M?HGheK3DAxxLi(0&pbU+R~l57?UA zdt%AX=336;Em`z>>?@+W$Xv)Qf0B3@6w_9GmKW}fe_wxfGovRyK9N>pLK_mr*6s83 zSugkLynFhPT=$tI+AgzEF8*06`i~&0fXXb)tsysdh~VLua{;UN!Oe{2yb(! zH!Qf`z@|2An4@j!XKzmkL&!vzzqPvC%^py z0dLZ&0RRx-p}dTaclvgQUpk#`>Pb*Rv9Is9{WE|@mJGqkCH+x^O+c=x5qH$fIkqOCz)Ly?$ZSGg` z8WX+fE^;d_-sRUG(S}|5OJ$z*tDF?Ar*D+{ZWz7&tPg(dzkmVDl4Ysph8HSaP$0?cNr9r)*n zLQ){9DpvVvUyt=S;&ko{IwY#B^+-rc5&i<#{u;`JL1GOS7>Nq@GqXVN68a<*9OqTx6!vN0sCGB05lBdwvKEdeT(>l*6Ijd5Yl4GJMX2R;!aF4l z0cQGPpPt?&A%Q&SaKQIL@A>?|usCoomQQKX$**eS=t34Sdj(P9{PD@131d(_h-kxO z!hpK{>pBPBM7BX9(F19uj2LC#r~7pAEkrlgJhjrcg`sm(Tv*?l1cxF)Z}N(mkoCcr zRF&sxsVWN?fumhcDOd!3IJ1}6e2pxblY!RYP^7cOv)TQ(8ynxboZ`hwAI~Jl4|_BS z7Zz(T9PW%z?FC-M?N9WGPN*SMD+1an&)xRLl^xx7Sx@LY9C$W08RPaOP21M23kORY z!{te|yR_7=^|>DVC67IB4TDuhB|Uj?l>3st7Yq}QnblAeL#}(TJOerl=sEHU<(oH5 ze~d3G(4>8zM@cY(v*rfEQJ51&+I<^}UHQ?{7fu)mRl4yD2nYbI#v8$OwF5YCcp%YB zQNEWRIwjU%0cIkxF)`M5%iOw)^K(n}B7Yk#Maj&}^6f}Ide^NOjR|5>NkTSYK`~{z zT0xb6CA?=z+Oby4Um)7I+Ho!_I5^nAnk~NP$Jy%xcx0wl5k-+_xX*Rx;nz`?EZaB1 zH+`93$vKiY5{2tYT*3A@a@iC7hTDZcFBIiJ%)w2h_9}4|ars&SDr^$83IA&xX}|>|gm~Z4VEdu<2PfSl zhdAfeD1fy9?t@UJzVU>>Psi%D)^k=Aiqxey2Tn}#&IYe+0EkxR{NQ|FKs?QhM8?Vu z{_t#(9kU$<)>`Jp)A2RkDac0Z2TvV&^QMQbkj)o4^kDxDF(f3}Yv**H5r{>1IS4~^ zLEja0exsgFdOX$sQo|fdCS)u&{ zL+Wyeaeu`yGuZYnL>2wH5wrq^{34qH09(G<0H)-NE*VT6SUfgqq;OD~Ui;rdwP3qG%#UnZhQJeh#mZ36+2P)SQW zz2$w8HEe=N6dFMvz)M6C|6WQyaOQh3>_$GohU{eu(VHFMsYPYlT>lc=t4AQI*WqhB zcAT-o)zDO5tICW>k^bKnl1AUgGnWm$i>qIj4!`>#Kb}3dhcD9dy}7D*w69eOeV)r? zG!RnrZk5)Rv36H)B)vOelfHX#@Vf5?7 z^6s(us+~xJ_VPNh#IqGCUmS+ZeO5ZJUh%yWrMKNtadgpwH4gH88KWiSbxU;3 zfj#0bLj#7+$6d-U3*2cR4|4KqFTM}x`|NAY?l(y-udLIDUId-e4T{{D%{DmlOJ4Up za~|``R4f+G!-V}}_VM3O_gbcs^21`g+SZ!e!49gRVGGbJh+fM5Jt6h@L`-jPc0`ecby9!R~WG@zkkn%aS;f$34bo|%e>wc@dc}o4s zH;heyZUzXF`DE+!68^HtPAklL3yAJL^zkAqC=e~2L6q_8*ZN`#@y@gPYe%||{_6b; z{Lee$43IwfWVcvmW-?^AOm|Hsh{K0=+n0Vd?Cl75ee}NxM7dp4`ECwFA zix!2eNsC>KNQ4_aY zSwt>VF!js5?uOGrk@MH0-WS zTxkurrOOjoyu0T(P(Jpebr`rK`=4<*mW%JfU#fQ>kfoDweARtH!&pNa zXUHBa{v)c-H65RNNA+p4gr6)9%5?S1N8%>;eZJIX2I(soa?mUIO@1Ea?$G^(7J3v= z#O9^5l|W29R`sUG@@0=DyP_}NXcJk-EJfvcBQxMjnjB7Wf;dge(07l6SbpAfAJD6C z610=KMl@NR=$Pr#HZS4j2}7@q_p)e$?gv+q5|=cQ{ue)W-vWcQh=M}MGMXNI;jSIy zBLo&Ei2Onv4;#dfo{7k|=)Hx=S3OMBZqu5|em__Q3eDQH1?zl5PuZy&3%^G2gOGBu zr^rAtw6_n~7jd7vDw(XJT*Ta%b&E_%FF8`H2gslLR>RUc-U-5MoGhi9>ifF5A}}0U z@f3qs^4PrmmD}vX^{_@_D62A&VYECSsS3MRSZ`GB26^mDxSk{NTblR9k~yw?jh(=b zj8iueygFGqm;x%h@bClJ(NTuw^kJ*}hL>Qn?;@9L3EMCgJ!4SmOXVs=J0DGXNY#&{ zh5Ff2bLm^;bNe=BQmgZHX&*73lg}2>nBVM+7L>0~$b3p&$d3zSF4c-Y@IFFQOy;tv zyBlWQ!_#;=tNiU%XKrI%kcvrjO}4~|ndpXp;=HNPymVp}`&9g>gQFrj#O{$~E)Iq9 zo7b4c&w_$ZrQkDk*mMVylS1L!`Cm6uCsx+_-Qt~Nw-|sRCz5W}*dh(4u71l0NBQpU z1VJHcI3VE!xglxwIU(+|Rom&;Eb>xMpHVd;dSvuHuI|rC28}QG1-WAa z%&srxv*w;X!}MQYXr@gO2Kcvggir)WINMHHWgVSd;l|CjZ1479rG5z zLY@+z!aOsZ48}y5Ke3teT+|*Ep;)o-lqS?4rjPr%U~J4Wz4SALgx3#peM4f_`bBTL)+6Y*ns!9!qJeSOm$-noyyinAryyX>+AMOZn3Vq+eE2}&bb!01 z?aP-B>=aRpjkM~psb|UzR|EjF2{qpErE|k^i!s5H!<*{}8Nlh`Fx3({u|MC}d5=uv z@V=dTmGNC?n0wv+C9O-(y#gSBA?Wf#zj=1k!|3Dk3;m0kwA}b8pPya$b!b0`>2N?NmCC4r4ENs;5Wz zy!Z}ma-DrkoAh&la0F1}(-rS$vu^6#Mo9Go@o>kR6Ro7wG|vxE9G+c!obB{8k!0z! zN}=v+D@5D7{8hOq>ES#C4EfaQ2E7$|v@-_aZ;TA%(T{;!86v< zK%1BvS^COHCIJ!V5l%#|K-?i0pid(;3b7y%P;xRXRBM4Ao!6QaQ?h zImewbfIoDa1MK79Jw8wRNnPIYYTJqxe-bTMu7_~#<&L@@A*sr@rS9^D-OsclnR-F~A-qGabuaf73Nk|#EwK24STxajoFKHPo_shI8qfy5T z&ZO(|4QNw9z>n?Cj-ZxPG=Q1Si6ah=(_Z${lJu01UoMIAy(4=+a3W6VQc_tae>}XW zqAU31@`408{mOs#`~tbCb5{IAyxzF|At1X)t+#Q;G7p@b92Tu()v--8)!n@=;`>gdq)c$?xve+Ul6Ug{?H@bQ?R_a2=cu+ zFOD+0^ynr^Nm_5Pp8;A_H1KlDE#h*80=$nvcW<7C;ENcBP{C6wcdG0KwZnbNr<^&R zM-%)X^fR9ee83Sf7*zm;zRaPQUHm4vi<@vZ#?1TJ`=-Ufr7`e8Z>5u5UEbVG63_~v zu3)zCUI_G)tKIzmF{P+x_q^s1Z)tni#h$2g3-@NSQanq5theYm^o<>k2md4GfB?tK zU;`UGuLF+qpz-C#^5lH=--?%hwy(T?TanpdV)kBXC z6YyZ@sB{_svDE$KT2ITi1=7YTuLeGipt+B7UT0oA^D*#~-KA_M<0QA(kFq`S47(4( z!s&8Djc<|Pv*0wYXK|RAq7uL%+bf*>P?Msp?N<4SPyN8zv!NhauED+MWq|^Vm0G&^n7Bkd$8BoQC?q1!JPZ@qY&9ohIa@4%OX`YJsCIrv$zG<3+k&RPh@tLUv zMGT@e9JQlhjMW(3JqL^^I>)lGYIJfqnH`;Ulf~fKp%(q#J9&|@r1{{pip}c=(|IIw zTq3Q@rHrIqHKTOaOxa>OD&PG;d_#k;KFQeFS@kBie!p%Yub&do?Fo58omdaV!)nqZ z`R)^L6)rf4PhuB9dV6Rk&EK2mSnEMJuE{!s>V`f%-_k5y{w0Rt>@78vO=mG%%|iCeY}luH?sVccuaM-;af z+{}qX*hu5yt+J91N44Yh(`843O`&+H}X{3+>ZPH;{5vweh7P7 z;C5rOsds)3_p?;A@AX0WJY%77z&lJDBzf1Y+j+VT(Mz0HNutO^D&8)e>`?RJS7Zwc zN^wJ#%qFYGl=G#{@_fOv%}B;F!(iIxV{wV2dLx>YnKW6U_%2Rb6GbjZtOVp`d_cp~ zPSVqT&i!-r@Ek=mC6G+0d>>t_v9P18o^Z!Ky=G!0)fv@fJN}n~mIjG}dyU3d0I7bn z$=we8w${Unw?a$P45;+5Nveglam!0yv*!^GSmlk@n{*Wo#WN@;uSrzg%@vc_WLTZp z^^-#W4EbW==koWnp9=twR-cWNtrDHMU#oOz_XgJ}mRf$Am^)|Y5_P~0^u4*#cbz7i z4V-b%cmD>St@Zq%H-7LsA~aw=P$92q5?H)zV}Cr^!$2-5E`O?j^tk~Z`@F37`UHR! zzxjzVQ9XL0*Cu{l;4S?qt*4;nXXz$wem2`VD#Lq%P*NwT7oxV%{}rLLarN1^sL`*Z zYyu6fc3UcNG4IlKBm^4I#JD5^*f=Lg)r-Oafuo9`&y87hdA=nT7b#Hfg3bfw$fs?@ z?~dm$4hr&~P+DS*?e%jo!=+ij9s9yg#u)PRH1eQlw!$d#OPp zWK@ZC{+HUcW+_+)2I`8OFOLd(Z|>h@6)P8EuDkh6aXPP)nIp(!wu>Xkt32bu8t%3~ z0PR{BT1z!{ic&i}c&kI>nSoM2%QJNwg`$`4-@7-igjq!)6Wy##9<+NOeE;#oqu<-*Z8i#hg2wbqKlwFXhO;~K9l zR#KW@Nwn%04dI_Mq8n(Tj|6)0A@otw1MHNl!W(|~+6xd-(#2`qMbQnsdW)%r;5e;8 zmw~>C^KV~bR$uNYGdGC8a1XkRI<01x{B=e|uc9YA=Zwx{td|DS6{+?RU||{^OP1lJ85!jMBS|-x=- z(_wvcucx?>kPza|yzAXOs$T_n@H>eh7)jJuP~6$1nXr*7+bds3kpi}LG~uF6Ue^v$ z>LlREKp4x`#z#E6$>jt($g{TS)L_0RlPnu)lo8eKHdX|8P_=~~YpyOOJ$e@FIn}Ub z@4S4!$zJG*-DVYhN{zzq8jy=sy zqlxyYxmV18L_s*1hT!RtAwE;+~0Htf;)G=1eflEl$k_QK_brNI8YSKoJ4$&vi z1D9}S-Ir9&qL*&%PwhO`Q__?IOzTTa#-H`Rjxl5HI9h+umCef-gfN@Zbk6nzJRN`E zxt#M%@af|mYeULpBiFmW)z&U&Yu3!a(zb7l2LMocPY)xtf;bwC>!~7m%K8rX1%|q$ z1&3A>!M-E@<9;NZdW0X_43c3a4?7!@IDasEvAX+-dGDPNbPw z-UHyLn6st-(fm8we_i=Xu@nrXb3XDpdkN(+e~u}wwyUcKf9An|$Q)!~9Plwy+c z*R;*k1H@Ti0s~FuhlN9TXm#cG-$cnFnmPf9#e`zN?$66yO$_P(|ga~IR#S}6Q% zP(Bgwvhdv?PQrw6%dY;-qtHj>lH6+XKlJZfVH4qxp`R|lS<{*s68=n>wpB87ND#!o zM@EeCOCXPBG%Fq6%M?q=P~|h?8)&DHHBH9CgpRbKfzUn4$8o>>iM@i()=1w4C0{oJ zHLR@7EkicotR2Rij-@(iVlJePE!#p|qPo{DrwLuPE*}V}wMqa*l0~W-st;{?Y?Up2 zyyL^JU0HcrZ3pK`I&u&d`* zN5|DytnW)hODhL{l`f`k=RXOUrdVNI?9`%hD zrkSjDV2-j-u=m%!o)@U4$l-xgCz%;g-a?ws z1wJcvf7~A{IND!%x8lw7E0aBzYWU8sY?03EqiCv+E;EV=pY!IHy-5u{?SqX!!MnI9 zlwKg2GN0t_lQsLT#Z2lb+DY!xbf$;{)FflyqE-T%Ou6B2y3yUe8fjf5Qv4CMoTN`v36hz(2`}ED-jcmn%x;Bqpyge_#8DBiwgcUG zx_krpi}k3s<484s^MD1nvE_LU#utJxc`%dHlLZYK(GRFBWcNZnKmGt#BfKKTwuW&q z)kp*}$9je|qR~)4Jh-|pnop>?Y1LH|;*#6J2~CC;-PL?olkpG$z!AIc1<*c7w9Aleu}|JTIuPsAwAlAOLYLVm z0>m^-G<%-Meeg(sJ8Fq@c-LJ5U~z{$>U?%CJ2)yagr1`IMf<14P5T zNNx2J4jTzRF@_(7*y#8|LrLmq zc2LOy@U$0K2}x@-u|0wIzWQ=o`X(?3P$NmB-Nh#}T$o)uVPbb{6~&w%uPJ-&kvHUf8(r91S*Hx?v!V zc!XcElBsIA-Swzo^wg(vgNc7=hO=sA-k*sTK9b+dTyRf+dbUpOdG0N%D`o{?6ZQ9k{S zHK7o;jX;qX6CtgPA`782EBCFUk_dob(#YiniZ%i5^)5w9G9<&fA6S7suSifyej++Z zEZL5>;zuyV3{!i!FF@W<8VVXg|J_1Tyn`9hWqxO~ z^qR+@GEMYuqOF(sHPnV;dIa~juwcipQP~$9)BB3Pf`7_YU`ZHOj_6B@RAD9eh9*8@ zO73II9J0s^I8M#ZCky-kr&0M z;z|F>+Hd!MXJ@A#Gbfio&QolN2-@^15&TuY>O6l&t#Y@<&@aahwd`0O46yk2({6Px z$}|_?lxKk>9blkwJUm1@!n2?l9mj9iLtnVp-k6P5Nx7dwkzd$)Gy$Gt&Sv*Wsd9=4 zH$;V)0#Aj6K6+SfZm1A9;VYNm@Qw!YKiX`}4OGj_$pvj9(QOLgSTgQp9`pc?`O%tp zbcQ<9{4?7mOWG4a`EBK_w-_>^FEqImD&7E?Wk@RH@~t&<@^9rHAtL4RphuqP{8`2X z>g}WMo#2FXJPtHc&8*Aw!l?mL-r`5Rj0KROxg0H4#zsW7+M5`gs(v8(3R18 zNo;KFR|8fLQR^9{M>{+^8oS)X4Y3J|Mp-h|5gpadgu#tY_E#fQO1&H4`n}A+;Mc*! zu#6`;Oh-v6Z$xVzr|bF5=%$ramFZ@>RSi{+Ex4GPnksK@vfTX)%+)I5&?ON}G^iK} z^t1u{p4;5#*BBjz_o!JxQGy!7jbv3oa?}=yFhT|mX z3!(o573}}%zOw{F*-LabT{AFV!X~ir=~2~$Nyp?QbrG66Pz#e4B_%5m_n)0xIS$z{ zpf(!>TjOaO;%s%%zBQ=y8vh}8_~5GO#5qI0Z=3Lwjf{TLX2ZJN1Q=HBQU8%_x5|D#Vt^;!^Mt)i^VdzOQzsnkZPrW3OF$5` zo@i_31VJJW;JIV|Ll)fmEC?%G^xCl!FHW=rG$y zi9-(xX5l#mlrSzHJR`>#l#rauOY!{IQxdKf)D9pItEiVSA^aCCxMTaggUF|1$~l}QU> z(-^@@NKBstj4(CS6~GAjlI5#AU(A2G$fo)ILmtHP7k2>n-)G?Xg#4W|nf$-q z>GZGKV6m;k0dSv&@Kp<+6R=z&Ltu;(%wmKwsjzi8KyRxMI0P5`4n`1z=?tg@6HwSc zjvZ(mILOV42C!yi#FIp02Ub`USS-xMYSe2&?~JCgP4A4orq0EeP0H zPBz<>h}Ju{VR75G>FA-COF)ps6X`zwFbNL!X9o~apA-CHai#ephR<~g4M>wgVF;@z z!88Dio-nh}%7%l%o@RoDyb$NH z4=ny;G$4t;NCAS>Plugu*Q)nXXxjH(Rz`ub((#L-0|u$Ljf1cf$LTF0{dIFYUNzmC zirB@YRBGDoUBpkzhEUqW>aeZzC#%sZss` z=J7(|&XpILTV_<|IN@mJ>ozstWh;psHqJbtaA(#x)-m(=8(rHw#g|S`Ej6E0QL9XN zplNNe$2J+22HyW`*VuDz+FPM2>SJMWX4 znEU!0bXm{h6OofOKh?SS>|GdkJ6_H!`u1_$%=+Ir4i`LTZHlCCscxK(64m)8pgO*w zf!VIPpfI$9L#~^U2%pd0-DZ+rCsM%N&j;VuH6ga{EC^aFjr@o}SzI{?T6dag zW$D75?o8*ceQ zn)mXT4jE~Jmlx%xzVk-$G19u@P8)T^i?2?p>PZrKA;Q)K!X4YAUC17dRc zS?}Yc%2U}6y3el1XFra#P|vh^nnv+J}DQT9cx&G_|z&#lu{uwh6AQ(;ho_=Y)ZGwJ+oh8`SSCp7oNg*fQ2NnQ1@o znH*7o-AP}t-`(Vx+^y4BMvPu9Kj!|p^aJT0ZgU~g=m5X!gW={o{u!4(E)8 zCa1&*%uHCowSGj2QE=AhLTVXTzdvb8gO*shAXj6)WOfE?Vp7{UW889fyeGV4wtT3P zB;Xhq&3ij1L=n~{U}<~383~Rc4eMkSKCx=^DuRNfd{ypn%>(<71yYu6Tqpd}xs$l; zy7ocZ<1jp_Jbr^g21} zq4^TX{VC(u{X|lVh97D}i^i47F3{LgGyE zaQ0DF7S(A>&Cz)~jmbA0mmIYv-oB5N(44~$86W1RX4ICHpuKTJAL`9z$1Gf{GSb!1 zP{2b^t@gNvH3mCX9iUf&Q@ktl&&1@9nosVBhLdH~e!Vf-7CkVi0qs53w?}ftCbf<& z7Yd<{ydssFh(M`pP)Kc2j>Q_3NI-u?rGmI7W<+`y2YMy%5_(cY4tc6_Y}lAXB|#qH zr3osFG0k4$vEM#*kNmFOI4*d*F_I)J#7deZbmPAOW{7gaG8{aX4(0{YITCFJsN zHj15w479uRnc)gl(T;0WvSy*@nvoTE4Zm|OkyY!!UKf|h^`ba(+NITFnQF(&LARBw!E+3^P54aN#rX!<0brT7gQtHI%k`p? zRh{;WuI#uL7nKW5(~4U9tp#8KoXn+zXnW}CYn|}43it3MI z5N6s?eB3Cf4ou=k`U7vSg?^?jm?ItSny)n#7d2-gQZd=Lr^NPFXKx0$7EVbkAC;4i zO{Z+8W@REXIj@@5wI@an)bAm4iL+EN2CU&ffLc?H!F0SX7b&VYWk3cmDXr4Kjo9v1 zhF;-|_hRgGqxVaJP8D76+csQj6N0<%QeN&`<2L`z>!7{KWU^sFCMaEg?s~!1H+L1m zJm_GWPHmDF_3>%C4wZ`PfUfHgxjO$$%j0g2ji+2>I-ORu;1y-HL>6HY3aQEtKJ1kP zBxvc!HGzSKQz-dc{Pj*l6@m0s+U9X(;t~)>(`F>o92wb<-S3&skrt<$6^=e*Em+Gckc+(tKI7HCNs5H<1tmnRQnfDsBY? z9-vShGQmhZ<_0vGBeZdmT$r-!_fdoFFkL8w2n2i?@Dv{6zg76vG793{%grJw=S@TM z;m*zuI0urLMg42a_3x2Mqyz140#h|tOcdgp@=UC1vQJ`Q#oc!UC3`Vbari`lRiB4k zt#Mpi#Vpiujd8Fo&MaxvU3>*}<~g0bVLaS~D@^;E^;ljr@U*m)PlW8>EYHCL052$8!y(UPfW2^do}(K5c7fcUlASvvqd z-(9<%tT{&7u*RZ3(eN@i4lFGBn>Sa1e&mJlZTi8yZDzRzYU{>9=bwRNQ4yAYNU{^` zt1+M&7D@sPBk*hn5O}PtDG>4Tj%9ce8Jq3|a1L0@C_-irkpQ8{GU?5;kdYRNm3`9l zGOlhQXjzFu0TY0*me zC^JQ#y&8Y>Z*W}gRjp1F_H2C}yEt7#cO@(NbZswlUEVv`)3Er2K@`O z%W~iWjY)l8R@gzZAQL9QUA^GE%f9oH^Nlp+uH0gATr}O$y>lTbOJ%9E?88=*R$i+- zEa-f;+Xzj>qm$m3>P$xTPwpWS3rz=1c14}Zeyy!x8`V-!&ulmI>pGJT^ZZZr&#HG> z7Gx*CfcGA$s0nsR_Z%#D?Y(yL<654eJxFj7CTNe=T`!j6MOU_aA35MS9b4BA<1M(rl2!#74eQ|%uu`DN_ZvFlV|5%b-gR%*#dt)#aHkkd9Hs}snAn} zt`q3-`h5gXF6N1&;1s#GqNZ?MYnR~PXLDcyvp-@&dC7B5J~hmrIOJCdf~S(}-{Q@G zovkeUu*<%-?8Bqvy!<8RxpRE>t(sEL57W^v78dU;nK?^|eg4-0^7rnR+aFi?Y+mRM Sdbov+91yMTtxC4unG&_W)yfcJEepCIv7HUO;bXfjqWwv9JYD1pa=0GRV(>t;moGD#$8=z!ot< z?Ot+5R#Y?xhDBr?E;2F_8@U||i9>M&2L}fno`@q7Z4nDwNt6&~$ZUm@%_<5FhZ`ti zin$_~3kgvwPDThMg{f#Xf}@tmSbOeh5Gu#+3k}DBUB-rAKw#1#jL_C>bPbS%8@B}hmL#4Kd zSX_40Us(jjJS8EqAu}2O+|zLRVofkg@vS|aac~}Pi}N66^+ENM55r{ zl2K#uhjE4+L9>U9No3yQmIp4fSRUD+5Si0rWFU8ztV>6RemoaxiMLt-0JbJelgsyM zyBK_a+s%E_<^96z*WdfvFOl<)uaey3ao(q_;`e7feP;A*=a`XIn{G*bJf}DBm)pAz z)dU)txEnau1U}f^m$`4n>JavYEa+JI_K~J|QmP*@y4QepBgz)vC&8Xf%lru!FjRBg zBF61OOIbH7;nr-_nYz=Z!XiJV#Hg5aow8fxZ>(=kW-OY!{%9P;&RZyRHB}nK=6ye75hu`Y zD)>GS-hj2sez8A^lYI79l#p)KJ!(R(?Y?>ZVW0Tt4_{YP8M~S~{EljQ zk4#)!ya0HU~@1_G4s3{ z^eowA?jUA$*OE6rOLfdVe^A zi>8i!a>HxX;$irpukez7dd1pxenz5h55POb2uN*XJ*=OZnc3f>Js8YpvpHbsmbiq3 z;^N}$QS-Zgc`dW_xpfYMgC@XU&lPb-DZp2EtbnbA)$d$7$_on#V`PBJQEsa4@9(b$ zM~`Z6?eRYtccN|^kQ&h15?353Fqr}BQQNf|8yiiY-M>=Zm2zO2Q2YCY7etDk&X>}u zBpZ6np$>f(k1X%9+pv%^8nb3<{1>QlmD0w%etPOUltAO16wB0L`mzLfw zvHZ2S4XV@+iz#1ll=Doa=|8j%uL{XI786rG97B%1$co)d_ln3`ZE@9Ww0$^oe&R{h z+&+hq%6}JJJyfXrg9lg>lV^KsYd1Ej5#))Y0_P9>Z{IXaDoVQQmzTS;L}&ha;>z6^slj!r?!-{q z<@(wTy~!W9JKyQllY}cfh9B%qE6^TD6j+-DQ;7bxJDTiz6#XsfF|pXAFBVHVnO$8A zbJzqf^=D(f)Bfxg2x<60XV$#(;do&bx9GdInKpL3>xQOP`6uF9!boFBZe1>)Dm^mY z%=-u*SjN`U8LB>5SPukO__^hl)S37`iQtprUO1T zy|3Ck)#KbZcb8KOv6m;ms34K?3xpIR$NIgGoSB(s=hc@B{%)}XNeEbgWhR?EOGam`8RvZiLgvFu%JZ<>C&cxCGO(C+cAOlykn@hk zN~I(_JG+Scw6i%EtZ4adzy0=GKwzNQ8g-hM-&Z{oO_e%KC=`mS*1-G6Q>?~##G zmI46C*jQU00zd@%Dgu^EK>x<+FFybv-cEFIp}N@ZL;Fwyw7q>PM{(NpfI!F&0LGji z=fq7h!HDg`uM% zfB+oT8%_@(k%Q56Q^XuD8u~7Lj6}faT&TxP5iWN2@LiN39Na+LKpTZHlY(P{eDUZ* zmb(`=Ln~8+AC(%2Mj}H)L$yQov?)OZq>iz%F%qSV)Ya93JhXzt$W(8-7CCs65Mmy~ z5*O?fL=2=7DP*`1)B7kTgldXFKz8^7xUbI=c3?;lX%5-f2Z2w7V5$`j5^f<0pM1xkY5Gskb3GgQ1_Tk6`s^7=sKU$oLzMmO{L6Sm* zRpm$~LbA+Lp4;Q{(PoM;(uL|-SZi}8*Dso&#G&n=j_~!SdRux^A+EY8T^%iyo)*f; zLB{}%GDM?{x1n^=ANFtF!Y+Vge0|VVB9(-jTg`Wc1&KPpnqQKL!d5_& zyvYPp1YOG)hxZO4Q4wZPO$UZhaX}cQuyshp1%$cPA_NBc2|fm5XJ?1DCI(X}L1BM6 z@-XiBr$^3pps)vp{@y-9Elm-DK@{H*ADr);W^)}Xv<6e~)KKproCN_YDN}?69#4c+ z4};qaTMMqEyl>i;b+@5(g)$<)NM)|Xze;7^ z`fpT>7YYlaGQVMo%2zVFKxJOyMUgPb&t#l;_{%thLYRLBjY(+UB9{g(v{)M1I5IS+ zgP?&t;G*gT0PH&=)DoYy0svdig`8vCiduXVW&X4E6C*$GbBJg+wH{GRm6+(=7Fs=$ zC08oKY`)*TAyjfDN!;DSB6rlW&+A$`R%`iBi0CA2x?f6nBJca?ORo6dwyq&*cFwDV zFWi0`3$aj7(DSLY4#d;6`Ll+V|kvNNh^E#|hf@w_~@FdLQ$e z<6?Vxt#_Dlz-6i@|3N(OKW?TbrfT;cF)XVyTjWok(W(3w4jc9sZPvy6tA0bDK8%d)^yZx$4G%?hA#)Sphfod>{9CYSZp(V|DpnZI3vTPi5L> zw`XyCHqupJVceg4bw11)bZja_{a5ThHSM5HMu9z0nFg zXM5A($w5MLiiy3`AF0~j1SRyFh_c5@(yfHz*@%k<(9J3tXzdydz=~DE4-8yMTmyhS z!N$_Ufu6|ixKG*Sd}7&1m;IYV`8Q81X2HDPR#!Q;CCOvixsPD)MMc)VSoh+V^qGOf zHdZ$|0E>0sM;e)N{uB%&Oez|bukgt^10|l#}-bg>&_}(me?@D7m z&UNeR(9X(mWccJ@3tXz7#(r?&SV5bfstE=Y5!m9Eo}Z0YAGln=jq3m57t`^U%afO5 zf1i5L@k0$Zr7oJnnK9hPmi;|dS^hYK;YM2zOm5cs{o)~_aA^H(AeEY%AFE)jH%vv# z%OA{aBAA(R@4FII!upjPv+lU&#ku1mb2Qzj^yRn}2!2-d4gT8uS0a-LjmOUQhPXU6 z+e5;0q7=it;u9h~{^au1r*Q3WPG}tpb= zvj+!CYVcf&MrK(y|G~D*3g0ANzo+5yNBQ@D@cm9Z^TyxShj+}-{`hnErE)a@tj`J)wGsfh#S(@j0B7Ma z09I}WV8=G9F`aiyccRIF(jSO0i0|j<_BY$O9{~f$o@79c@fF$MU=aqiq$M3Pn<^G{ zaBSt$TA=PyG4zMkrio`2`scaPB<-VZKVha36%~bR0$F;};7Q3`ICCk6viFwyd?|Z# z+40?iWvNlw9Z;#9|LFPU1UB2MN`pwqxTGnxnoCYzJe`tZ^$>j5Y4Jkhi}D zuyDqC8r$Qa()&Mbq$L`EFBH}~MzQB7ME~yb&rSPTY5$2p#CU?Dr0fv?2wf>;M3IcU>UYi|6?B$!zJW0LO^3lCZCx^==%0pl5@&X^+@#=Kq^zJ zQI8!S)|iTP_9`z58SbC0&dKEGMZ5A#Vl$ul+O@fCBBlC6G=4Oh2`}z!@2%WBC6~0? zAvHLBr{XZXF@9d@BZMDuIEmh z^9OStjr7vkk-hiJ%F0Zb%=crs#H1vgynK0i`Ke3x=}vphrx?X`!xN0i+;t#Jx#9hR zu;!^QCa0E%PO47oGXKz*a{5B}*c%&Yo0f+XK)K__@|=n9y8SquU{lv!C?7Htn-oh;xF zZ;*zSsm!QXnOutR8Y!p@0;T@@0$}vxlNt!b6?0F_8WD9Q?2NmkZE4zB*!(FEBi2`` zB5%BZZG{nVkgul%JpQ`@uNn953RtlxrN4%EK@>O*d%91zs0tLC(g*0HY(bph-9%>4 z1cwR5k#Y2v)|CA=QE;{fViOrA&zWU&jtqRq9NWMu`p&yOhfp(=cL-|!yERFxHLg_Q zEiEG^8k|=Q3v#(;4rRFky)8rKs!U8PnbQ@o8D7wrJ7Z>UZggoS*fb?l`cQ7RLc5^S z6x_aj`+@(O=WVU_jWkvB6GgSWxcK({U9;U@f@2DBiJ23==l4Frels&`=O9b& zQe-|X{E0b>E141nZRxevETmUSkq5-~qK^b3GZWwv9W*KYf9cpOMn=fE{;2pq~9ZB3m1OOcFB*k*Hm4d)>cUwd@!xJQH;AT&T81I0DdEgp1E{FE4=wvL6uP#X1mI(JJe50d@ z8#mz~Pk=>5YqC|Aw?nrg2QR@gpAJL4>#4|j_q66j_REmjZn#;+q}1>1_Sz9}B())b zh`~2R&%P?YgL%j=c-F|Gg;O%VfuXvqjixD_6Qyr5BgnlHezWxZ4`Zt@N&8)~Vv8&51m>SQbt;@`Vm1rcpoo@^WC-eN zT-6X2Js&0pVjCq(|7;)Vorq`hlw6;1Etqum+4nWfD>7xJg`=m2a&snJ2_vt4#5Hr; z5#tgr`*K3oU%Z%JNbQ0jke6_cz!9eOAlK?@^+nA5ljXeQ{j^(d`fNq6H-BM39~Y5fert;{kx zcMICv56mac)~xyr0Y^rJoqqsm4($i@KD2;-th81=gU!x2_qecHB8Xw|CeDl5aB0bB?hsz%&gf{VqGdZda_Z~n)qrs_C zV$EpA-LAEQe!BsQ=7;`!QtLS~Kt6OxbPa8V{z`c1Y->dexJ)ThDy_ZN72npv+NQH+ zJf*QjbscDy`;B4u64EWBQ+l`2tjul?z%RHCl~;9KYyc?j5o4`)q`tcTTCOwZ)E@bB zxH`^Tt3O^%rlZU>uxzgS4pyWZ7`%gf2s2|)IVN6EMw~-+Eqn97-C^mFy;oX7G#Ca3 zbzty=@v5p%A0=3fQyAwQH40K-_=3x-M)J0E62gpNmzgetDEzG}t=Nm3}JA z0G1*Neq=;UTdaFIynh)caTT^%rSu2@d|P1sl6Nt4=<1A|1Qg014xSP&01m9KxjB+84QMYrr6HzyA5~S|!Iu z8Vu_iz6$)HXk3^v1~Aea5<0bk!hIvywK_lOmfeyY=Nb2m^1N01UoWfF^XENEGx+26 z2bNXga|U(c#<9CMWn^YXMp^7{$X?ML(%^3(amu0v2TBi#u};d$$|5QfzXw_F&>}7_ z?y(wZE`mA>dN)W?2Wc+sjtw&r!NEDTx*g0MRd z-}Z6bffCWA;AaA7-2NO~(c?E)_M9V6?Ec_P>( zF`$Sz3kH>7SSx(24d)E80>W~s>A-z|&_!nH?YB}q3sHYXtvo?nDQVodGdK;Rx6DNx zBA~dwnAFLeUq_`4iqJahZy#6&Wut$BK}9DO78XVyFnj;&V77HTueWAuEOPs-D}RVR ze4~TRmpzr33(}gOJ+skQj?J!sAKzLecPy{fZwnb4CQ>R@rJPb!|CUtvpNTbHoKbRo z8DDi0XI}6uZOWmpZsgC9n-x4xVp@o2>_eW#12NWWo9s#OY_Q@Ac z4p!^eezX<7{s)=?~~OO(T5zo=k8g1?rT z=~@z(2m^#rIlh|Q5ITcRVX{v$L*Je9UP|xGf7%G) z{_8DV-_XBuwzvP^-9tj&D}&8B5CMUE(}eeOdV2u-FfWvfbEdMH;VeJufd~l4b}4cQ zjzmg`Zy?o<$_V6~Bx{)%8vTdGmFE8^0}_fJj`Z#bg9Z=(!ydQaZDg%IMvyf~N2LcH z`%4o7HqnX3rPAFjX|Pjl81?r&ezzX`JL`TXoyl^6qd+BV8A?xk*9)T5X3zA8CgcAw zQTFe5Vle|~bZBEcTYaiYIk11XAz}A!tdW5%3~U?`?xh9rEPXl9%Ls3T#~R|Xc*0>r zL*hS8h{h(L;EjlQS&33_I6wZr9N+)TADIG8lD{93L*vk?(v@r~Ea)8BO17lakWnDg zeHnpdEiTrd8sHmF=V+P283+yMP+24#GCFkHn+Vd?+Ylt&d+|vyKYM$kHI2<-vUqBozkxdmwRttmJKGB;22Jmlgg84T1Y)-$8AHB8PjYa&YlZ zC#ei5jx4BxLER_H06?9lK@R+>_W(`hKaG8I@4<}U#yRMIP=7Mq;HCxDZVqB z{*bI%eJdfyJ=-%YkR7mNt8-3HpkUhS)ZqsDw@2Fa{Yb>E-;Qysei-b`Q_^(}tBtd2 zJN4sZk;})VtStc!TuUxpFK}Og8WU_j z@T{t4P}fc1W*>2eYWJb_MIEcE?|AhY8`4zB9~<8-Ze6L3xt(-}%!r6v)3A*$&fe0n zXMo*X+CLv6o&h#fzv#Q4^X@rQ60P8j* ze<+Zet_HwHD~hGXVQ%_lZwqS&w5t$ke;_no#jo8mB@oF_4uuX9PJI#7xkCRNmjlfPZLTWp(R6O^A~%jyfV z(W@}aG|u%uHqvv|fs&M#7c({Gm@=v-<~8v02v<8MM)ZR1bFTZlmrcyuwud)L7Si>! zsk?+(wh@i#%5{Dt0*@EMo9;%A6s&e#Yt$D^+oYyefzjpudmc7M+7<2{O?m{6$>NL- z0nJ8F+a;(^!?DYr?eH`?Ezh&`_Q7#khOfO!TsT`3=3~|b5t1GG+eark)Mg-F@ zBVjGq?Yc_OuIP4Dl5dXk8eTDkRjq`x)cP>8+0w*#>eE&|+?<$xJE#5Zk)kFx!!fsK zV!mQuMsfB?HG_AnKUXlcTs^Yn9_G+`cRcRc!wT|MqsuTRff-y7StSsh+N-`&*AhX> zWOrh_n%Sm38ph2oj5+a+dYD{(@KnpF{)~W{%JM3k5E2?mflq__di!%T92d%JC21q< zO_j64xRvv-*mdA##ZsG@Brj02H}!a2xu@xG=!CJfXIrdmQx!y&$CpIqvEN0kJa;ul zxg{@Le+IY_smj)`)jK@;TX%?8J$Oa^8EuZZ7FLy^4qlTpZ-LLGE`WJJUCqy+q2;*u z%8qELNP>i5w>I$cIQx2oWo>sZ_;M4#7pNXWXL%>0(4=SKBn)yy`JJYz)oMTIeWPfD z#B3`j9oY&*n^}q*1~ztN?gOts?-ru+OKbUIJoMv|0CcD>3dql~*r{8r8kObA-&D?|J8hH^sDx9-gx&h=9#@Cg>pmRIS6#%|ykH$iRTy0~w zJ-_6>a>BUoA^B`s8DDJ!#CAI{x32?*86=LOviv3wiJ}1ibj&eXfo_UuwESHDQ}EnP zOdKdlE8>U6e9&UP*k%VDQo-rd*xeS-VJV#i`8A3YeLH=K?WfLWZas~Xk67wKiFBXX zfyA^$RlGqi7&{idDN7yZ%)AV%kKXX;#D)!c1DIsV+|GetRUo<=X|T#3`86-k&5SAm z)34_YMfEEBJ{}qZDO`IC9Z+C!F=ywQ$Au8Ao>f4xNe@KLU9>Ot6qj!&3;&LDLa-wG^>JjWtXf#P0FL4tfi+@^9Mu3dI1aUD&UD17o^YO4k z7BlLx7XiTR>s*!X*BtpeAK|0NYP**1GyJ1|_|st$`n2LT?*fcG_g);MA!|184yLF+ z_HEFD=>UV>&=>??Ez=_2usRShigUUiu-e6O<6bMP#E!n@a?-KLGz#q zHY!XK7KW@K1)3qXMu_Af#~MxD=|TOpU&nsSN{{Xga_(9v)TB@Tytr`B~Nsr1@10GIda?!Zv*w3!6eqT0svwqampy zUyECxOEql*Jc4pkl%|f6d+;jc737pW3PpOhLHFx1p$h=#xf`_sGNd00Q7BBbI$R7R zwD9_%3UV$5RNtwJgVMuC29z;ZC2QTXbYiDaSDrw<(vuz#+6QO(!K=4|6-qLd<)13$ zJ(m~5l?qr#+o6+-Z63YZ7PM83gJWf#E5Ge zz!;RzE3@6E$m!2a7C^rzFmnZGaLP7VcZ13i_m|$3Mr>#sE-0~0w z`d6b&Bn;Q8sdXa4m7@T!9x1nz3u+v^3)aOith=0i+pTfp_X|o;)JEp~OPR4_1pxW-`+VU^cI!G9HeH z&j=*Tc>&Om_3^088cRV4cx65M8^1}k@V2sIQ^-za5VuCic(!ohs#)Zkm-XN4qPo%W zHmti(*@;j!`PkgLgvM~u?8J69cqlz(P)!pNfx5OiC^dUzjSBVp>Ib<8*#KVLR6z44}uM294HU$*5Ql+i~#gpP@F1bl~ep_^1K&&cHY!SP{Wkmz6xKS(-Nc z+tqwTf~mzAkTAZ4Tm#>wfSwHfI52j|80EBrKA59$A;YA9Fdm_8G;*s!byKzHi^>r_ zgNt+zc{xQobF);+gH)gb%QP(l?XyV}Uo^k%G-SQ{%gf_@I75+Zp^8NV>6S}Sj?br~ zLsdV-7ntdP^fmHov-c_Ts*=-<%JPO(oT9^U1>PxVZR%3<#8IQjU0QfTRS;_uzf@LM zwlE&IEUdI;We!ylN9($#4Yd0OShFWd*!p;9c0qlNP4W(Qke6V{?AP?d;t^rW%#E81 zr4JWci$}t-3pbwhcrK^qJ<->$Xt;YTts{kf3G011wIjSCDYZ(F?lOJjX2o*&DT)%s zt0M_#+dLoMU>{_9ZAiz&Y?sOC4rXxud7EbOah7LLO`-N4N+Pd(GT65MV-u#)a3Iy* zemVwA&|Ns=JhSqvU}pF}F=uGJczNVsPm_AQOBHJMO;)@{tDBOs%ItgIm$ChAdW8+i z+VwD8B(J%zJ*m*vzG6u~7|RnTRSA0h8y7Zpyzs1=+KeI-^T%ZW&K6Y)sA9G4pQ_4CNIM3xyq%2KAmfr##!YCM}7F=OrI& z+Xf}?=*SMptB;>9(uw6QNa%VChq_qqwtfB$jr0lwlibGOjpjIm^M1#i|&s`_2p>QndZmACu&L zpL?Hs=ehU3Z(dJdoFtV@l|T?AO-VLpfbZ+znLa)ceD3s(jfJ3KlFBl3X44|fLOT^W zLFbYRuaf~d1Zfkz3~tFIIaw}gqg*=p+L2~hMiDwVJKBVp7z1gik_%Zfvv6^ir7+K; zA>f2~iPnn&0w>AgGOyF&a${Z{EbwCBH@~ffWr7Kpr-RL=beVx>Nm;ZaT7kgv5}B4I ztXPI|!GJSZ>0mp@F_=$M z3rjH^MZ07?C!R}tI2{ZFTsA;XScbS659<(^35$|+kWSLYxs@t~O8Kxo>7|CVak&TN z0>UYI1ehZu%o#h)(QZ4<3`H5?GX#%v&v=`b59 zptTzmNe829R8j&eB%O0Wfz)(tKG;q9I15iHVV; z3NZs-NG!#P+sH+v%f{IOhsZw+WK#scKbVyO@UQ6b@IAG}MFCMzA+P|MhcO)-i-Ke3KC?P1k z)Kl6Sc@z(ATRE-#z3Mnw@%yXKso$!PbEqW6&g0C#n{F9;+v=_rq;@Q6h*-G%9(H{S zv*hH$kU0%=Y~Quqy}QO4-5#G-d8M!LLT6w9O>O14eV1zA{IciMt?fS^T=m(N9VK() zoSk2H@7{@Hdp3P^a>MMF)3qh@=2{zXym#=WO8?pNcP}3fd}qNWRbtowTDG-(^`Wop zd*`M6u*oZ)j-Q;L$LcRF%Pe`jzx8{fta;Iy7JY(w+23}yuMG9KE?n3#zN2F``LCe& z*%^Idx4ij^S^JY3r|pyltcfej4Q;+j6#b>F_y&^Pyl-#mwfpUrVSjGebRr^Ay)^kv zxMbPsby+2;i(Z@lZfUjs)&qLwPoJM!)o}PfE^~h7f7h}V6gQi?)o#1_7@j^4h_ttLCF{5FxQ@Q9%Gal5HTW4L%zA!d&@n6fU ztDY}uJKA^5SMkq(`0u-PaUBQNF1e8BG`UQHCz9s`g&cIgoIkN>?2A&9k<9rbZAxvm zqGP_%SF!!_xm|}?fA;d!`m%uUdakDK-XH8Xvg1vuM*?Y8+UI?9L-(J3wsy>!6Z6+j zZ~HQVj5ssl@6y?g^%Vhs*y}Ite7j#_{qfExh%NnEM_DBQCmbxv2(PthTDp`S^nPBrTdVwkcj#(aC|!=AgxLZOteryZ`Txn0l)H3hje zMUzE>_ycqOM~V+!?PnboNW{nI>WQ^?x@UZ|zhg`DtnBuLl&9+jd+u?nqylOSl-_Qxc7@80jux4rLWZN&7c zJnnEVhr{88g$750Z&&d2b?ym1Z`J9);cz}HCZg4hTBSraq)~ur$yi)qF`5C+;m9Ug z%$Oz)XP{VIPnhIz%kfGWBD8XNj-N`XGAnQc5t>5bQ7O}-H7Ri#sTQ6Tz?E50AYjB9 z46+#GO*Cqe!!}(M{ARZi7_w2AI616VML-IY!XZC_pFju)a3L9`)uEBWQ#y^oN)8(s z#*89JQc{v2$wxp^dPF3ZN)e$L5sUeN!Kaf=3})e*=+Uf%T_YH$H56fH2+{}4YAQ1?QAR>Vfd6&)*x=+wqR`f%n`n?-IV_&=FEHjEP~_VUD#&<}iULiA%VCjio6Q^=X2kUP974+&y0p6Y zmAFaI0-ZWGfb}dsfi3MU69HlocWbG;F*z*t2TjEm+-4Q?QK+j9sLeYSsRhpY*sQvt zFohz5B6UPO!05=SK~PwT!e1oy_vecR_CP?Kh%cPL7f*;5iclY4 zROs(56r)1BKQ=Zv3tEi9{*TXgG$aESDis<^&+qUd&9)&Nluk6cs!q(pqWUDfY zY1kymVKYT)6EwKi78a1Rqco{wk}wJn)Pn-c;Xs{^0O?GIBG}G_L;|V6p4cvfBm>Tt z`;(y|osJ>wfqUzj4Eex!nT_zy2?cicJ#g~D2tm4L2v~GYA>0H;4+Un7>dpN-9FD_E z0#xOLYH&CnnF*P7-lwn;)eBv>Z!3^MYx0-e@XbCdi5GF#7|)uoSF|abtB!n7&nt&O3O|2=n>RMktm*w@^-&mS;;qi%$H4hFg zI@z=%W4y#zckSVxTnyd2uISvVvDV9_8576r%AajJv^cN*>h`U7k2!9c(kKe4|HHb; zdg+Jc`g_L4ME5}p1_umEjH3b@=S5{~epPi(n^UR0Vhx<6p7&jD&B77wRpH^a&b75m z@QXe2DYsVlHcO&l%)zPUuDOuIQb|tih|1^MWixZuJQIdi?%$W$@>fls`?#`oKYNAv z&JN9jGv-}h5uGtjnKp83W`UvY4Y}~e>GO-qj{Vw;H)Hj)D}4_0J&eQ8H0{Q+zu)z{ zi=d>wjs+ae{bgx5t$z#})%c3jw`B0kM$?JjVt9CP4(|Zi5T(t}0rmn~e z>Cq!!-ODrR;f2Y?H}b2t(P?YT4l7EY^OIjvmE~WzyrE7ys+>3thw*_!Gpf(_JhQET z(t;s7=mQZRp~{@1#|K;5Q_KB7ciKVoQyU(?h|D#Kb55roR4c3cxk#FRa$nh;%N_2J zcm1ZbWTgM>rc{qUo1Ffh$0Q^#Kky6pQHdM5uQs62z0Xy?-c&L^edqiq-wu};rPmfL zbo%PnN$s-5HP)Ep>mLZe*mGSQGxW|(AW2TbU|o` zQdzRW<>sqlL9$z;5ZTgi+M&5S8?2?u==1>I72K`C)qnB10bBarJ{s%9?=^0&b9+Ux z?2<4X&-8N~+15~2{R-;Xuz!;LTC4ZsvduY#7lkvMvM&^G89%?Ge7AHXv?n418>w#= z6uM87-_O&<4CQgo-Y*##G}+lDZeywTW~(fH%IFPgV_foMm6ulCl{E7194n%HoJS2* u!L2f+jdv=|8%y_8oEf^3*zVI2)I20l=-|a0hcvVQ0K!712Nwk`TJaCo$r=p+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/oc2/textures/gui/widget/computer_container.png b/src/main/resources/assets/oc2/textures/gui/widget/computer_container.png new file mode 100644 index 0000000000000000000000000000000000000000..08cd17c4260d73241364d2b5f8c52a6270f1138e GIT binary patch literal 10112 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 IOB?(DKgQW1FaQ7m literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/oc2/textures/gui/widget/confirm_button.png b/src/main/resources/assets/oc2/textures/gui/widget/confirm_button.png new file mode 100644 index 0000000000000000000000000000000000000000..95b0495f1c48b7467b55e460ad34fa752f18f688 GIT binary patch literal 2013 zcmah~c~BEq91g7_V6h;Ij8MC?3LcP?Ls%0qCgGA`VaBya6BkhRJ85e1VM|oe{8bvec$if-}QcPqbxGS z-fp@bgTb&53l&F!e^>BKvatrg*Vu5Uvow%Y3CAsYZk;@z5+1i_VISk!PjK0~ByjpdDY2009+7 zp^#pcrq&{Q0c_Sqz&pLoh9NVBN)^CyQW+#7NDT62`LZ~0pdG{~70F1HIC$6?tOT%< zqBIDbotc@*%JgOtWD1)b5D>uT@Yp;a6EK)sgPKD1Otp3T!pE%AiDyXH~(K?{2L(GXA~3>X#^P!nhF!ZT=O=aIV4PlreMo(1*II( z8r_e;)G0JDtYZdf&(d^sX=Bwmh=n(*6*r0r-~d0+RCK}3R`KtIM(Ti=y^|6O;GDPF zY7`0+iDV>^jHdxi8x^t$3X_QZxB-5COdiV;2q+o?Z1H4+7^MJ<$Ki3AocT=N{1^@w z@%Bc%eLOilgk$l?%m!ycfl}!I@#&6+_`pIcMM7~cMUV#bmZi<3v2@GIvP{Fx{S86p zDkG?zPLcrDkc2`f#}wwUfSd)@63J91N@BtkP+$QpOiso@It`GF?p%n=3Se0hJ7SQj z#OQLrH#GLJV{H1sz4naH9^*UTOnBpj0z1ndIQd|Nut#PHSd2^|Obtd431-Z;qoFPg zhSho;RAo#x7>qgjy8JfJv#8tom9E=M_WMIQ<>|lr6#U?y#^Dm#I}Yz&aIl8a4;(aT@e_Vc~(cB07MO-EY4_Gs)lVO-#qT-#rAa#h(-_x9pj)gKfE_i`nj ze>84uY_BkM-d6QyxKCZ-95^*2l@#_SL>mjAH{Vv2)<<+T3WMSjzS-Hb(ru_YJltes zGNofbjV~uZ9dLiD&tT1}45@Y930bZ7FHLf*f1+5sv^1xm6Iy@xK>njwEoJVrt2SMl zC-M0#bSrF3=vWtHTpY1sMsfar<CNPc7NBzQ_MN4>F4h5K?}a! z{m_whtn=k>R=KsC>*70?58a5%Ic_@S-1F6d{XM;G@8?fK4mq9nnEW{F1E!<0CVPJ~ z**0&;?Yc-Wt?RSP7~H+2bwN>`)d@;zD{dbA9b6Z-n$UPHxLum)$EwhC61Z!uBw=D< zjQ^JAf*|#J&XjXO4wJnuBqiQ=iOk#c;l(^BDz{)ypTj}9adPEJuR=suQLtn8M8{

)DP;vOuO+h##rc*J*`p}TSzvfyI}$oPZn<9tz$p) zFde(SgX>YR>ai~G$g45zN`19rMK}3ysLuJ8VaA+tj&4#}S!;<$H1q75Tw5x-yQ{Z< zZU0r53Vr#5d(+!p+D#%3gjuIVN5_8BH=L*UIJQIhGddVNiuOVkc4Bm zXtzSOD~jL)aidhxgDtj-RTN=G(FFvt3R=Yn6^o}mT|`p47PWgPK_08^{xM1J{l4FK zfA{yAe5gu_<#_vhLlDG?Q^ur%?^nU&Kl3->^V8<45eV{1BGa>&EG!XKQ$`-Hp>heH z&1eQV1WBW8W?Y>|FmNuRBTX`7=y)>%lNuS48IB1svz*YA%0ik*D@;mP7v`xWG)PpW zx73CL0VBcSu+3;NSx}n{ap|JqH@nS8U>AkSlOb7{3YJqe0f+O#c>*NT8~`3ZjBhiqNYhR zLsBM~)x>kDd`5;K0EfrLHR=g%b3ScwDQnbx!ax`a6Jy~Ec|!hFK4Bv#y)jwF!vzAz zXAwXbOrtZT_7~_Z@)X^yrx?njr_2*hO*>)&e##Jp``IQo-25yuhW$F-Xq! zPc)?bX$MGwgBXS?Nee^K_91sb1b`=$htJ$2$5Hn3_^3{aK6-D5^8?{hc z#){KKv<}ph42jliNsv7|tYRAl7V;u^?mSKySoH*3UB4Jf{?wa1@l48p%6Iq0rwkBa z=iUQ@2~0Tt#E1ini6Kdtz+|Ms2n=W1q9MrReG(MGQ^|**xf}C0o)0;N2cBIXP`R~6 z0vGRDaW$;`sKg-jE;hECziJwle}DGKkTszrqair{?T6^SKbSMR;(g~e%+r0{^3zW% zjp1#P$&SI1!W-vD9yq0r8K3mmmtFYo#D=zS4(I%Hu&OjvVmyE4ZuJfv{djF%*Wcb~ zxl~`eAXM8py!G%qj|betXY=vA-b5Z`mu6eg%1SbpO({ z(uxPI1Db8kiM=h+QCUkr*wMB;aI7^xzGG%b#|q+0uRZkak)Tmq0q^zCV;ci@z#c0l z+j0Y&otmPQZN%a|HdlVePqKMc86x8B)6R((3fmgv659wrs4?kN!+8 z|KW6ZPQ$V5GdRg>hI?Q9f;-pfe`atOUcP?kzkPWJdmi?AeAKwEDZA(Gv0GWihdOFs zxwdMAbJwQ&c!@K%_V-8L_}#riPp+^2_?ntl`h4(M;7z#=Yx>r^;K!ZGT?;lhdDJud z7h+m}yaV25FPN3t76|e=%|0F#AwB^hM~~xTqSKWh?y11awl92Xk;8vY+m$nUH|JjK zn==+_`FkK-v3=mRY@(t(g!pS;&XRUd|A5kvSqnpU7F~8Y zK6^XmFS3WRyP>g1k1_tBy=&MuFmhz*_O3*~6+Y)woTIOM-MZ{p%b$HSp|;lI^Zde; z-ttc8f}SE6UR}~%|9!^EzJFN*`Yu8n$TR8Bbp>709SKyGhwpiL-#lb}$*V((d)T4C z&#pC{BIwSaf2%za>>ImT#+^}KvDb+wmTvo#$g6Ju$x*K@nB)5X;mBn^bK5Hq{;}$v z(c12s_-pwi9&u&RhQXzMP)Xga1FfrO{_vnN^(4kY2E^En1JJ;6&hG2Zy}co#`KLc+ zE?j9Vy&qLnd1VH2NSk@!)~a7PSB_2>y+WYl;eum{r(Zc6B*N?WEj$a+~5_cZFQK-mH!@7E$NuE`bbB3=%*M5F; zNV!BVFP2=k9&*`^0J$beOi)0A5urc<;gZ~tE4jJx<`M$O zb7ahqm2yO#TCpNb2IXsPGK7Ib1Vv=DN>!{_t)f_3s~|&h7CZOe1o@bD`{O2g-{<)~ z@9+J6-F&2pTI=Sz#FfM0xP^zQqQUoV@GP0<0zN(0bait$bJRpkJQJ^uM70ztz;sj^ zF0heifO9yqRW>uG&A=Hb4NoUba(LvV9fk;<9FCKyg=(`BHxOYtG`=w>Dn^@=p_S_3 zRl%+@8wvzSoWUR)X*5|-n;drNqTn~XjlhtD!eq$dc(n#nQZx=p1QLM|4t9lPv`&vk ztJX{!gOwaMFpL>RkgTjML6)C@qSFzPR4PS;Vni(F0|wucZDKGR-(-20m2hgPaEq2E z%nU)9AXXDgqcRye3UxH$#8+d zAuIyu!dY~N(EkjbMP8ws4HQFJ43v4wsaZ!%!LJyCaKGNfhM8YSR;&Lvog`;n!@`7G zLEt8nFw3Wx2UudV%{UT`Tc}K0i-%f4^xky@j*SbdA#AuYUPXYQT0l1BuvqN>UueQi zG+-K3Qbvm22&xd5!y?Bv8#*+c#M1FNLdO`U#ioHs+?4J>oI(zO_05>c7DKFw0JjlO zi^Wf4a#$Jw%8)G)hgHIBp{Y!u4)@fQ4tVG1u$qR#l}Zgw=?NpiEYWLML*b#y0Fg8x zfG-v}ZvxVW0$W0#t-=_<5(~v5zA%t44vY~BQU5?xBJ~xDQK8cx2OD&c4r8$Y$7g#0 zlIgT4Loi0%v2yl=!pJyR&ZUuH8v!+9rgS-M-9`Sx+}}2?eAv}AlC`cUw%I2l={fqy!yJ1d!hL!3^7K0$KmNFt zlynELFBuxk`R3x-v&XWMxwQig`@a04bx-%VCsI!j9VuK9L|(l1-LYZ}Ez7UFu>Jjx zD-DG!SLjcT9y+nPWa6vCpWJP6Ik;v(6x#RCjz4r4(f{RkykqutKt)P6nCfaCORV`dgk@?Y{4(hDW{i>d5znwg7=QEJ+-tL;%*Hp zO5@od>vA^~?HUz^*=sBJj{MYJ;`N*6{Lg(t{XYoX2Nxz@$%`pm7y0{lKG|Dg7=J;f zJUQE&+T3z;uG{*ZqgQ{?$oD3foE!Qhwtsi&u)CnX@A(aG!Kshi68e%RZpZKXTTk_( zuYWt{_MJ^r_Tl5T)eD;5|J9=$7rwjU&iWu9Gho83B=Ru2ih*ED{EBJU*Y4XH3 zFA{F}lSGAjx8&v=HxEUaoBRE(zHYmDqfb5B^Un;JTQ|+;eDAqEwcz;BSaah7&Q5Iq zrDNV#8@Z>2wbeedJBq`ah@!S_CvOg(yF2>md`n$o@2@?NSnhg6R3(3*6_+Y+7BpZD zOB(|VEGfroq(kdc+TX1D;X~4|thTy3yz9EDNqzZ&b!8>Jp*ZTZvv0e4UNIpdxT*K@ zf#UL{a*bl)2VNq-%9^9ef7)GhG{QY*jJNtgRsLJ`Te?p-i7C!z`{J`)uIr+~Gk+a! zF+m|e{pC^JW`|Y(`Kt2z6Xu_tcYL_uQ+$H6lOJ?$PV7z7v-)XYkq9VZ67c?gRbOOZf6{Oix?~@)MkB3w hWZ-?hzO1BkS?}f_Y&(+qlS%8-yEjk;z?$Xn5E;+m38IV>@GmObJUA zO+vw25}-moM5ZMnDy&cxL`9Qfnw6+|>oHVNQ?&Zdh67UTkF)Lle((Ex-|xMht%;r& z>h3ny4T2!|@GxmC_?`})VS`@2|9)3TC{qALy#!Q zqQ@1fBm<|ADoQ6tIu2S9m?Ff;0zVl~rk9XvDlF4L#%0cnS7fFtgai^4=q9pYfIv$! zIBd~sbVke~M(n&8_{|=p2y9njQpJc|77a^i0}1 zjPV(I5{)H|w8@|#L()O^CfgIo<^_wUETl#*r9e`Rpc-PtSMV<|u@A`i?FA*YhBm~3 zCM3lO-+s(y4hz@fDslluFlr}P?|CGtQ?Wn~j~!qm)0o&+NYGK>E)M^8NZyNy5urb5 zLbgHdP~rVt#iNgoz9C6DiJh=^z&+}xZ-{@_|>nAGX@z>?1O+#7mmToLTDEMRNOcxxAt z6|*(xE-%bl`FVcF)23ptw`y`vOb_v$AGQI>OKQ!I&zl>$dgA8%a`l71>E!!IPA{oB z@be(|s8x5{hJMSLsvUdudMRG8zT^)N?$@>_7hTpJT3eTBThx6?p7Tv}#i*a&?{vRm ziQc)eE3{%n^_17|WDekXs1L3xZ!ok>?;iiF#3HM^<(B@iBAsE8xHH;!5(O3yQALZZ$Nv<%2=pFphV zTc8Ep#rw|GxSlIzOJzxJr;=(tpEiEg5j9coc`ec-G^TZ` zwW6Z!O+{r@i*S&K5W3X8eBjAN=fr=;9zT4cQ#3sP%B}3uO`dCPX4B&8Hhj#&o7phr z(Jl?LJW;Q+R_*m}KH6AmdR4tWVgGyQlfJ)o^V1P+kZab-`IqhmK3b6P_x8*r7ijgg zhKBnUqv!jbI6ZfT|N1X?`|RMCL0QP?+C7=KwCHW0#h+#4S>*@Cxr<5~UEe7#-m_eO zMU&=N^V+V0qB?hPXpFF=+FVfVb=fvSw`pxmhi3RI3Ze)r^c%SE;t=naD3xn#YU>=; zuI0MMQY>NT#wjDNU)&O~!ZzuSc+^N(QE4l%)_R62k_8`qg3=eqPGrLmkt7o*6A0+(u~x;U zl|?~Z5iK0F9$HaRl*O{tA_AofTDKMz!MY%VQW3Rp5@adrk4bXhckg%ayW3<_z!EQO zD_biDgJJFCEe-_Vj^G(*ISPD+z1q5p!5Ha>2ZvIjQa?mSXjrJ6h{0G!jSk=phQPz9 zLuIiT1;t=WTq}gz&y>LsE*HWfE>ezEC&E;?cOr=eB`yh;CC1A5a@fP&N?=3)fd->c z$f!|k^@vdjn|KlMn?7d4kV%D#6~dv?07yiT805loVR2x0D@Z`f6-c0XQJ*o8gs_UD zbO@UrA0N+(cVZEwlFjAw`D_l4&EqkF22-D)rBEYNtDjC&m^s9lUPj_N3MaG>&56bk z21*FS0Eha><+6Tmoq<%FnB_7yrp7dwmeRAiEG~PnK4!!RqS5O6(ghO7rV*gd8KO?% zig&2f$S`%Cil7L+iqQ23HN-_fJj@WJ`|T!1RQEPzsr3Eo8qJVv=qX7YNL*hLhQ##7 zfj&4vhp_`OJz*eam?RElZ@MXQbY74E+=!_|#W+Z+9#lgJJM;brh7AI_&I6!`P!nVj zXhKW~b4|x|<`5qZs>DKYIi>378aVgEv`QN2<1qnrWNHK53QM&(xQp4p2?`y+gfQO~ zG$Gv}CMfK!P=6f|Q*=^74uW$sSq(rwB2fTIC~!5v^nqRrAs>mzmCJW^W%5|&i-4jb zz!p~|h*1h?@i;s#lQW;mn;*>KAWklGIXr}84#uPk21kxk=zEpv-iHKo8A9Qd8Z$}e zS@2X-X2~q7ae4p{HL6t#VIxzHDNuu&g57Z~1u9372~jZyiXyZEHa$3MypPEwy`d7Y zhxieIAf-~o8`snJgIot;D~Gx^%^w7rx(Y#MbWwz`jwIv;874QS5nRHI>InrEkCK?D z5`-m$JrxQZlrI4apeF_5viK}>A^Q#DRTv<9M=IHaukj`<0ee{B=35V1AHdFh2G$bT zZ|wdB2Za6=iD|)JB*6mAi@o(TgJJP44q9MX=^2dKsfN`0xfQ70xv0szGIQOaq@0yk zowuKIQ**77H0O1HmOc|bJa@7^esRsxB1hkdUgYs4-O@T=n>j^ul())zdRA*(s@?sw zT00YO)^|Sd5@d}&(tJFv;eJU<_1zQEXIu9q&vVn%UuiqA7ex+k&aYcHtNhaOvI?C=vm9KA&WlhaW?2nN-_}c}`^)OAnGQvpFE~n^mwBhb$>EpQ1}87}+i1TdHCOfQH4*i+^7rVX z(>F$2`)}xI8e7Pmt+D;JH5=W&b^jw9RzYL$b&Kzcx0Hr8M!fhtH0fB);fdG2>9lS$ z1|0mV%j@u`Cue=~IPn9fjq1#X+$yr(@rB)ABBQkQAFH_T{r+_eGDroIs_qu> zE*qos4%35IUnTumq|Y5U8PrJWBlZmT-qe`RT~hJIcu7`+@0j&tCzV<-9X6`6>#bF7 zd2M;5g(I@A(z-3X)+QxSCyT)*jO1I+Xi7_+bK$^=l4rJj>DTj{R@YvB?G$;%#whx2 zTlEi|*qq>lN`d`|@e-Rr-;d9BzdX?J@7QS{ChVKOjuGu_J1wWHa(p(UrllYxDg#SL zKB|Z;hAdM818sVGmwmP+*ybl!#=JYWYm&PQN)chftd!hC`YQpEk~Vm$-P8x+RT0-~ z!*5^B$YkBz7p8K^rn);??)yjd?xMyyk3Lm-@8$i9iwkZ>UwD*dHT%Z*A(QL!r*1C% ze5l88T=9_)K`YW-*V~UrDOt*?3hHs-cVm45yL_fz3z*oX3++ zw$Yeo5y3*qgpM@H;O3)cFht@qcy^#lsG`FOJ*iA*h`97>?Q)uZn@fDTaUo1%Uz~9O4Q|8C;9T%BOZ314#z! zS(Zi-#A>w)to{Ou(IFyLljuT6! zEUXNM0SY*t(f}}X?6fc_LJ=M$k^}|u#RA7gK+#ZO zOKQ{P7z?z-La~T1oX8hXR11Zue~_P0j0zpW*j2&c;24X&Q<>|1NQ!GvmShctU2@Dq zsDX7z4$(kz1ArPZlTHTP_&A}(ECv=1p(!iDBqdu|mNH2ZZfFc-CyQNrO(R8m`H+GD zRVq|TnpuiT>)|$zNa^j?K6?;k?OeJ*=d_#zc%Azio zhfa=9{Ax>8l4nO{WMuWA>gp8YT>tIN$8BCuY^j2=`=*tQ+5$N(3C>IQEPI51@o8RW zt58|Cd&k=57ghOQ`O&7eh59G2sHDdy&MYWCa($rN zj1{dH2Or{l8%LhJ^*y$J&DIC*g8g;RuQ{zQ`MNZrZf?h4@tMC=?;L*h%Qm;$wwQuB zkEZP$c6i(eE$PmDcm2^7g_TULZ-?iNaGR?1u4`)h))_UEHkLXaVD&EY%J#p(d(4Ga zCYZr%?*#WaZSWg13e*UXkcX<3S#=vk(G^pMD)P@pMmLr#)*N@4urS>;W!;)dP0ni8 zTemgyy(VWR^g~frgUzGAF$Si`j)}_<9s1`RW6rp;hgaHUOLZ?F9LqW;$?)tKI&1Fu zh}f(*vgAnoLZ#Fu6{4Wd=#4ty|?q|c_V&0STMxhb?B*-T}Ag(6X&#dyqG1u z(SCN0Sv%O4R=fXf@Sz9S258K+88`4M4G6$niJsF zT<+(xMKG(l=uUEFdYj9!C?sL&?%gg&!=7In(9jxrkJ^iPUd~!K&uwqbX!m*Y)|P)u zlb+6R9|Eb)*OcU($(w((woPAS-CuR-RqJ&TcK`T`--*ULFQd;kmB+mWjV_TM*KbuM zTl!ntZ|?g<;_ET`noQerX`y@WgdZ0#y<9o6vf{#tb$d2soDRLas_@Y0<<>L!s%<;O rDVs|M9o^>*Z%;ngfZoXe@N*td{c}OaXXCDM|0W_7(egcE3zq!{@;NXe literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/oc2/textures/gui/widget/robot_container.png b/src/main/resources/assets/oc2/textures/gui/widget/robot_container.png new file mode 100644 index 0000000000000000000000000000000000000000..e7e7db16123129d964713e6a3074b7c35c507dd4 GIT binary patch literal 11205 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/oc2/textures/gui/widget/sidebar_3.png b/src/main/resources/assets/oc2/textures/gui/widget/sidebar_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8706af67d764b767f8c7e59337c6167fe4846171 GIT binary patch literal 2057 zcmah~c~BEq9A2najY5lz+EH58Rj7!`CXp*^f)kT)Nf1etptiVVH_4VH8+SJcR6DgE z)MKP59yl^st+ZNe#}>7CfJ3E9=|DZuT91OY;#m(+2hp}~6XYn`{;|ov_kF+b{oe1| z73pb-0fNy22!aBVlhhgDKNvjX!T#WPq2TN*5Hv82(i=E~HWf3{HW5zHIi$#Aa{wHI zD$+tF>%%ecOx)^xpw^0Q4Qn*|NV$i0;Dw-kTXi>CCjKm9IIYXGR40S@6F<2=O z3&%My6m`4ZBKKqw&6rV%OeRCcQdBAx0)~*yvvasdXlKXq55T!BMmw<~8vg z+Q}&p1mJL&IAQG8b~qWUSD7%Pq?NRhc8*0QA_>}?PkN{xZ|rPWxIo}g9szW5A38^w zUP9-QesqV0=4jSJJG!0fb3`}X&k%(B#U>uy@glNT``>h%tqhl~VnnAL(lQEJS7l__CZ{Ya2VCj^Hv>MbD2r3J*p+F?Ee}P%Oz^J$$P(@p5MhA+J z1V-L%K5|&H4L6gS6v0`#wR-kbNxPW`x^%n%@0r!fm%=PN1@0p4(K7U43PctIijXf5 zuT|Cyq3%3jUhlLt0i2ucwd#SARjPD`Hc?i9u^EZe;AD*|Mk0%e5lThAi-4qIz?L%Q zsc{alq++Q=D2^3MWA$P&78Q$0rIBJOCieN`WrN-!a1Q@JKHmYboG@Y>#aT)3%GVJ} zE9YDJmR5>y1I&us%?iXLBuEqPv~oy1OA%xa&SX!PqkP|3sV)ic>bZs-?Q?(}IH=WP zNfgV`OkS@ub>xD+XL{QYhP_3F;YL0u3dF(Cgwse8-Y5d^eJD$tI5*CaN;9Y@1)?;W zD3HB8IGt}4SR#^%e0l6Pa9cIf|GdbGNci+W(4G>`G+XI6MOgOZA#DPWk zkR?(oRI2v;=`FG1^2~C z)w{nay8EoIEbQ&dl|N0?M9ofGixkd1^O3%Adg{k-Z7eFcJo=l?et7KX`IQGR4GNgC z{QlXY`-Ky1qkm}q6fa)0_0J&DH%(73`mH{^sw%5#UT3qR;M@9LBQGp&3%Kq{-#({3 zaaZtx@ZtCJ{e?l6L(9u+nZ}8oA-}0S+NzrZ*W;}-8m4Th@~hx1L)5j8{{UaJA&#Uh z7J>qg@sHp7$iOjR^Hj20sZUyQXM=M15_p(K7ru39VC}QQmVt)mX+@e*H$I#F>gOwT z7t%U2-{_DRr=AE~3PlR*{R=mjQ^Cm*evtoB@h~{(t7YxYN6gpcjq;thu+h7hjK6v^ zZq367`xcWoUwc1ed2EDhPVV~DZ4pls1`U98p%trlcBruCOO@;u)cC=w(=s>K_GZJD zwz1*o#_SCadfXaaD!8;|NAc;B>MLh5gBJxxw12%Q^v3PZzg}P0Id-qEQGfCLiA6Qx uH)Np^mv3KoJ=p(HU|cOpI2pe){art$el|Y9sj23_;K`aa^`2?-Kl%p{!Qwao literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/oc2/textures/gui/widget/terminal_screen.png b/src/main/resources/assets/oc2/textures/gui/widget/terminal_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..e670318a5f35e5eaee4484ab84ce76d2a663bc29 GIT binary patch literal 3232 zcma)930PBC77mKTq9~4AT}IPb6_u-RaOCp*1faj~0!@zfg==cK?X~aFmKM)HPE#rt$1r3s*kuXiCPyw7o z;_`JWNW2Ed$dPaqqU2GUFBDP8h=fO3zgTa7aqJo~TSDQxT61+A zK%jszh^$k{l^TwYMbRDDoi-P&G_;qB+qR6jy69S1plpe1(g9 z4uc(!BEv8hhfa@)iJ`?f&`@<0oylgi=?oT~#i9ZWsz$HGARSeynTb=FIE1i9tVUEA zf-1>4ClrZlF&>2iaB>g1MBK}*(yHYIvqVgX<*)))Vj4P=#-#VRhjmC_G)hg6TtGNF zjsSDU0CSZL#ZZk5RrPuqaHba?bPz+NAMt}DgUo^4LwnFcs-cWUqEDME6a&)GVD8aC zxSmTGkivTh8h^bCru)JgRI3)l?$JQKnS^k-E*t?WN7a6ylwcl(+4tH9(ZTXSAp*44 zfJ@?092}fKK!f_BEQSk#_R41B6`>M9>+k{OB@p*ssxroS~*5>1vRbGVz8P^$6H5^ z^e_;+_Y_?E0DdlrP9)-ZA{q=;>-)L%gVzppNpv9IgSb5;#8RBBYB6~hujGonLr zRD(*f7)TAfMS+syQQV|b1gNej`{1obX3|_}rkn3Q5F>*D8IX}dWiqG?wm*{zG~_t4 zdSs*z846M29}UHX{#7V!nyC~(D5e9wp?u^OfmC_`gCxOAKlS63K3>c5C(gQfOLv_|#qLSuW(1gKO_P z?l|uvXIiHyuBd7YUkjSbbDCq8RtDtGTN2XAX_=%7s9G|1ZtmQu2PN;`#VMRBT$g7) zZH;ZHZhhOv&9ulioY{8mdBK*7CubvypYBexcTrT|dA4s4#Mz&Eyz1YxOKzS?TWBxM zf0=&v%S>a?4 zbt^JbUNSt3vJY)-{-Yvu)|}kbU*@?xuJqhSNejN25*~aNRw`R#+ccbC$m##+S z=G9x+EZ^|*_Q-QoJH?crpZ*8h@$HW<#?nsR>bz&RIe$}O(5(>T{lJvdl}9Glt#7q? zrt{gqy3OOrxSZL4Z;2g79V@%AA*)PXJv83kyzreU2bt`!wEj0-|TpGvPW|=x~idhFDLO~O#KV~H@Q&> z$)y>IHDQ}GUh7AH=eK>-80*L5$C*{Twb%+d)X z3%6{-9q{;(#Yhz0kkc)vCs|H^g1Q)z?|*)o_Qp`{F}&3wuB#r90-h_!pQjeAYFa<} zbcw+BqF_sCOV!dbR)F~uas=wyu;6Z>;q#662d(N-f$e;*`P{m5@ol4uh1o4zB2U*6 zo`AEywWCUE!Tuo31K8r&%TRL4`1r<={Y;5tzBjd0oh3z=UX+ELn`8=aI&U~*YrQo; z`%Q63K)~Z()n3+!L4e!+f{6e@X6>IpdKc1fqroS)7SX@Si8tBQVRM1UPGmVi?Bmc=NkLB2+B%4C(ji%X9*!agKFCM zN0DYnCZ~|$#*VbTX6YLz;7a)V2h74P@#PyG+VO1iy03?pfAEETRq^> zGGRtK6BNo}?|5-;h&S7UvHsyj`ovA32VUA07wDG|MF=GSEw8J)yCo%aOX!K38&#SN z=)OUbR2NSBc7}2G4C}&*0>^}HOB=_%Ee$^(b~2{Jc&Odn;*p^xC$H3FbP>P!u&Db{ zc z4G#<0)A{QI_a7GCdr?_g`6l>D&D(eHIPJ$!kGt;Wclh71EpwEwqR*qoSCfo&wEWgZ S4)*vT3omzX;qgTgNq+(wgy5zC literal 0 HcmV?d00001