From e6440e3a46020b667b7c358e48814768db8db81f Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 19 Jul 2026 20:14:50 +0200 Subject: [PATCH] =?UTF-8?q?Ladescreen=20hinzugef=C3=BCgt.=20hat=20noch=20e?= =?UTF-8?q?inen=20Bug=20bez=C3=BCglich=20der=20positionierung=20des=20fens?= =?UTF-8?q?ters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/de/blight/game/BlightGame.java | 188 +++++++++++++----- .../de/blight/game/config/GraphicsScreen.java | 66 +++++- .../java/de/blight/game/scene/WorldScene.java | 20 +- .../java/de/blight/game/state/HudState.java | 26 +-- .../blight/game/state/LoadingScreenState.java | 185 +++++++++++++++++ .../blight/game/state/TerrainChunkState.java | 20 +- .../resources/lang/messages_de.properties | 1 + .../resources/lang/messages_en.properties | 1 + blight-map/src/main/map/blight_map.blm | Bin 95655254 -> 95655171 bytes 9 files changed, 427 insertions(+), 80 deletions(-) create mode 100644 blight-game/src/main/java/de/blight/game/state/LoadingScreenState.java diff --git a/blight-game/src/main/java/de/blight/game/BlightGame.java b/blight-game/src/main/java/de/blight/game/BlightGame.java index 5e564af..27a21ab 100644 --- a/blight-game/src/main/java/de/blight/game/BlightGame.java +++ b/blight-game/src/main/java/de/blight/game/BlightGame.java @@ -23,6 +23,9 @@ import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.system.MemoryStack; import com.jme3.system.lwjgl.LwjglWindow; +import de.blight.game.state.HotbarState; +import de.blight.game.state.HudState; +import de.blight.game.state.LoadingScreenState; import javax.imageio.ImageIO; import java.nio.IntBuffer; @@ -50,14 +53,16 @@ public class BlightGame extends SimpleApplication { private AudioScreen audioScreen; private PauseMenu pauseMenu; private MainMenuState mainMenuState; + private LoadingScreenState loadingScreen; /** Routed durch onClose-Callbacks, damit Config/Grafik-Screen zurück zum richtigen Menü springen. */ private Runnable screenCloseTarget; - // Vollbild-Watchdog: erkennt, wenn das Fenster unerwartet die Auflösung wechselt - // (z.B. GNOME Shell de-fullscreent OverrideRedirect-Fenster bei Monitorfokus-Wechsel) - private long startTimeMs = 0; - private long lastFullscreenFix = 0; + private long startTimeMs = 0; + private long lastFullscreenFix = 0; + private long pendingFullscreenFixAt = Long.MAX_VALUE; + private boolean firstLaunch = true; // false nach dem ersten simpleInitApp() + private boolean initialFixDone = false; // Initial-Fix bei 0.5s bereits gelaufen private JWindow splashWindow; @@ -101,6 +106,12 @@ public class BlightGame extends SimpleApplication { settings.setBitsPerPixel(32); settings.setVSync(gs.vsync); settings.setSamples(gs.samples); + if (!gs.fullscreen) { + // Fenster beim Start auf dem Primär-Monitor zentrieren. + // Ohne diesen Hint öffnet GLFW das Fenster bei (0,0) oder wo der WM will – + // bei Editor-Start typisch auf dem Sekundär-Monitor. + settings.setCenterWindow(true); + } // Nur unter X11-Linux: GLFW auf X11-Backend festlegen, damit libdecor keine // Fensterrahmen im Vollbild hinzufügt. Unter nativem Wayland nicht setzen. if ("x11".equalsIgnoreCase(System.getenv("XDG_SESSION_TYPE"))) { @@ -188,14 +199,23 @@ public class BlightGame extends SimpleApplication { audioSettings = AudioSettingsStore.load(); startTimeMs = System.currentTimeMillis(); + initialFixDone = false; if (graphicsSettings.fullscreen) { - // Tatsächliche Cam-Auflösung als Watchdog-Baseline (main() nutzt native Monitorgröße) - graphicsSettings.width = cam.getWidth(); - graphicsSettings.height = cam.getHeight(); - log.info("[Grafik] Vollbild-Start: cam={}×{} fullscreen={}", - cam.getWidth(), cam.getHeight(), graphicsSettings.fullscreen); - fixFullscreenMonitor(); + log.info("[Grafik] Vollbild-Start: cam={}×{} fullscreen={} gewünschte Aufl.={}×{}", + cam.getWidth(), cam.getHeight(), graphicsSettings.fullscreen, + graphicsSettings.width, graphicsSettings.height); + if (firstLaunch) { + pendingFullscreenFixAt = Long.MAX_VALUE; + // Fenster NICHT verstecken: der Toggle windowed→fullscreen in fixFullscreenMonitor() + // funktioniert nur zuverlässig, wenn das Fenster bereits in einem aktiven + // Fullscreen-Zustand war (wie beim 5s-Watchdog). Aus dem Hidden-Zustand behandelt + // Cinnamon den nächsten Fullscreen-Übergang als Neuerstplatzierung und ignoriert + // den Ziel-Monitor zugunsten des aktiven Workspaces (Editor-Monitor). + } + // Restart nach Einstellungsänderung: pendingFullscreenFixAt (scheduleFullscreenFix) + // bleibt gesetzt und übernimmt den Fix nach 1 s. } + firstLaunch = false; stateManager.attach(new AudioSettingsState(audioSettings)); status("Lade Spielstand..."); @@ -207,6 +227,12 @@ public class BlightGame extends SimpleApplication { worldScene.setEnabled(false); stateManager.attach(worldScene); + // Ladebildschirm – wird von startWorld() aktiviert und löst worldScene.setEnabled(true) + // erst nach einem gerenderten Frame aus (kein schwarzer Startbildschirm). + loadingScreen = new LoadingScreenState(); + loadingScreen.setEnabled(false); + stateManager.attach(loadingScreen); + // screenCloseTarget: dynamisch gesetzt, je nachdem ob Config/Grafik vom Hauptmenü // oder vom Pausemenü geöffnet wurde. screenCloseTarget = () -> {}; @@ -388,8 +414,16 @@ public class BlightGame extends SimpleApplication { if (mainMenuState != null) { mainMenuState.setEnabled(false); } - worldScene.setEnabled(true); inputManager.setCursorVisible(false); + loadingScreen.setEnabled(true); + // LoadingScreenState löst worldScene.setEnabled(true) nach dem ersten gerenderten + // Ladebildschirm-Frame aus, damit der Spieler keinen schwarzen Bildschirm sieht. + } + + /** Wird von GraphicsScreen aufgerufen bevor app.restart() – sorgt dafür, dass + * fixFullscreenMonitor() ~1 s nach dem Neustart läuft (WM braucht Zeit zum Stabilisieren). */ + public void scheduleFullscreenFix() { + pendingFullscreenFixAt = System.currentTimeMillis() + 1000; } // ── Render-Loop ────────────────────────────────────────────────────────── @@ -400,11 +434,26 @@ public class BlightGame extends SimpleApplication { gameReady = true; status("Bereit"); } - // Vollbild-Watchdog: Wenn GNOME Shell oder der WM das Fenster unerwartet aus dem - // Vollbild-Modus holt (erkennbar an falscher Auflösung), sofort wiederherstellen. - // 5s Anlaufzeit überspringen (Initialisierungs-Resize-Events), 3s Cooldown. + long now = System.currentTimeMillis(); + + // Initial-Fix: 200 ms nach dem ersten Start. Fenster war die ganze Zeit sichtbar + // (kein glfwHideWindow) → Cinnamon kennt es als "existing fullscreen window" → + // Toggle windowed→fullscreen respektiert Ziel-Monitor (identisch zum Watchdog-Pfad). + if (!initialFixDone && graphicsSettings != null && graphicsSettings.fullscreen + && now - startTimeMs > 200) { + initialFixDone = true; + lastFullscreenFix = now; + fixFullscreenMonitor(); + } + + if (now >= pendingFullscreenFixAt) { + pendingFullscreenFixAt = Long.MAX_VALUE; + lastFullscreenFix = now; + fixFullscreenMonitor(); + } + + // Watchdog: Vollbild-Verlust durch GNOME/WM (erkennbar an Auflösungs-Mismatch). if (graphicsSettings != null && graphicsSettings.fullscreen) { - long now = System.currentTimeMillis(); if (now - startTimeMs > 5_000 && (cam.getWidth() != graphicsSettings.width || cam.getHeight() != graphicsSettings.height) @@ -417,6 +466,28 @@ public class BlightGame extends SimpleApplication { } } + @Override + public void reshape(int w, int h) { + super.reshape(w, h); + if (gameReady) { + rebuildScreenDependentStates(); + } + } + + private void rebuildScreenDependentStates() { + rebuildState(HudState.class); + rebuildState(HotbarState.class); + rebuildState(LoadingScreenState.class); + } + + private void rebuildState(Class cls) { + T state = stateManager.getState(cls); + if (state != null && state.isEnabled()) { + state.setEnabled(false); + state.setEnabled(true); + } + } + // ── Konsolen-Befehle ───────────────────────────────────────────────────── private void registerGameCommands(JmeConsole console) { @@ -482,6 +553,14 @@ public class BlightGame extends SimpleApplication { } // Vollbild sicherstellen: GLFW ist hier bereits durch JME3 initialisiert. + /** Thread.sleep + glfwPollEvents: garantiertes Zeitfenster für WM-Reaktionen. + * glfwWaitEventsTimeout() kehrt beim ersten Event zurück, nicht nach voller Zeit. */ + private static void glfwSleep(long ms) { + GLFW.glfwPollEvents(); + try { Thread.sleep(ms); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } + GLFW.glfwPollEvents(); + } + // Problem: JME3 erstellt das Fenster sofort sichtbar. Cinnamon/Muffin (GLFW 3.5 nutzt // _NET_WM_STATE_FULLSCREEN statt OverrideRedirect) schiebt das Fenster beim ersten // Erscheinen um eine Panel-Höhe nach unten (z.B. Y+32), bevor der WM den State @@ -503,34 +582,20 @@ public class BlightGame extends SimpleApplication { // Ggf. iconifiziertes Fenster wiederherstellen GLFW.glfwRestoreWindow(win); - // Ist das Fenster bereits in GLFW-Vollbild (OverrideRedirect)? + long target = GLFW.glfwGetPrimaryMonitor(); long currentMonitor = GLFW.glfwGetWindowMonitor(win); - // AWT-Primary-Monitor mit GLFW-Monitoren abgleichen - Rectangle awt = GraphicsEnvironment - .getLocalGraphicsEnvironment() - .getDefaultScreenDevice() - .getDefaultConfiguration() - .getBounds(); - PointerBuffer mons = GLFW.glfwGetMonitors(); - if (mons == null || mons.limit() == 0) { - log.warn("[Grafik] glfwGetMonitors() liefert nichts"); - GLFW.glfwFocusWindow(win); - return; - } - - long target = GLFW.glfwGetPrimaryMonitor(); - try (MemoryStack stack = MemoryStack.stackPush()) { - IntBuffer mx = stack.mallocInt(1); - IntBuffer my = stack.mallocInt(1); - for (int i = 0; i < mons.limit(); i++) { - GLFW.glfwGetMonitorPos(mons.get(i), mx, my); - log.info("[Grafik] GLFW-Monitor {}: pos=({},{}) | AWT-Primary: ({},{}) | aktuellerMonitor={}", - i, mx.get(0), my.get(0), awt.x, awt.y, - (currentMonitor == mons.get(i)) ? "JA" : "nein"); - if (mx.get(0) == awt.x && my.get(0) == awt.y) { - target = mons.get(i); + if (mons != null) { + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer mx = stack.mallocInt(1); + IntBuffer my = stack.mallocInt(1); + for (int i = 0; i < mons.limit(); i++) { + GLFW.glfwGetMonitorPos(mons.get(i), mx, my); + log.info("[Grafik] GLFW-Monitor {}: pos=({},{}), primary={}, current={}", + i, mx.get(0), my.get(0), + (target == mons.get(i)) ? "JA" : "nein", + (currentMonitor == mons.get(i)) ? "JA" : "nein"); } } } @@ -541,16 +606,39 @@ public class BlightGame extends SimpleApplication { return; } - // Windowed → Fullscreen Toggle: - // JME3 erstellt das Fenster sofort sichtbar; Cinnamon setzt Y+32 (Panel-Offset) - // bevor _NET_WM_STATE_FULLSCREEN vollständig verarbeitet ist. - // Kurz in den Fenstermodus wechseln und zurück → WM verarbeitet den - // State neu und setzt Y korrekt auf Monitor-Origin. - log.info("[Grafik] Vollbild-Fix: Toggle Fenstermodus → Vollbild auf Monitor {} ({}×{}@{}Hz)", - target, vm.width(), vm.height(), vm.refreshRate()); - GLFW.glfwSetWindowMonitor(win, 0L, awt.x, awt.y, vm.width(), vm.height(), 0); - GLFW.glfwWaitEventsTimeout(0.1); - GLFW.glfwSetWindowMonitor(win, target, 0, 0, vm.width(), vm.height(), vm.refreshRate()); + int fsW = (graphicsSettings != null && graphicsSettings.width > 0) ? graphicsSettings.width : vm.width(); + int fsH = (graphicsSettings != null && graphicsSettings.height > 0) ? graphicsSettings.height : vm.height(); + + // Primärmonitor-Position für den Windowed-Schritt + int primX = 0, primY = 0; + try (MemoryStack stack = MemoryStack.stackPush()) { + IntBuffer px = stack.mallocInt(1); + IntBuffer py = stack.mallocInt(1); + GLFW.glfwGetMonitorPos(target, px, py); + primX = px.get(0); + primY = py.get(0); + } + + // Fenster VOR dem Toggle anzeigen und fokussieren. + // Cinnamon respektiert beim windowed-Schritt die angeforderte Position nur dann, + // wenn das Fenster fokussiert ist. Ohne Fokus verschiebt Cinnamon das Fenster + // auf den aktiven Workspace (Editor-Monitor) → der Fullscreen-Schritt danach + // landet dann ebenfalls auf dem falschen Monitor. + GLFW.glfwShowWindow(win); + GLFW.glfwFocusWindow(win); + glfwSleep(100); // WM-Fokuswechsel abwarten + + // Toggle Vollbild → Fenster → Vollbild auf Primär-Monitor. + log.info("[Grafik] Vollbild-Fix: Toggle → Vollbild {}×{} auf Monitor {} (@{}Hz)", + fsW, fsH, target, vm.refreshRate()); + GLFW.glfwSetWindowMonitor(win, 0L, primX, primY, fsW, fsH, 0); + // Cursor auf Zielmonitor warpen: Muffin/Cinnamon nutzt meta_screen_get_current_monitor() + // (= Cursor-Position), nicht die Fensterposition, für Fullscreen-Placement. + // glfwSetCursorPos ist relativ zum Fenster → Mitte des Fensters = Mitte des Zielmonitors. + GLFW.glfwSetCursorPos(win, fsW / 2.0, fsH / 2.0); + glfwSleep(80); + GLFW.glfwSetWindowMonitor(win, target, 0, 0, fsW, fsH, vm.refreshRate()); + glfwSleep(200); GLFW.glfwFocusWindow(win); } catch (Throwable e) { diff --git a/blight-game/src/main/java/de/blight/game/config/GraphicsScreen.java b/blight-game/src/main/java/de/blight/game/config/GraphicsScreen.java index ffb6028..e406a98 100644 --- a/blight-game/src/main/java/de/blight/game/config/GraphicsScreen.java +++ b/blight-game/src/main/java/de/blight/game/config/GraphicsScreen.java @@ -4,14 +4,22 @@ import com.jme3.font.BitmapText; import com.jme3.math.ColorRGBA; import com.jme3.scene.Node; import com.jme3.system.AppSettings; +import com.jme3.system.lwjgl.LwjglWindow; +import de.blight.game.BlightGame; import de.blight.game.state.TerrainChunkState; import de.blight.game.state.WeatherState; import de.blight.lang.TextResolver; +import org.lwjgl.glfw.GLFW; +import org.lwjgl.glfw.GLFWVidMode; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; public class GraphicsScreen extends MenuScreen { - private static final int[][] RESOLUTIONS = { - {1280, 720}, {1600, 900}, {1920, 1080}, {2560, 1440}, {3840, 2160} + private static final int[][] FALLBACK_RESOLUTIONS = { + {1024, 768}, {1280, 720}, {1600, 900}, {1920, 1080}, {2560, 1440}, {3840, 2160} }; private static final int[] SAMPLES = {0, 2, 4, 8}; @@ -27,6 +35,7 @@ public class GraphicsScreen extends MenuScreen { private GraphicsSettings edit; private final Runnable onClose; + private int[][] resolutions = FALLBACK_RESOLUTIONS; private int resIdx; private int samplesIdx; @@ -44,6 +53,8 @@ public class GraphicsScreen extends MenuScreen { @Override protected void onEnableExtras() { + resolutions = buildResolutionList(); + edit = new GraphicsSettings(); edit.width = live.width; edit.height = live.height; edit.fullscreen = live.fullscreen; @@ -53,8 +64,8 @@ public class GraphicsScreen extends MenuScreen { edit.shadowQuality = live.shadowQuality; resIdx = 0; - for (int i = 0; i < RESOLUTIONS.length; i++) { - if (RESOLUTIONS[i][0] == edit.width && RESOLUTIONS[i][1] == edit.height) { + for (int i = 0; i < resolutions.length; i++) { + if (resolutions[i][0] == edit.width && resolutions[i][1] == edit.height) { resIdx = i; break; } } @@ -118,7 +129,7 @@ public class GraphicsScreen extends MenuScreen { private void refreshText(int row) { String val = switch (row) { - case ROW_RES -> RESOLUTIONS[resIdx][0] + "x" + RESOLUTIONS[resIdx][1]; + case ROW_RES -> resolutions[resIdx][0] + "x" + resolutions[resIdx][1]; case ROW_FULL -> edit.fullscreen ? t("menu.graphics.val.on") : t("menu.graphics.val.off"); case ROW_VSYNC -> edit.vsync ? t("menu.graphics.val.on") : t("menu.graphics.val.off"); case ROW_AA -> SAMPLES[samplesIdx] == 0 @@ -148,9 +159,9 @@ public class GraphicsScreen extends MenuScreen { private void cycleRow(int row, int dir) { switch (row) { case ROW_RES: - resIdx = (resIdx + dir + RESOLUTIONS.length) % RESOLUTIONS.length; - edit.width = RESOLUTIONS[resIdx][0]; - edit.height = RESOLUTIONS[resIdx][1]; + resIdx = (resIdx + dir + resolutions.length) % resolutions.length; + edit.width = resolutions[resIdx][0]; + edit.height = resolutions[resIdx][1]; break; case ROW_FULL: edit.fullscreen = !edit.fullscreen; break; case ROW_VSYNC: edit.vsync = !edit.vsync; break; @@ -204,6 +215,9 @@ public class GraphicsScreen extends MenuScreen { s.setVSync(live.vsync); s.setSamples(live.samples); app.setSettings(s); + if (live.fullscreen) { + ((BlightGame) getApplication()).scheduleFullscreenFix(); + } app.restart(); } } @@ -213,5 +227,41 @@ public class GraphicsScreen extends MenuScreen { if (onClose != null) onClose.run(); } + private int[][] buildResolutionList() { + try { + com.jme3.system.JmeContext ctx = getApplication().getContext(); + if (!(ctx instanceof LwjglWindow)) { + return FALLBACK_RESOLUTIONS; + } + long monitor = GLFW.glfwGetPrimaryMonitor(); + if (monitor == 0L) { + return FALLBACK_RESOLUTIONS; + } + GLFWVidMode.Buffer modes = GLFW.glfwGetVideoModes(monitor); + if (modes == null || modes.limit() == 0) { + return FALLBACK_RESOLUTIONS; + } + // Eindeutige (w, h) Paare sammeln — Duplikate (gleiche Auflösung, anderer Refresh) entfernen + LinkedHashSet seen = new LinkedHashSet<>(); + List list = new ArrayList<>(); + for (int i = 0; i < modes.limit(); i++) { + modes.position(i); + int w = modes.width(); + int h = modes.height(); + long key = ((long) w << 32) | (h & 0xFFFFFFFFL); + if (w >= 1024 && h >= 600 && seen.add(key)) { + list.add(new int[]{w, h}); + } + } + if (list.isEmpty()) { + return FALLBACK_RESOLUTIONS; + } + list.sort((a, b) -> a[0] != b[0] ? Integer.compare(a[0], b[0]) : Integer.compare(a[1], b[1])); + return list.toArray(new int[0][]); + } catch (Throwable e) { + return FALLBACK_RESOLUTIONS; + } + } + private static String t(String id) { return TextResolver.get().resolveId(id); } } diff --git a/blight-game/src/main/java/de/blight/game/scene/WorldScene.java b/blight-game/src/main/java/de/blight/game/scene/WorldScene.java index fbaed7f..3bc1a41 100644 --- a/blight-game/src/main/java/de/blight/game/scene/WorldScene.java +++ b/blight-game/src/main/java/de/blight/game/scene/WorldScene.java @@ -371,9 +371,19 @@ public class WorldScene extends BaseAppState { new JobProgressAdapter() { @Override public void done(LightProbe result) { dayNight.getDayTime().setTimeOfDay(restoreTime); - app.getStateManager().detach(envCam); - envCam = null; - log.info("[WorldScene] LightProbe fertig, Uhrzeit zurück auf {}.", restoreTime); + // 2 Frames warten: JME3 braucht 1-2 Frames um die neue + // Probe auf die GPU zu übertragen. isGameReady() prüft + // envCam == null, daher erst dann setzen wenn die Probe + // für den Renderer sichtbar ist. + app.enqueue(() -> { + app.enqueue(() -> { + app.getStateManager().detach(envCam); + envCam = null; + log.info("[WorldScene] LightProbe fertig, Uhrzeit zurück auf {}.", restoreTime); + return null; + }); + return null; + }); } }); } @@ -1391,6 +1401,10 @@ public class WorldScene extends BaseAppState { * Teleportiert den Spieler zu (x, y, z). Wenn y == Float.NaN wird die * Terrainhöhe an (x, z) verwendet und ein kleiner Offset nach oben addiert. */ + public boolean isGameReady() { + return !physicsCharPending && animContextReady && envCam == null; + } + public String teleportPlayer(float x, float y, float z) { if (physicsChar == null) return "Spieler noch nicht initialisiert"; if (Float.isNaN(y)) { diff --git a/blight-game/src/main/java/de/blight/game/state/HudState.java b/blight-game/src/main/java/de/blight/game/state/HudState.java index 33465d9..08077c0 100644 --- a/blight-game/src/main/java/de/blight/game/state/HudState.java +++ b/blight-game/src/main/java/de/blight/game/state/HudState.java @@ -72,26 +72,26 @@ public class HudState extends BaseAppState { protected void initialize(Application application) { app = (SimpleApplication) application; ensureAssets(); + } + + @Override + protected void cleanup(Application application) {} + + @Override + protected void onEnable() { hudNode = new Node("hud_bars"); + fills[0] = fills[1] = fills[2] = null; + lastRatios[0] = lastRatios[1] = lastRatios[2] = -1f; buildBars(); app.getGuiNode().attachChild(hudNode); } - @Override - protected void cleanup(Application application) { - if (hudNode.getParent() != null) { - app.getGuiNode().detachChild(hudNode); - } - } - - @Override - protected void onEnable() { - hudNode.setCullHint(Spatial.CullHint.Inherit); - } - @Override protected void onDisable() { - hudNode.setCullHint(Spatial.CullHint.Always); + if (hudNode != null) { + app.getGuiNode().detachChild(hudNode); + hudNode = null; + } } @Override diff --git a/blight-game/src/main/java/de/blight/game/state/LoadingScreenState.java b/blight-game/src/main/java/de/blight/game/state/LoadingScreenState.java new file mode 100644 index 0000000..ec0ab7d --- /dev/null +++ b/blight-game/src/main/java/de/blight/game/state/LoadingScreenState.java @@ -0,0 +1,185 @@ +package de.blight.game.state; + +import com.jme3.app.Application; +import com.jme3.app.SimpleApplication; +import com.jme3.app.state.BaseAppState; +import com.jme3.material.Material; +import com.jme3.material.RenderState; +import com.jme3.math.ColorRGBA; +import com.jme3.renderer.queue.RenderQueue; +import com.jme3.scene.Geometry; +import com.jme3.scene.Node; +import com.jme3.scene.shape.Quad; +import com.jme3.texture.Texture2D; +import com.jme3.ui.Picture; +import de.blight.game.scene.WorldScene; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Zeigt Logo + Ladebalken, bis WorldScene spielbereit ist. + * + * Timing-Garantie: WorldScene.setEnabled(true) wird erst aufgerufen, nachdem + * mindestens ein vollständiger Render-Frame mit dem Overlay stattgefunden hat. + * Dazu wird app.enqueue() genutzt: Der eingereihte Task läuft zu Beginn des + * NÄCHSTEN Application.update()-Aufrufs – also nach dem aktuellen Render-Frame. + */ +public class LoadingScreenState extends BaseAppState { + + private static final Logger log = LoggerFactory.getLogger(LoadingScreenState.class); + + private static final float PROGRESS_SPEED = 0.18f; + private static final float TIMEOUT_SEC = 60f; + + private SimpleApplication app; + private Node overlayNode; + private Geometry barFill; + + private boolean readyToTrigger = false; + private boolean worldTriggered = false; + private float progress = 0f; + private float timeWaiting = 0f; + + @Override + protected void initialize(Application application) { + app = (SimpleApplication) application; + } + + @Override + protected void cleanup(Application application) {} + + @Override + protected void onEnable() { + if (!worldTriggered) { + readyToTrigger = false; + progress = 0f; + timeWaiting = 0f; + // Trigger erst im nächsten Frame einplanen: so wird der Overlay + // garantiert einmal gerendert, bevor WorldScene.onEnable() blockiert. + app.enqueue((java.util.concurrent.Callable) () -> { + if (!worldTriggered) { + readyToTrigger = true; + } + return null; + }); + } + buildOverlay(); + } + + @Override + protected void onDisable() { + if (overlayNode != null) { + app.getGuiNode().detachChild(overlayNode); + overlayNode = null; + barFill = null; + } + } + + @Override + public void update(float tpf) { + if (!worldTriggered && readyToTrigger) { + readyToTrigger = false; + worldTriggered = true; + WorldScene ws = app.getStateManager().getState(WorldScene.class); + if (ws != null) { + ws.setEnabled(true); + } + } + + timeWaiting += tpf; + WorldScene ws = app.getStateManager().getState(WorldScene.class); + boolean done = (ws != null && ws.isGameReady()) || timeWaiting >= TIMEOUT_SEC; + + if (!done) { + progress = Math.min(progress + tpf * PROGRESS_SPEED, 0.9f); + } else { + progress = 1.0f; + } + + if (barFill != null) { + barFill.setLocalScale(Math.max(0.001f, progress), 1f, 1f); + } + + if (done) { + setEnabled(false); + } + } + + // ── Aufbau ─────────────────────────────────────────────────────────────────── + + private void buildOverlay() { + if (overlayNode != null) { + app.getGuiNode().detachChild(overlayNode); + } + float sw = app.getCamera().getWidth(); + float sh = app.getCamera().getHeight(); + + overlayNode = new Node("loading_overlay"); + + // Schwarzer Vollbild-Hintergrund (Z=200: liegt garantiert über allen HUD-Elementen) + overlayNode.attachChild(makeRect(sw, sh, ColorRGBA.Black, 200f)); + + // Blight-Logo + buildLogo(sw, sh); + + // Ladebalken + buildBar(sw, sh); + + app.getGuiNode().attachChild(overlayNode); + } + + private void buildLogo(float sw, float sh) { + try { + Texture2D tex = (Texture2D) app.getAssetManager().loadTexture("logo.png"); + int imgW = tex.getImage().getWidth(); + int imgH = tex.getImage().getHeight(); + float logoW = sw * 0.40f; + float logoH = (imgH > 0 && imgW > 0) ? logoW * imgH / imgW : logoW * 0.27f; + Picture logo = new Picture("loading_logo"); + logo.setTexture(app.getAssetManager(), tex, true); + logo.setWidth(logoW); + logo.setHeight(logoH); + logo.setLocalTranslation((sw - logoW) / 2f, sh * 0.42f, 202f); + logo.setQueueBucket(RenderQueue.Bucket.Gui); + overlayNode.attachChild(logo); + } catch (Exception e) { + log.warn("[LoadingScreen] logo.png nicht ladbar: {}", e.getMessage()); + } + } + + private void buildBar(float sw, float sh) { + float bw = sw * 0.50f; + float bh = 16f; + float bx = (sw - bw) / 2f; + float by = sh * 0.14f; + float border = 2f; + + Geometry barBorder = makeRect(bw, bh, new ColorRGBA(0.45f, 0.35f, 0.08f, 1f), 1f); + barBorder.setLocalTranslation(bx, by, 201f); + overlayNode.attachChild(barBorder); + + Geometry barBg = makeRect(bw - border * 2, bh - border * 2, + new ColorRGBA(0.08f, 0.08f, 0.08f, 1f), 1f); + barBg.setLocalTranslation(bx + border, by + border, 201f); + overlayNode.attachChild(barBg); + + // Füllbalken: X-Scale animiert die Breite von links nach rechts + barFill = makeRect(bw - border * 2, bh - border * 2, + new ColorRGBA(0.85f, 0.65f, 0.10f, 1f), 2f); + barFill.setLocalTranslation(bx + border, by + border, 202f); + barFill.setLocalScale(Math.max(0.001f, progress), 1f, 1f); + overlayNode.attachChild(barFill); + } + + private Geometry makeRect(float w, float h, ColorRGBA color, float z) { + Quad quad = new Quad(w, h); + Geometry g = new Geometry("loading_rect", quad); + Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); + mat.setColor("Color", color); + mat.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha); + g.setMaterial(mat); + g.setQueueBucket(RenderQueue.Bucket.Gui); + g.setLocalTranslation(0, 0, z); + return g; + } +} diff --git a/blight-game/src/main/java/de/blight/game/state/TerrainChunkState.java b/blight-game/src/main/java/de/blight/game/state/TerrainChunkState.java index 6ae5992..be87b6e 100644 --- a/blight-game/src/main/java/de/blight/game/state/TerrainChunkState.java +++ b/blight-game/src/main/java/de/blight/game/state/TerrainChunkState.java @@ -172,13 +172,21 @@ public class TerrainChunkState extends BaseAppState { @Override public void update(float tpf) { - float refX, refZ; + Vector3f camPos = cam.getLocation(); + float refX = camPos.x; + float refZ = camPos.z; if (!Float.isNaN(spawnHintX)) { - refX = spawnHintX; refZ = spawnHintZ; - spawnHintX = Float.NaN; spawnHintZ = Float.NaN; - } else { - Vector3f camPos = cam.getLocation(); - refX = camPos.x; refZ = camPos.z; + int spawnCx = worldToChunk(spawnHintX); + int spawnCz = worldToChunk(spawnHintZ); + if (worldToChunk(refX) != spawnCx || worldToChunk(refZ) != spawnCz) { + // Kamera noch nicht am Spawn-Chunk — Hint beibehalten + refX = spawnHintX; + refZ = spawnHintZ; + } else { + // Kamera hat den Spawn-Chunk erreicht — Hint freigeben + spawnHintX = Float.NaN; + spawnHintZ = Float.NaN; + } } int pcx = worldToChunk(refX); int pcz = worldToChunk(refZ); diff --git a/blight-lang/src/main/resources/lang/messages_de.properties b/blight-lang/src/main/resources/lang/messages_de.properties index 58f41a1..dbb2312 100644 --- a/blight-lang/src/main/resources/lang/messages_de.properties +++ b/blight-lang/src/main/resources/lang/messages_de.properties @@ -58,6 +58,7 @@ menu.graphics.row.shadow=Schattenqualität menu.graphics.val.shadow.low=Niedrig menu.graphics.val.shadow.medium=Mittel menu.graphics.val.shadow.high=Hoch +menu.graphics.val.resolution.native=Nativ menu.graphics.btn.apply=Übernehmen menu.graphics.btn.cancel=Abbrechen diff --git a/blight-lang/src/main/resources/lang/messages_en.properties b/blight-lang/src/main/resources/lang/messages_en.properties index 98a1174..a06fe7e 100644 --- a/blight-lang/src/main/resources/lang/messages_en.properties +++ b/blight-lang/src/main/resources/lang/messages_en.properties @@ -61,6 +61,7 @@ menu.graphics.row.shadow=Shadow Quality menu.graphics.val.shadow.low=Low menu.graphics.val.shadow.medium=Medium menu.graphics.val.shadow.high=High +menu.graphics.val.resolution.native=Native menu.graphics.btn.apply=Apply menu.graphics.btn.cancel=Cancel diff --git a/blight-map/src/main/map/blight_map.blm b/blight-map/src/main/map/blight_map.blm index 15303775fdff882e1601769c06d3a2f5cc779caf..0b9fbb3a914779a1508863f44fa09ca70f7239de 100644 GIT binary patch delta 42132 zcmYg%c{o+y7xx)aD$N?vAdOUr%)aTHA}UiQRERQ_c|NzClB^6Bl2C+DrVN>tB4kP^ zbD76$yk_^k-{1SZ&-4Cq@AI5{_F8-IwbxpEtLxfdK0~w-a>Dsx6#{a0a}n2qIb|c>0R`0 zTA1ELi_m-Nee{0%0DX`?M2pg5^kMo4eUuibC1^?d7%fFh)5mEUT9%fh3`@GvPdm_#v=i-2yU?z* z8|_Ye(4I6!Gw8eYJ=%+=>HG8p+M9kz`_PYQUmEDgv>)wH2hf4^6Z$Frj1HoM=@9xk z9ZJ8T!|0cEI2}Pp(y!>(bQB#;zoBF3SUQe=OUKg*bRzwZeorUS$#e>xN~h5u=yW=R z&ZM*Gk90PjL+8?YbUs}`7t%%aC;Bs8On;%j(j{~${f#c8%jpXGJ6%av(baSfT}%I< z>*$|!J>5Vz(!c26bQ9f7x6rM08{JNK(0}N^bSK?Kchfy|FWpD?(*yJ%Jwy-FBQ%p9 zrN`)TdV-#$r)U;EP0!G?^c+1;FVKth63u>y0*V5L0*(TK0*L|_3fw60ps);u%iHAPR?25Jf=@g~KQuLE$J0;wVUFAAqnP(|T13TIGILqQ#dvnXhw zpozjc6wae?0R=4-v{BGOK^Fx*6fUB035Clj=%a821p^ceQ7}T`Dhk(7xQ>D`3MMF+ zqHqHRGZf5GxQW6o6f97%M8OILYZPoyxQ)Uc6l_tjL%|*e2NWDpa6-Wu1s4=tQE)@S z9R&{*JW-%fV4!dpg?lJ?p+KW>AB6`fc%$$T1s@b1q2P-Gpzs(4KNS2?2tXkag(oOH zMd29=K_~>H5Q4&U6hcvWfkGGxFHs0bAp(U+6keh58ignnqEUE*LJSJAD8!-g7KL~e z5>QA);T;O^QAk1|8HE%SQc*}l;R6ckC}g0Ji9!|%A5q9gAqRzA6!K8WN1*_PLKKQn z_=Lh|6pB&!g2Go6N>C_8;TsBND3qg6fx>qbDp9CHp&Er66lziUfkGV$KT)Vhp#g

%b8-*qmno(#$p%sNT6xvbfK;aJxe^KZ}p$mm>6naqTMWGLceiQ~!7(`(Rg<%v% zP++1kiozHQ<0wp^Fp0tx3M>?+QJ6tt7KJ$!=22KcVG)HT6xirP3{VU(3~&qx3`h*P zFyO|32ZLo8EXRNsgB2L8#9$Q$d>E|8U=0RqF<6JedJHyTun_}(3^rk~8G|htY{g(3 z2HP4 zF*t*P8V2eZoW(!`15FIhVQ?OU3m9l&ppAhJ2D%vNVQ>+HOBh_nKp%rE7#Lt+h=CCX zS24JT!F3FbF)+cv6oVTWm|!AU7(Bt?DF)9l2*My3gAfd!V-SkL3k!6ytpV^EC27Yx2)P=Y}z2H!9!!=N043JktuP>Dem2GtnUU{H&} z4-D!s_=!P11`QZAV(<%t-xxGu(2PL~2CW#hVbG322L^vI_=`a&23;6*W6*;^F9v-W z^kXo9!5{`h7z|@Df&mkQQ4Gc~7{_1&gGmggFkoRYjlm2Cvlz@_Fpt3k28$RhVZg>7 z;(+3S;eg{n;6UQQg#$MZJUA@FVL1-GIIO^7B@U}_;KN}x4r_2&i^Dn`*5j}NhmAP! z~OHh!2t(H9Gq})#=!*#R~+1MaL2&|2TvR*92hv<#o-zQ60609x!4C(290G6%#Ni1JPjPsLLl6$ZIE3Kv9EVUGUf>Xh!%G~(afrYn z5{Fkfyv894hiDw$;1GjDEDmuvyu~3NhXfoFad?NrdmNH*NX8)rhg2NWaQJ{jIu02) zWa5y8!$%ylamc|T7l%9?@^L7@p%8~696sUj8HZvVzTof`hY}o0arlNq84l$*RN(L( zhe{l(aHz(i28UW4e&A4t!%rOQacIDy5rsD+yRd03QLX30OnG zS_0M)u%3Vo1Z*ULpMXsSY$jj}0b2>!M!lZBAV89UV+2SMAWgt=0%Qn~B|we)v& zP$WQ!0A&LHA>af7Dg>M);9mkx5ui%IX#&m=phkc?0cQ!&AV8CVa|E0x-~s_!1ZWeW zLx3&;dIVe~;1U6s3D76t3IPTL7!qJaz*PdS5pbOVV**SFFeTsy0cHf46L6D&TLf4T zU`c=#0oDZA5OAA-I|SGgU`K#G0S*K>65vFDGXX9HxDwz-fI9&m1b7la5x^keE&=xl z@FIXF;64El2=FH0Apt%FJR-oC03hHo0e%Gd6A(Z^AOTMZcuK%C0)hw#CLn}>=LCcj z@PdFa0$vgjPCx_!kp#RV;57kJ1Vj_?hJY9XVhM;N;4K011SAlUNWeP+-V=~SKr#U- z1f&v>M!*LG(h0~QAd`SB0zMLuO+XF-xdh}9kWWAX0fht<5%7tC&jb_`@P&Y{1e6d^ zO29V)$_OYYpn`z!1XL1GML;zHH3ZZW@PmLl0)7%uPe20!jRgE6;5PwH1T+)SLO?44 zZ3MIv&_Tc-0{#-vNkA6?-30Uy&`Urc0sRCF5HLu<5COvkj1a&iV3dF{0>%lLAYhV! zDFRpoOcO9ez$^iC1k4k#K)@maO9Zfqha{jRU?kuq5G0T!aFM`G0uKqxNLWq+F9|D1 zSV_Vv68K11O~M)y){?M}g!LqBAYmg3{3L85VKWI^NZ3lkHWIdzAV7j32|^_7AYms7 zyGYngf-nhtNDv`mFA4id*iXU%5)P7Zhy+m*#7Hc4+$qoP$A(Y3ICFCiUd^>PLptk1T_-WNjOV_1__!Z zoFm~p2^UDvB0-x39TId&&?Dg@371H?OoBcMS4c1*!H@(a60VYPjfCqY7?WT^f+-0% zNH8P8oP?Vs+#D>0E+5?&jg|YHMBkFN=m0}(i&K@T`m}ykrLjpl^ z^Obg=*RH3|8F$v)T`cFd{U_fwNTOk?l{p^LcBwTz-*jTDjg4BItZd!(!d$C?FFxx^ zRwM-?$ki-^-+wF`eZ4`);aAM%Wr3?DGJIUVz&aiQS7_&Vf? zg z)evs3>o>7*OS4$^YSGJVqnL~3*k?-i##PT>>k(wAYUh2AQuX7#<@fm(7RqAOB4=hj zcts-}%Fl*9i60Kr>ese7wLj>V#pxU6luWj9Yl2Q8#ct(i%2-^v?{OEoN;z#59m-|y z<3BW0_CrsvAa}rtSui`7_LVnjDKbP#;=M(e2OsX(?-qn>IE!R&6<+!*h=< z^lYpvpRvC`rrah5MLZVM25sEm#k*}6GM*nl`GK`RW&3JmDD$3A&RAV?-h7#!Ueesv z&dkj3@}6$`6Rb>DLxc9MQ#~Kjj)%LNpL2$KIrzRzCG{5jbfHx($}R-6PeKL*7ixm!KR@8s-MO&ca?@_Hk2jh zBQmme@n@6UCEW_s1h^UJJRJ&`95&4U(d_;QVH6s?bN}+p#(-VOw=nrfSW|v}yj(Ku z1?NEaPn_QK)at#}0Y%jqDay!j8&8*~heLua@<#UQRzv;C%0)G|O$attF3Iv;Zph98ye40{?UQiBWG40`QWx^qb zccurT1^YWBNwcCEYz8Ir#_7itzhD<&R$HqxbM)~>gGY}C#sxxFE9uJXa; z0IRCXN^ezPy-vSx!2DTj?4=~5yh+Eph7hS3rp1{oMae@OdAN!_G!)ov8Le7Kczlnf ze|6-KWHVWm>(Q;{OZNY~{b+NxrGh|&^zWtqxZAl$KyvJrhhkPE^)~;MzvARat?CH3 zihMOgm+6?tWoF6FmY;OGL%rrSo_kc7O6BLgciY8aRoW=nb0Dq=`D*@y2Yna&la;Q2 z`>1Ss%Z;jE6Rf{&*i^K{@Qqdui>4+e9io^hWUz!yxB6rl{{1B z@(xS#(;hY>#fdMT_EXwv4#N|?)tlOiA0u8QDSLK~`|}A6dF$knHVhHs{b%gagKLky zwhr7%C_iw(Vt}>j*jzw$wKV$?d!buR&FEsGN2j>aOBwg3;%Wsuw&{l+#SB+{ef^3O zDQYf!*R5iCUgWOx_1=B#4u)NIWYa~<4IHuV+O+T8h>?+=fgyE4``o#6+81hbJ%2qf zj&<+;JnJjqIVYu`mB(scnOvAN8S2I{Cc`N&o*{@58FF7x%B_Fb9_B`?E9JSXex&&oD6 zg-N};V%rLLj5R*mQ?=2W3XaUYr(1YkrO}#1J?WeYW3ShDLl$q3@UyGwX-=wt8S(^Dr`dTSKkuKH>u z>#BPCO|K2M+}lY;ByHM(uS(YQb_9YTm)1V)*}c~1rTOk{%kNX4|CmdxL-!AGjd;}D zsVh9r^oz{@c)i{&nZ3{yIv?yEZR!S1HbXT{3*SWZc=mqOLU_6aJm%#?o}&ok;PMB% zQq^bqyzd$O^T+&Pgx&?i=EJsZV~xVAOMHTt=6;^wy`ec2!o&5?@!6AK@B8$L<}aJk zTqd+SNpYgkrXEKS>e7a9+KcC$X8BA!D;L)IeC;HK>!(hXZg(pwG|KH@S=`Xva(?|X zcjqqAAa+ukATOD7|A1dkUyhCD7{~vc=)~^j#$}g1$jL$1-rwL*T%xI9-0)l6-};^U zWcn~utWY@On-5(a*wTb+M9L3Nu>M;$??UL+!|Ruyj2gQ~rFj;YXgojcdfVZX$S78* zl=n6-DyO>0W6w6bp_#jm7{PcqU%^w;x@xu9UZ#POkyeD@Vy+01L)$KYR9>DqI9DIM z=Q|rOQoN^FjkH>zwJ%i+Jw11_e15V=#FjZ$iVa;CM3K>bGtXD7UVbVnutr3OjWQ@D z!KX-0Fy68unM0c4e-`;IupSw`skMl9d^p`7nd+H98WtAmJCTwE^~-=b@#m`0>Tj&W z2!pNox@ElliOTN1C{kqh@7t7XL!ag)o(X^ML68pdo!SyzeVf~*t^Pi2x_40(K^WDv z3frgGz@skj!yaZ`;qEn=JO~m=`mCw5b{-8BYL4*fBgDu|M!!3uSy?8kRnCj z@uvb8GxB5l9}8!B%s*T9IA3jTU`?sqvVeGYs){;if>z!1Hwl^7W=3;9=jA!S)tlX? zcqu>Hp(4SI8R5ja_T6+h_PDEKJj97wmD4&mE`#>W^#jnGflo zfBx{sPNkFs1d&rg?GDzzl2O{`P0h9>uPkG69FKgElxgjwmCa7+nZjD}Ca2tvE(U5R zn6^F=8F@ZERo1z6Fwu9y_Ilv$z3W$)($T5T$~T7@R6d`q3oB2p#B_cw!ic!_e11Im z`%22~)c#$e<=RVC{yUXURd82?99$TYiWQK%r4;!nDo;g2V#{L{!cNp)9 za39g(6>UDy9D*Q|KSu|3M^tZEFE-0QDKnWSl+4U>CiwQf>aTU9?CXwyxUr4;^0DNB zLQu>}a+b<=ahWB*n$|nG`L(d0*WEC3X|6OnRLK(NY^eV5bobf!?<=>49kc$O<50n3 zO$zQ*YBZY|%TB%b@?5%kUn;kt^o=hOQy#Yx_8-`vcx!G_P{Oty_nY}U`P;6?)8SlZ zGJ^D_=I!$hPQEnJW9KjG;`&>>(DhEe--szANq|AIM9LLq_HIj592gyoKDA=IT#9G) zCpTRQiB-dT?a4W|qaV+Yu+ghd+HOB2eMj=5Mj&V~lff{sTnjcpUY zrA)=b@qPZ@wC$;v(rHn*W?p^rIk;*)GBZh!Ck$-mlXfpu_@lU#c;oxs`hD}hqU>b?{~MFPjE52T^!x`sw&(wz6}k3b zaqN9gDj!~6Y<_}@Tlo2w#pNxurAb)zipmM`xmnYWHz%~}j#pG{7x?%;ikM}J?6fPi z+L-I4RqaXB=El2?|)KeWAkFV>WxQc z=T}lIw;sFJ^glLdxNh38Mr6O24-^SXXXQ^ zv>dA4w65|pD{G77o}42Cw{(qtKl&W1-SjhKs~c<|BG=!4_)t6MagjQ!z-hm*&%EV> zJ6#hl0?rR)y91roWPDj+&*XO%V_1DGeC4WC9pR1>BzmGap z>4+2~$msprP3)K$g9ABwdeiaon-80h25@7O~9x$3M_Y^m)ni-#r*J4E+_Wb_s zwU>pfj?S~-Sgj)`5Tqv1)Q0VQM%;-l>E-ReMe*8?pZ(%DMyR59m$(J&Rr_Aylv$7*uSe6->!XUfqJt7N)TYy|Ff zoj)aL_x;EzL5Hq2?Q%l_UN^Rn25qj3)!3#e^A71g8Glh?i#Q)={aSn2yvxrVNSI%- zN#@pqq1JSGHv8R)Rq_jOjs53YK2-Z+TiI)-$MhE)L8qbf-h!^*-YuGq$T}pCML$^e zcK@>z9w#bSu+>TflavwlsV+|EcEjVI%hNcP=(7IWF9G zd|E?#q_3Fo_^8GFu&l%1UxE3{{|0J=Vpk6dA@)kwmYhTf+Y;F|wQlM!j!jUEWI@NS zEDh;?BMsS3ZnMbw=!q)!bj@tUPOZw(XB)?K0yj$%2RNn%>;0cM0wCr$xAK za>P?h&l)woKNYFG>u45RoE7QN7uYT{)}>V~J=ikgY5V7E$d$Rsko!v$Kh#7EMn!tV z-5NH>MY#XX@{_Y~SQ2Nwty)I$BPADH_WifR=MNT=2c(>{TBjp2+c_dqWXXy|I`$mz zHMl({9Aei3aH%(1chV5+@;W|EcN|43=*WT~c&RP}2JLhHMQACORi2+-$?L&LfCois* z+ogtI8EeW-fn8N$pIL~J|}GKC+kGnAw9>$Fo{(CssBZOiZXzbDbYFWcxoRGcN`C zIXvp_>fZgdOvs#RL?SZ~rMy4uqZ@N+(M`u*bl<+@Q0H&^dMQKu-#U%0ql5arEiTm_ zd{M}$4|v+i}=(oEMn zf5o{`ujw|2dCJD7V2NMvitDFrvzN9*1s==SraH@Q*|@9%L0)-1^wyuweWN+}+ zh9-I*W;j-^3M|Ibj{7_u$qhd@cOM46QMaxArdMq4K%w3F7 zUr?N#v=jU8*59pX=rNViXy`UouV?6avyHb}e$gZrYq9IKDqQN83^ADL6fZD*`iSo2 zIX?UK>;0SmIUH2Q>!R}uql@U@u@e8N__Sql3#>n-5$-*+*<$(QO@lUhlGM^YlDDUt z8hqSnk0i^6m&Ly7mDUFf0AL)8a#<^ISHE_1s+81b^OQ)#v-ng8327cV7P0rLg3}xgRaP z5uSeoxtRrv!6~S_nTg@^fw3oTk~-bOE+rGt~P&~dE1sBDEgqOFgNe^nd|oN z>^e2$(8%>-37daprAa7edqv-kjxU#ACAXA&%H2iPWn|TUrH@=Y1pJR{Z9*KMI7T=-XA!7I7AT?Y^rP@;yg%!5{6FX2WLTU|9SnL}CBb-gbHmlWx*k0hyzTmVU0yL% zMX*P@``1T72lSFIrY=OARs?&dn2fpc^5@MC_=a+gcC^}AFMV~IGvQU*oi+XKu8#2W z)Zu?;jK4muraCJ9b>ClMu}&x|-YmSR23~Y^?SD-4<%FJRL4~MT0nwlP4gcQ1#lI@#Xqj%RIZf~ENQ4T1t5aW22 zeP?>VIL@(AWaw7ZSxsb5aRx*AXsCI{@>kXM)LcigY3QU;zU$ei^@-x!um1KHq$DI5 zF4YRN-#nbIc&b!C`02NiHS|0GpkhJg2hUpP+MmAck0y&fhxCuxG^N;nVu~HN*FGt; z5FER~`;U;)euInJSFSwYx`~rb9cy^b4wW4hdRV$vIjw%1Qu11s)d+rDcYL+-J{3Hdt_;r3Y6b!)2k)?^`!8ukJSU@di;xZBbQTL)eHeu22&22xV?F7}nJe?)~)DiF7c2O^e z=IRgh9!jk2qC7lWdmbNX``Gz?^P<|5+6GeSCAVtN8{T3aWO%{|MRNTPyLbty?oN|M zRXX3_Kz7z9B!(n^FJb3642GG=C|yK#lfFqXrZ*N$HTiO6I%-oL_N;0nL$#+$F?ijZ z>-rlQ&aPe4?D=8MWA*jy<8?@;C3R)C!N9C~Tg~wd2b4psa#X5NC_L;iH-cCtTw5q~ z={AyRl6lr?ELh#e771N2D)cOVuyU)E_4kGFc*H_+c6S{TEH>YnAVfyS9&0TNqJS zbEV+xQYbzg24L6Fi93pxEOjv#;FMm)2FWZGza3S5jA7n{Kb|h>l?v z&a<|PDYCsQSZBPokXn_UTW+?Uep^5POjB+w!Q0Sap*A6?BBY8MXs~17GNz`X3&*ln{yxnJs!+U=))$^-7&_l|veS0w zA0Mi}#Uv#fTdjR|zK!a3S{mz?YIC2O<)$1Ol%sQcnSJl0L$QFWW!si|)0COOC6qwmsz^*=WB!a#~Y3%E!5`Wl7gYTe5%jLvr5Ds+am^ zMx)`25A4s1I8Ij8s%RKmUlkNW%=M}Fh{}Xxp^Pk&qO&A*j6prv!Pp>pXt6Gr*N_?u zo#499(fUQ^&$OVT2Bx-x``nIFifyDJ=U#Y3=j$IIMOo)k=ba)_w>Pau(o=;Byn>t` z|7|UtRdFPhhIMBJk1?8t_A_p;y4pX_%wH@~tB$CTo6VGep<3c}4v}#<6T;dobL;15 zfk9o_Md@#a9!pf|-#>R$#s!h4iveNkUoJZi--KbyZKY=l+_fCJUO94;uQKnf63XT2 zs0@i*Qr4Ns^Vl7_)pB~1QeCsKmVV*yV>qJhyuMarCIh|Nxbcmz@A6DVcMp0#jxDA(%6uuBC~!<599r%OnR z7SaE=s()A@m#y=(mlGoZEtIOWa%%t2u`l&P>$=hcnc;CJ&zF9{bg9 z_`OhPsgzo=gcoV7edBw^HYXh(m-4h7aYqS!XQM=a?HT*BK)5j!TD?MepFFC?~F)UId8U2+P^BT3} z01mm5i2t@1?e_Bmr>8dO>Yp{eq`ZITAb-tEHpOAF0-33}r>%VRj)rBTuv?&cfO^-n zXKyM_xi6Ycd|sRn+lX2(yH+=U#os#Q@!xa+&a1S-&K9Hmw1&} zVQ&cajqC={*wKpwsBQ-5RJB4&%+wqDM}sB&FK&fHw(V54WAtB$k4sO*GMfz|ay zZ1sT=#dkKQr)5;r>zD+xuyRZtecLB*KlH5CZMV3Kpl{Z0m*NP<*n)CtTS0ne=9nB~ zG`TWN{Lm{$gU&le%>1dJOi#Jg`cdV)H#f|gkJQoIZ^aOIL(}C-E=*-(mVjR9a+?_~ zD&8ux#Fxk~aG5S$xw4~fDkJiS!Y%0)qn-7M!J@A7m1Z{bg8}*8>FXJ)3GOwo+PXur zl&91>4!X)~>sy|{1uvxwG(8Wl^%1tsY~FZyt@d{N!M_d}8G{?;BzpZ^4ji*=N!cN{ z%)Bz;q*x2p%IDvfn{!yCK94>eJn+Nm8^uUSi@L(W^%b)2ndH1nV?UJNk-b3_dpjg=+43g;)b##J-s@%BJ5|4AwgpSAJ+R63OUAU(;cPid zEX)4qZ!yml$Klcgy42**{aq8+AD6ZNLUtaPFBwv}q3R%|#=(;94(0M(?dZ#o)fCjz zdA|IfO5Dr8vGgX;YUHP9`z=wRwZEIa%kQ2!CL2uCq);p6(;!%MdZgX zc?&pnr027aU$xDtKdii4fR}$w@bIyyoZUeWOQWdyy+X*VRzf+)&NT9M=N`>1x?6a& z(5mF2-_Fwlr-?(=gvygL^WxX?W#f;&AM(t3lQPwyT$ZOYS z@wGdj%dg3TdCg#LXxNN-nq8I&OFZzRbxQpOhIwbI$Jo$sG__$?Q0x$|;4bwb-SvB- zG^SBTb^h&DuhMSJjJWwHX?PdU1ga<(qn~QEmoj;0cj{Ys%D+fT5DPYyJ10*DqMWpH z^_B<7zYrVH!RsfO4y z<;{P7xmo8lxR!61d@i4oM8m!x{mI-eb=pc20=s2|m*?u}2KRpDz|Va=e}C_w7@ozB zk#fe7%EHPAw-Ip1O_cfY4D-wmaZzPD)=$o{mISDE|jVjmx9|FjCJO`|@trX)Fz zq>at=QVTN*Vk0$oG9(!CaYM4k1B`nY<20Hr$(MajX>-=G1Sln)hafpLUg; zeSXxzo&6}yx^?`r7^ylbyZCj=VQOm1!6H)rwMDVTe;W2N1$|~eTpPzu`42slaj9+< zQQxk$&0^L)edv{&o^{oF#-T((nJByeJ3J=^T_2>Q+qh!$5y#J6H^mF)GQ>8ddu}_t z$-SXPGAz^b@-$WDFyAGa{}$l@OZueOJtAl)d2RDUm2o%f@n)%4?}XX1WfU@leOraC z4|1r`W-NK-e0edRUwVgovTyw{#>If|5$jVbkAFgxyf@l#@XgjlR|gw+9-#}9!)871 zxu=Rt4~dZa7!P8!ZA>K-dlsx?fA&7x&%S(q$!&0BdjVDVgz%1K!2j}--)N3lb>oo;%RGJ6CON3`s8 zZugfcu0`}J|C+M4;a=UC&dujJIl1GSK-JxWVZ4^iM9xE!>X&fE$UEz7$pcg*|Cn~p z-tb3R)20X_tC?qB^K5ZCGW!%WeL1H$=#e(t<|Q>DKfS>E+c}+7!%46k1H@V2w(;G? z4?WTM{jbdE{KtNo&%lXf=f3=@u)zTZ19@iJP2ph=c|@t%_l>Jx#GTLe)$f`v7!`JR z@>gxU!6`x(%tVc88=kJtr!=U;&4@zIu;B8h`A3{IY2#xR@q3?Ni^!)Y6%=?D^NIv# zO$&2&d+3Kyu;O?eZ`RL78`t@lZNna?5v8rZ5g4RFzjJd<{QhFM{@-s8btsCu=FysvTevNKT9Px%yBOq4 zBHQ6w>jSCk_ts1`4((+Q?W%11o5N9qasS;;8ul~< zD2^unx~~$I>U?mn(2xD<+d3RcNnBR4U0MT27zQWL>24ly`u3aK)%?Fh>~7EN(33KB z>TE5{oe$v-c}{Z1{8J`u>yDO{M+3)c9J9H6$HUakXdO~h zQZ9Ni?Pf)s{^wk_`ck83j>{sx*fjrw13~Dr1QQ1avfM9ox+#o|3Qap>&khO<{cdX{ zIN3_aLtzI_z-ZZ)7VlU*r(@C3nB-w;{y&xt<;fS*-D`hHS}0yRU2t_|o&TYWIUP@) zunKk~uPTFv9Ewg(%TJEhabV8;-oKGooV8utj8-El;>0>Xg`RIuJ>4to6`xq5AAYUn)hh$9e3k&Ss+MZCZ`%$MpCio z1FB-ZLL&&|HgW$DZ*b&Xn^v%xu@8;$ppM5wT-n-Df-JiL4?2Zo>vf%{52n{xuVP!QMjK9{B{d*}?^HBawk9THB`L3W_rf;q^vFgIa3|~Al z-HmkU)y}Nel!$a63$f0giapS1|0RtpK;NPJfynd<(6-39>|k=WdfnEfD?ya6u@KV1 z=4ZWAn3wncY|{JUfX%Ew+hww#Iq7)f0r|x>LgxB*t*v2dCxR{;#9V1|pLVcl+J+O1 z&1(dx{>G)*W-8x$I7iHChS}>l;W*Qs;VE8WCN`KiaSe=MZ>#*cL_2=ee$jqQ+k!Psck(w{%CKYbd%opCJbLe8{P+@kD4fCghL z)3DImMJ*{i<3nz4bbtW$e)d{H#)m`;LpQY@AsS~8WOdlpCGMofp6z^!^W_#X9&T!j zCpys%rT543x?fDD`?DJKk!pppj_reD$76Oqtva@$xw-j;-T44fM}dsnW1q>1T$$z< zyE#kI9Lq~)cg6QcQl53<`kBKmI$LC4Nd+Tq3rk~l)VkXXl0_6XUpp*iH0>>tb?Vys zll|%nA!p-$%r^KXB_++awi>jy4o5G$n#0YFln^5Be+oj*c+5{*dbrkQ>P-jFm2=(= zMR>kX>({Dlj}`dI?kyr0OSQz?ptm@%O=kJm3z5L0nm5*2OjWp-?K3@8CchRdmFbgaCR#zxk zt>7N8Z@q7J-_^y)XZYvCK~)j;Ka1X3R%4XHZ#%)YVt%^Y!_Q-Qz_? z`lZOJbxKq9nkAEKB2>G1r+g`!=rw5C+4tew@7EkrLY_PRxx}6+O!oJjDoizNJkXrQ zY%&rM5S^ZC+&Xp4mGiezhMvN@x>L>pqFootvJ%XLiy3V%sm ziC#RNE zue{gwW)vztD&r25 zUG#d*tEFv4!J1z(@YSXl3f;+$jvb7-9jLI%SzcmM>xBaf= zvE`huDJAtMrH1TpiDHUNMtq8_@4@_8BfmZr$~BNPMRzZEX9yauE?uQ`G+fq_zrzO! z(1>RvtE0Q_@g~i5PAHC^ik$s>mOZMO)w#GWT$sLXQ>4dyV2EM!hbcwH!lS_vcQP zzB`d-hm1Q*@U&%>8MNPAaR`j=;x*bQwra^U+{*S z+#daDl=HFUxvB5vA7yXbP$f<@b}9D!Xte#Fb@#db5jvD*ny4{!D7G%U!6n?qhSOnK zWGPtw(FZwrQ96MWs?3qSaeC}z}YRiiHU~0&` zQ{i^KUx5eto-(GZ$UR7{c1V(*ct%A8v!XXnr_U>aM!V~fp8~N>itDl+WW?T}g|2P4otd|}(o@NMmQSMD0c7 zTk^#h|8=-UEK)+v4*iJH)JFjL{s?t0Q% z=rHwv*n6+ICYtwsco7v95flLhDHcRQKn3X#Y#<=LcNFO*^iCG=K~$P3NH0>Q_g*3( zAiYU1p?4A>KuAb=SAYMb=iohjj=nkD{bYA$?wP&YT=zAF6!H&}=ZxFL2J=|}Sovp3 zos-np?-@-Xn4ml;;dYQ7kE6Ym%!0rKH$`oH|2D*E3cD#f%yI)pQp*8vQUX-El z>TLUoAAxefm03Uk{+In{f%p1q#JNVe$Oa|Q=frm%6C;%5uet>M^gQ@w#8#hfaQxRkTnyPpIE#Bqn_lP$3Wh9Ll-FNmovx&QZZ<|SW2 zQs*Y)7{E*2Uj)0J^!E))nUeiA^Me{UskHdsPC3Gg-T!t>Kwr;oR+n>jLR9$SL%m72 zsScJu`P~V@i%h=#jfcLGQuXfL?Y^U_NU?WOJ~|LV^1!*>>& zVyEIVRI$#j?1Rh_u4Ljr^HJ}dL-6y*gYyrK-dwY&2}76t5~Hn858ie&G7<=_e-fKs zf79e@)G4Zq!58(r3@q2u&6N1}MY1w06~@M?3V@1 zW9L^sv_Aqzi!(wDP1ohQNhIeMD#p~`2F&6{iU=EDB&Q@iDGOiuz&;85(K1g8@!Qu) z7byNYU;Zw%sWPjQ&vb3N65mu$!57tw6iC8-YN2rSoo>xe7pH^W=H2Lh;{3tbAq6e3 z`>3Pam=_%#q9tsUNhQH|uOK*>%1N=h)hbatY`T=CS zwW`cUbCAaiU^CheN-W77CHe{`>!Z`5F^Q~iNs4T5ubH0s<-SGg2MI5X|2D4QyC*2K zqhV(yV0vfCSHjS=fih_>v|Mx+xMKNgxC8D@TppXMudA=0#KHZEE9E&c^|t`Caf`2h z8xb8QSIqbP8D8nJvhZd<)+R6XoZ1kmg~WrNZikr)oLPP6=m$%ys$LTYQ%g7 zVB-F+??i|Z^(Ue0kxhqtBd+hzl;*_hQ_!f?E(R_AT%kuSeMuF=zQu05YoHaobbDy` zJEZtyxWjTfRO5}3W zcn!ogSX(;W*nquYMtBj48>Ygd18g>lcW zcb$NiBkrfYcIltZz6rCe&xe zIZtLwlXL(Vt19<9gefF0k8aHLgyx+k$*O55MeI+PHj&efLBGg>)flIb(^!Wh*PXJ^4$oXP>$u7Mk=oN?HVH^&Z>~MyyM<- zGlVwyX4azs-6~`qXoXvG$8a>9WatwkDMi{(fpY_#7aI19S&~ODZzeD0WNXn~VZ8Nl zakEVOgP!o2k0hABv7rUz?#boHqhx-w0q5}OzM_;q)Qry)+krT@ZVQw*q9ecF12a>7 z9J>h{9q=52J#uIXc<}g&>TQh=diPkvnZe$${@d56P6iBuysoW9e$Y~90zDetHfe_5 zvU-k`AsaBc%898{do81}sg2uNT%DuY4v=N~9wU9M z8{$h(b@?L+Ie=d%)degiCD5;r(H6dJIX zOf%&Y+!BRWX1UQQNuuBgh&qQ6|;e1OfJ9w{` zh&2wm!1Px38)-h~sZ0~ghpfEvMLVHyhZg_}MOk9Cqj*`751835Om4eXLg_Pq*YvX* z6NGwibxf6Z;&<^xO~&{UwibQ(HpF)iKO-t~0rJfQK3c1469H^Q^p)^ z_nAT9yVHlIK@Za~p!A(<>NI63AsTWkzS|G}927l{=Ga%gS3?%<2aUh-+dT(sTX?p;p>;K%*Y{iY+q zq@BPRS3C14XYjEDwt?3Qa@XwN_ljdOls1MxY-BI4baWY?2kt+-vEIgmtiS%HAkXmr z3{+co<>rmYKCeYMPCkz7`4cLY-Z+!tFGP7^4XL&E_b;x5ZKgs137=bl+F2h{Dh8#F zw;Ax0_u%5dj~DNswb*Mabw_7HHp%?OEt$mvK|gYE|k3a!!xAAGeLZ7iNT$TR?}YJ<>Mi7u(~seWhHbrL*esk8XL|OSD(b>e{MC0?vy;S6VYEK7G~y0OGxz0FSE)7oQsaeEM<;!Y zD@Fd!-1Zr8$N$ucz(x`?5CA6T{o*{&os*q?J0!^WxEBB@t3l0~dB0M>rbHzVi&Zu|O7l&*^}qj%I`tI1yFNiD^o4SqE~AInko)2xO_Sl*H#x}4SnAFJRjw|wqO$O0iHhCILXDJ*tvdxt&7J5G$$Z$OYJTRG4jX=&Cee@ z))9NCjB(w{&=#|7%h{!r{jpPRyIy|2F<#HfIgt@t38mQO1pa`ft*VYN#6mJX%Ex=} z=W0r-$N_#e#cwTTQ;=Px#45xx{_X|T|PxePm;0Az2R&EzDnwk=C8f>}Ft zx<%_FCFq06lU!M^>K~7(5Z{msM6*>A_KEu}Imr9#>m3{o$2eVM;_!8Oj%i*cs6^uI zt=t)=@{gXOl&QrwEE)9E$e&ywLvM)wI_16QAPAOPkFxcvCW(1(RM-f<^!8{m2idSW zQ^ocB1&coDSbk_W|GC(+PKgX3tUIE(Z!`bM%aOYlr*r%aGAq%aN3wDFMH#(H`&r-O zmk7rp>~OYj43!kNN0X7mcc;%zKE-dmDgKWz)c=_@B7?7NW={VYi^-Fb6O{(nzv)-1 zY6Vj=e-|)^B<&sBbc+-kKg1>LW-BKX7L)`Vi3_2EDj+_~=1a;IS1dP=heHZ4)S;76 z(+7uHOps7|c?KI;1TpHOv}qfMs4%%gdU3KYB`(%98iKsGh;uez+xd!{$dh5BCDE;F<>}yIo+Jz+WH0qaO<7y%Ed*|XAAWml}>T~ zEOWQT-2Ji84gS7^P1FLBR$6ZB=6~(+_Z=Fy zd*@;Il?Wq>0BI&?-q8EmE4x*n2-u!lTsD>Q(wIt6mkm_2RXHZF5*?@WL#v)G?t0y0 z4u7Xqy$m-h_gT(+v?;Q}ba|=JkUWt{A@+yTxc8JoChF| zzNsn;(gJ;U82;d{abgyc9zoAjnV&isC3N%HC7n78hv!<7IelEnMGfnBJBEOkpE7&FRfwCHlDM-JK@`hx2K=Kf{ zvCLh0R@P?z9XBV~xbtJ}da~;iUo4yoAXk5$OqM>}&N{`Nl{Ixvr%{^RATUwCwMY|` z%YRHk$Fv#pZe*WAPgB2tr}WW|F`zI}$B(da6M3vqeY+3(rXKubuwTCr*eQgfIJGYw z%dro-j7c=faz&5WjK|UIu*f5?Qt~HHDTaRByc7_V+Is|c@LO??8gT-^t&h<Y#oIMk^{|b^AWnL`f<9fQ_euiO`7*maW+frvvde{6P&2yFM`dTLX6f2^92H2 zf&Y}TE@%3ce<-#+CmTu25nt|T_$GFkQWsh3q~NUJJ#t!Bz4;vz*79Y|!SpOY=zo@R&)u4amTcT?M(O0-a)xXTwg>oqzL1(YxB17*2#=L1{G z!mcBuA7`?GkxHs(U5bj`eChL_TYBwudq51nR5x|B_ns{9!mL@%#n#qV?pPD!=U_32 z-UXpugUo`886n5Rfy5vi_*z?(!O9HbE zuXl$I+M-^Fv7+1$IM2q$%I9I|!H@FYv}62!o(nZo;K49OEYspE9VBt+VSg2Gr`ges z{6OAC-^@(2)@%n0Zi^^mf%6eM(T+0)TCBO^z@5pR<@zt}v-_d*Bznh~7<(vNbSo{I z`7MT0AXc~717jAL)rdpp=3Oj78}5Gm9CTnO;z-xASo&gO^uV-1au+0T%3auYHS4zD z-tMT$MFY;Id$8D24$AbWyHO_lWEy>_YG2zUVRNQhOP5MLB%V`gX!^2 z`IJ%00Esmx9`e9HfOoM2Y?iTzjOF63{QlVGV9yGwpEtQTR~uoT{^~Y^+1#8j8z}8c z@94HBz6EcCzzeOw+Z{3$Wks`?&0;$pqJuWBh7-l;#PiieX3Hi*@d{ zV>fuD6^>!RZ&ih>`d3ji*_^h&w^@pre|j2H;3$(O#Bz3W$B9y>`HvHD|E5}})>t@& zlyE&cL8Rw}#}Penpsh2-L5h$l8T6Ej8a(_i1W&Hb5}^9dPY8`I){oLPsitO#j47fJ zlP63eL=|Q4trgj6^qcbMXHcw$EW2 z3u;&{HW{<%e<11hD>XJ+&OB-%tNW&8EM?crekwswmnnLr@ASvu>U)%(kyw)iiQPe% zv3P;5T`c89eMKyP!2{6~E=G0Tux)}boz-uF{-Pecf_XZ&=Y9kn2 zC!U&5HV63>_e7VO9BJkA9BDp2R}|%s6FJ;aXGsD32Fx!w@ROlEJZ5|8txhKHL9cra z2tt42_WB34%|zW1EkbNBC{!$^1C~=b>0+5!V!y@)^WA_*Dj!+rTbo`ttUbJs-w^!@!g9pyxkK1FqC%jm#RF(j0y@J@JJbq61~hia-LiRz#O z6~B3i_VpGg;8?m-5gl;~m_EZYAM;lVHQ9%P%#reZU5ZtX2Kdh3zJhBbH@GiX9MJ^$ z2zn!3Q;izl^i$DAadn;GnO!iE~Z*e&{iHSZ<0ESy>llUXDfAP;qh4 z!MhF1*WRvn5M9)0Ep8aak zZ!%DgI-3(#gEz%iZ`H7P`AV5ISu9WMQk=&uIyj>f8(1ipfH_dGd<;bBt21?G1b3TU zov1)hHD{W+pJT8ccRzx2#7SWnYcVjHJUE2Z_C4QZIkfi~WY-0B$;dKgY<2{`_dOMj zh=MbQ6LJGH(Tk%x@36()dtV!HM_1|WkZdoNRh7=2dfPd%eVpn%|Hw1U-)*`Vw(08? z`IH{**8?{-VVhmnNwZ#0xC++pAE6!CLZQ*!8KP0XTU0k*Y&M^$I`g~Q17XS){W&T= zB_SbYI1h9!4$Mh$o&ObOMZXU25BmFhO1~NC6%v)(5IB|BbkS@bDaSc1AbRt!o{RD& zcg$~_%8Lm2kTBKc3S$Rq=w;EL6QBrj;`@XQjoY@6^{*c{Bc*JAoXtrRt5Gff;^=GV zs(sdMChNywdVdE!3dWxarOGbJm-EFwtJVcC`-v~^8VZV~t2H1A(HazKc3dzf(6KwupSt;u!*{Q;Ur_J^x`8px{(v^t%>@Sv z0=J^~=Us1b=fjRx*)t+ApA#FV9w4+?WG&8pN}0)gzUeQ)>AfJ%V(dp&jbM}7m{-Mm zR8Y0^?ZKMhPDP85M!wUGX2g#AOW;$w-?_oRTqRg?6{}EbJS<}qv6=FpE5Qm%z>jwQ zLuQ2?6ka_qAYA(4)i(NEH5HV#E(ROifjM70w>EjGqGTuUTS#@U!UZBO#&6_aK<3i# zE#_n&dhyL^R~63R$7>gHO;v76Vwb|(Zdl+$vyEK!RyYv%0JUOvx9;-D8K*<_ZCA~= zzApe)t=NZY-{8v1eyD7+N`Fy z$5DTvVZb?Ufs)Jp1`nsuL7}*!&M>Kde`BT`iwGBTk>HTr%Z5=Lh@@)L!q2yVmZKV| zEk~)y7QgH3cUPL9e;?f5q@32iDyw1ZF-(&1kTF9+0e9g3R~p<^m-d}61W%jfKYEN5 z^ZBYhLy!HCb>vmqo%&YL9eTvTW0<+naM@D(;N0n9R|9l8ynDJwnk)u+!e?&l7XPO1 z%tgU1O|?&dN|?CMBU$dKBg=KSbAc1ssAkU~d})H8PE&1#sWnv{6fKYfGh6H)x4L~PiBf)D`XJQ@EPqQvJhKl)^Kbh2w{Vw_S!dZxH7- zBvOWWv$i`!Opf-)P3i1!LX|g>PfI4Qhme+rXyucI*36D6z|LY+bj(!4^YYvJsACzk zze%M_)W&nj@p`OSayJQ_i}yEg?-|GOOMd(H`BIFA!Sk%)l+Pm9x9=9JblV8#W~N7f zVRlf7K6BmR4c)7_=CBD}{0uJb%RTY0u838?)cyzND`Y=(zjP#i^`L2X?4Z{1ZzCyG zAlWmRm;*xaFVtOOVc{D$Zamz%dW43Nx}n)P9k>%25vp|lg^FTWXlR5QHAL!AH?Xr- z^Yh#z+YyKH8imF7kg-DTtk)B3PEa&JRK3f1bd)nNuvXUjh)vjTrpPtck*dSf5mjgN zmUr14!t2hVihEL1_lix+U%s%m){_Oj=8zAwiWykhW3|fFH&uA{w_KYoboc8CU3^eQ zeh-K7q;S#K%WNKJ5T_uXxvrBgK8X)4E|^?pxO9p2>QzR=A|pTi-r2Le%dgGT)1N$T z&0x&uoZT4b@E54}*kQ*_QwCb;XFyEyQ-bNxX69jdKF_mjA9+tgkV&Uc9L&sMsj{A) z^{>D&AW#t+yo7*E>65Iy5xdbm%^b&>x=LHE!ssLhU6E3aHptXs6)xVd=gGp}y(R7smUyM*WFEH=#5_h20y&cTUW?Tgjg zt*UHGa)5i@x))f$a?tg zRn&v!E*{+?gAB{<0E0()y1CKOY9bO3?IRa=c6NSTkyhi3R(PrSGE9(#k?pFOxUlf8 zTRVbM4|zqtJ&8%6GpGR9e;@oV??)0hHXT`gHVZwcy*K%vo}Rrwm&YfFY@i%e&mOOZ znxl^WR;pp72HV~`_uSmgu|m8BzQud^b|ZO-ound}XF1^nRd-yIuy}Iwb=Pg30+W1` z*4w>?*PNe)TK2Mz6l-QEy5Q&fr0O%BxDH#NoJf5z6`^J0=0yT0ALZ*ReiUS3V`pb# zXJ=5$ z_J-%(pu)tbCUGG?K1oSFS51SiuGAIfEU_v% zLb^#QR-l8^7qsv2C^Qr<(k)li@O$|aBe5H}i{Sdw9X(McVs<=c>kuiO-5TX!@W}3W z8e)cUZ~;DEVUd4R(qnsYb%Fdg1OiO0RnL-+$_2CglOAm*>I+%*Cy@?xHM5C}U+!w= z^d}vY7MSdYhlI*pT(Gp~s5wtT1?utZn>r*hY=$l;c*V(5QW^lnF1NJYTwvtYaTutv zI2M?x$4TL)v4UGu)vBo`t4ZD~xjgJsP0Ho1cDf1?=X8L;0s7GQg%b_h8QGPKdEDp< zP1W&u78575cuwl%Vy0#tPVAt-m9XEKiE@96_Ssoihd1EXV<8J@RJRcueXyxHR&0nA z;07&vyO?0bdR4FST_bj)_UGS$CXXMhcZ#$@mGrgxY@-74*onA{)GBt`H~S=@e%7?K zq%ZPn<<8V7uQIB@FzNZlwa&kKt7kkq_^auz3a`DRA_+9k6=>GGScX$ai;LIRdgHTPTwTi^3W-|1d1JYJx*S>Zy(aTbH(U{7swf{G<4?q`#~l|- z)#|&1{h9FelJ{}{#nYfb0w)-6()fj$(;>a-F!KT16nxe8QADA+tuEAwBYZ1$b# zpv68M9)q6*X`A8Uq zelcsFt`$Ni?alw(g@^eZM$tGTy?4T?Y3S-U(IJ?6N-0|iT|IeA;!%RBC>rCMBQ5f3 zHWJoHTAJbpL%;GLd$;A8jusfkeojcJdLYfm$CHy*vW9CU89zZNbvh1%@~1u}mO9Sw z?}CjhnQ~0#EtFx9A2>oWFehte><(I)2s<4yn$IRnIiTr7b%|xSxgYWKKYHZ8Jy~go z(692E4-yy3MjVp=DK$6owpmijFaiCE$El6r_5*Onw&S0eyE8&Hug6>+*~v@!t8NWG zTOnUysnzzqD@jRnTA-telL87Ba$K))gi0X!iq%;tIlodNY@GUH+SI6eY;ZOTf;Txa z{1a2Cw)%^)kIkun7!L9LfP)`LHs6XaSkWx4EL&PySUL2)P%r|kZAVlya4U)uL34zZk=7GIs&BSZctJ%SKm_b#>$q|7!r3xf0~q{^fsN?Ylk@M z==Mw+tI~Or$p*O%vcYX*);`k{)M#Jl1r}^9sqBFek7&(Hk==PyL6!-R&$r}9_$f@;pDGNo3EAZubzvfJ@C{z5%`cx?ab1toC96dZ0+;S(LrPu!YElWs+6v7 zv~ZHJw0Ci^^laz+_2%kR@8dkvnkn_?((b^_52`t(C3h-xM!FK9T@7l+UldDY!g-&q z@cvbP<<4Jyg1iE=%OZ^^-oS;=;LzQ`{id_8zFnNc!ZJ6`=AfkTQ^mK7Cu;~(Vd1Do z+(^$=C7G*_*4wCJ*&B$04peUnDK;DV)i{|t75o_}jp-zNgHKeZ2$v>5n?#uD&yBAQ zmOM>CqT|X?d-dmM2kDQhES|lv_OgHT!nzHu8*W(ZY%aIk973@AN1eikK5g zES#QR!FO;Fs3q|IivsXv@uqwjiCE8M6Yu?;8!Xc+uDE}vb89T^aK5n4*yVVNkN){S z<{NOQOUV@9>lLzlOB3P#}& zWknoqWS`Cj#y_XlqC-?oSp7Vv40fSjj>E4WhDDQrv?xK_u ziH4r>XcRtk`@|{P$2wiO)CRH4u|apn2A=!CR`suc>N@tX?)|P8ip{ZP+Oi-bV*_Rd zefxnucv3mu?d(6Y zAZPNx*G8&5f*^#)q3#=eYvi`?rYmQUe(8gpwK-9s3Vm(K&{Lw!{g{Ack96d(^mj26 zRidUoCF_jNj&YquY)uYF7OX?5<#E&N517EjWG{SU2J9H&E{A?>4cK>M3w`y*Dg95< zgx5UpQKsrh-(a;KB~)tBU+U}$;}=OPj_SQ~vOo#4WihW(VtX>AL)kd)b3C$}A27td z`ankS`Hyu+uaHKKpCUNRL3t`QqqyX~#hl`4cjvKeZTnN_fnz?YCb_Bd(=y~kP*-V` z217L-B8)OdV??GrHBS+*A9`w?KGvZ+$p*A}uk)=UcBTig5~45mEdMlnqkGH-M9=Zu z_G=X8&v9BkVYXR(EG&YmbN3uR@V&?7Axxoo&CfIp^hHLmfR7IeZJM*!9?YE=g_bte zdxfH@-2MTp*~Ch}rz-PJ_TY({gE4m61H>_+KZjg5%!=H8fIOg&+^*S5ZE#vY7cd>3 zzoNqGzRJy0@%@q=9TzlJaZ9I@1#6b$Ka|IA7Xjnl---Qf>Dg&!eo8jz^=npLeeEq;IV|x2kV7$h@FEh&1 zc(hUbKfQ9kWkUh{s{vlH1h#^#Y{FN~A`63N|N)2IXIp$>lrTg~<-{KB_C1 z6n^Oe(avoleo5`#w~+3_!CKVE5jP7<+joyBP0GkW@Y2SYj7yyDSW0 zWGHR7#_T}fcK4gJahLq~0$RXhNh-`2{;53}kNNh3KBH;P;z!Mhyu|NNu7ZY(x6~t_ zgY*u$*V({iGZ7q;cgl$?Xcw7P^PP)F+F~M!-n6cma+RIF_{t(w>>vir?>;h2@*3Rk zS0?)G*7f3_Q&3Dm)~>0BRvhOqN>;fHD`~EB6?Ajds7x}1Y8GYxi7lMW#CnU$NO*Jw z#jsuQp`8o3O{uomy!4*Zkkmt$&(cTq+J7p#FH_`Qc@ir5rMV@Xt?|}F`glfi<86GX z#zU7-4{yl;P`rYE4KHcR%Rq)Geu7VlLu|wP!y=4<4DmQkB#IW9*6t+UWt5xs^v5h3{8o&n08VKw z-8yzdyIbT|c@^SDh&EffA^;3-zcpgx+7kShOxVaQW+|GDi!s$}2)X?OE=~!V z7Mw^SaksSvo=D4l1F}(38vN!I+k)|dJF2MYI>(WrU{v3ceM@)bw9oR@WLBMUAqpgx z$Im7SQa#s>x}KIEsHLXWfV*KP z8sg!`P~}MuJs0$pQc;<&d(Ti9Jk(8XI^Gy=g&!&5s_1yz|LFz+u`^FHKHFArxg3so z!lcoQ@wB={s{MU}cX%hnGpgx#t9i&G&jSkt&-0#JLOez|s;GE)cvxEMsHmuzAYRQ! z+%UtbBPFxg|M}rgyN7)U4vS_Mn3S%C;IWqe;`mn2b}8)K0Akh6PFwT=uNIUpd3@2N zN`oZAv)^Pn{>7Z9SFglg*+5Rm@$oAg7*e>Ynpo$rXQHLmz`sXJi=}qK2I;4M`4aOb zIVP&qW|8pQ-EJ%s`ei#P_V;x1-Q%5b9mh;6pScCTGFvkJ6bpWdZ$k8be2(f(edOM? zqS+$825M)8{tq>pVVe57w)$iaODN%g#4+*52OFJ8`STMM>#@OFT7!8qc!q2my{Hnd$65MUrgdPf& zmzTdyCM9k4^sXmTr(R7IaX7z3CO{nC#RjE*o$1d*SwMcHqv00JN?$VRAR6@BC)YFH zeo34g7PLGmu!~J_XZssBp0JR8?DUyyT;x}Gzu@`Ni}>K?juV|oej;_{a}^J{mGB=OX-!p`!(Z=@F?GxB2>*VmZ%;$(VisDU;`?jQzLhFGO01Bc-|B{6 zI~-R6;r{o%38J(JqYC>rC;}WUQdZDsE3rK2(heLjtz1}5jTJPhacU-tmuIUUyL3T? zcI3__RTA6*2IFcC|MVx1Ho& zZsm_vHj9J#j*bl@lL(QjFh5+fGdv7o@td|ExkD6Eh3)=)PxEfZXVIM`&;;%XvKT)w z+nJ$edqd`sf+6N(?bQDj>?n-YuAEY`=u%kb21V}@)K@B`X-Gw zT=}~J(jtUW6^2BGSJQ#u61+d$$GeAZvAt0mL7ZZo^*&A(MR{AbpiuEUef4nUBaa@w zj1>QcVjO+__SfrgPtSVI1lSd?d$w_};v^1!E=qbz)tRq4O8XeQZS&)#$u0SdDAF2~ z)JZxV30pTsJaFGzioD%~T^S#fi##8FzF(R`{H`k>>5J_>3t|xW*IO07%%+MVwtjVR zHkc1o#+o|y{oxGlQjqpJlp^g9t4h~Sm9kF?+v(+N;II7A{HE4gPl6}I4LsLI%g2Is z&tDPSkC4RF9ix5G93op0uOR3duCW#4yY}tkO*!Jhx8rvx@9rO)#dT{fGFG@P?~PpP zy42r=cClc@wn4SM7Sb}@cEoN3j(D@GNig!+?)8N2LphbEhbsrp<|r?R9;KV9h^_f~ zPrBOm1UrJMvjq~Ni^G81?$mG&iTx@lcR)#bLPqI&x*}R?9{?gqR2SGxgUKi%A@{5rG!y~OdUygC)q`ITM{f|wY$lm@wG*Irp z8q)?H$S|QzDq8bgZ}ay}byghf+n%hjohVQkZVzYWFe&y3=Ve;xmJ1FEk&ji%)5v+1 zuhNk^dc2Td#O5+pa*PIdnrS$%AjTZt!q>n~{OZ0~scXj}d&IiiO9+NgcWrF>rz6PY z1`}6%da|8369KC-Ph_UE8_QEKwC$BRU=^_$EqIPyQDz${HY`_k@iWSV_AsB`6c*02 z*N8EoOAv++7d_?5kmMZRU8^cIsIZ>MGd@1-;PCVtgHop)zAtk!PKX=l$cqeNw%cCOk3hK|b3QF>5D4e3~z z$J8Ag8gZVUj-K`m9o^Zp_?cO$=5t)7F5y1m1{F3a{1IAOW!sw&pOZSem|2u8$uW{{ z)0m*m8yz10@jQLx$B(>hsaMVr6l3zW3XMuNf-|Ao#UE`KXwT9{p8pN(eo*M_>{R%$ zyX*WQYW@|pcXAhZ{)jnj!JSJWPJJye!hoeX6mn7{hy;=XP{x=!bzWngEJTGoJK4uBOIi_w1jv{=&lR z^cyYrmZ$?L?pb!k8|hUa&iow*h4$~w@@M~7iluVGh7#U#!Oppl=_w5zhgX|2|1n(y zV#htU`kEKXVywc}TW4u>|kWY%6`q(Co5v-(*ZtP%+gfFa41%DQ;a_)9u z;dM)O-G-G?x%(kEBP3inQwM!IgeK7|k1j}hY=8v%vw!zaW>14Vl<~LJkaG-Si6~=o zYTEzt5B!hY`*(ByYyaO8`ERfPC;$Ie-v4gxfAasgME=|B|H=QqmG{3}`=9*(Es_8B z`hW8OZ{_{(*8V5|e@o=Qz5bv4|66(gyS4wx|KAe%Z?FF+|NmCr|8C9n-#7mMuV2Mp z&|p2?0)#OabPT?faM-3RE4h3T$2~p}>~KSYj|270o<-sbOHd+?>#F5$6h7o{nqmD6 z_#^ddQ7j4+H1WY4aJWICjy!2RGexkVr^MXAq2B zxSJsOdGOxFM(z6ffL7M*>+y77mQll1-iXff4l?^|!u!rQdoh{Fee=Ac0@2muL}kIq zKAb4UA-ma~VnkZx{D1T^e{vhCNl;a_*I$Ym@6)gRN<3l3&e6`-0+PM0R+1-rEfa++ z?d+aRo(U>ty;u6Ndh*FB`gD$S9RK)e?Jp^;HNRz%_KHrY1bC`9zxCR^WzxXJ$Mh|W z`J&yE8x!H>*_6Po^KVjU4m);TkNr@b<+Q1Pj*zp2cy%tysrE@TFvrUCe5}d<0J^h+ zr2XznO}O##9&}>il}h&0KwRTO6m4v=qw*o8VHal#PR~vf980&K0Y6>_YZf4nK=$p&oMJf2 zue}lmti=uHlMnun^)q#j)8!O57?;IxY+)^V5*YZ-5YnN`Ve);b>Ma0-D`1;D(|hv>6|grghFU~!xDoCe6FJ)aQ|4j_%{x{k$&pn1V*o)jPQZY@}ag(mBa#l8GE ztLuEHyRB5FAZ`VLUwe9^2b@n5VraWLAXJRNi@kBavQMK=k|b9kan^BlzZSH-o_h=v zq>+C;$9Ak>KV|A)yT`vzWCH-V#~MB1%=!0} z%Qx1Bj7I+m>Y@TzS~5q-A)v7e04M5WM{Byo z&d(*eu6*t`dKlmN=C%Ud=B2HDo`^w|^+mQ^=DX?d6)$4a=We9YmVP(Boc})U2D|XN~a+o+i!-InpnuapMYWdOF z_!?-=3R&dXYyDK=l#M9u?$aC82d^)C-T=~;(_iYAR%>t=H2I|&KhCaDZz^f`XPLoIDrn#duIwryz2aqT~bG^hx7?)Wtr4N4S3{NaJ)pds!$AcZYOb{YWGJNGzSuV{ZPWDM?a zzhe2P^pfE*Z}PT)jy$9a`f?F}T4s36U{S|=Q&ZFww)N-w+T%Q5GvY=#%M`@5a`J3C znlPTV$OMtIeY*83TP;7<7$PYw`zQBhI|d?H`hUM86vil5HvQ41yZn3Wbn53YY)+1_9(>Byg!g$ztaQ>XQK{A5y5e0>i++ z4Aku4q#T1>?w$RyM&J{dx_qfY{^3el6!iGnD1ib!a65ZFTsLfF&jwn!pSiTJBsU%J zT6vXvF|L&2}J`(Hu+Ee?()0r32_Ox1@%Q0PC@52&CTDG zzW_R$VIt~p=j+QuD|a@iC=`RRpg;tj*OHTyr3stgR6Sr#-tGcnkft0^e7ySesqY2$ zWXV};VU^@K(!rc>J=$n$5&E(w^%$5067hsc#_)Dxdiw_yD7LfFxaq6uOhXMA+;^n*k3utGoIeX(D!3)_&B=(9SHC5rwn6rB1koqtoqyMKo96^a>!C# ztj0)sAjqjH@D#DVzF|Whcb`)Lu+7^;2S;pFe_36nJfXJsL*knA2?fx!Oex|_y-_*f zBXT^&sxOHT2r)@A8JveEX;OQja_=2aQ-Y)+(Dx_+ztSx42fb-hPw(1P-D1dMs3>5? zyh52cF>qvG*G&Xz0uGsC+Tkudxwz!)4S(c_0$zxSnY_GS6tl zSbN*ILIQscBXV&slDkuILZaP{=V()CSoV@m|GqBRv7~lEw(vugrUc9G@Ww?_bz%`I} z2A!T}##Ab85c5{iu#{Ja|5~ntacEW7Yn$Z?TZb%O_q!TK*7?ka3{lL%=bE|GWc669 zJ~e+nSt;#-A24^h?VSRT7ZP2iY~$*2O_+wi3TcZ99B>KloPIMt4QV9hTknI_rQ&ss zX3HDI2B%x0J2&1x?+p6&X7W;dll1&6Y zvp;KxOd1%IlLf5TUw>#p^BDOY-xMTUY}e6g!(}{iacJnka#_E zi7!?l?tx>#F!aeR(=Oy*m{FAX9Z2Bt85w9l=B$65cdd;W+xI zzx(S%`1BbyubXPsDUEe2!gwj@sBR2u8T6+j2Wnbft++NMbr5n}L_sd< z=O5nOIQMo1au2K})KzlIhNxZ2UPC1A6|Cy&{pJzdo-forAS{}!-9@GYHuv>dRq6Cw z{WqcMezX@Mg=tSLmcgtE;CJ=Xp#S7E#L(5hn(VpD!twu=bnWp>e{XzB^i9P#eN(w6 z-`qmJx#w1rbkjv7F{P*$qh+r15tVMDh?HAy%Vp*k<~A9YTgq*iQN-M4?z7qU`5pcC z$Nt&bInO!IInQ~X=k=WToBmnpBarEZR73p)nLJ>p5ZGL5EIEvA{z(~7t+xaUdnwZ} z0)Ya}#!byo|1X*2&+N}(9rEXiWmLu?CW!?Z!0;%(R+`U?_p`x2x;7oHE@aN3vIRG%RzJF2T0^f! z*!Sx)T|;{w6?tw`Yt4c4Z!c|ZjfXl?4TN#C@^666zgemD^p*^#YOa9W8gGu9erk1T z+Yg1zppbdz5(ONuIWjv`@Y`xi)^fhWb2w;`n<)K6-ZiP^A{dXd>FB#DJ)gmR$K0}N z&WJodu3@^w?1!L!vO^mw@E$|Lb9H{IZ=2|%kwc{q1XIHdi~0PagUgnq~Zur=)vhviKyJ+Q0_-t=86u= zk-RO9!~|63l1HT^M#Yl@yJFE^c6fh#^8l=^^5z9G2p-F2efFDNN_n3v!!{{VIhAbS zDJbLY>fp{krpgVNLwf+JSxj>{?#7QVGJ_l{2L+z@UJ}%=K2N&RcWZF4<-J)j$Cl>p z%$@672&h_QqVu_KTxow7?8WFCOc4>w6B2tREV+i`#Qww~8IC>?SLGiXHw7nK%VM)Q z26|!1Y*Wl-;!OIB6h>)qSMH|6#63UoCDwliZQ39Og?jUH$+RA-;FY1b;uR?!qdUB5 zXITZrObJSWp(!Y!Ej)&vFd$;cchgeGLj$&cvBueegGTKEB}HNP`F8!IOkmkC&!KRr81H zX5NHSsIG>SACU4;580|$hzdVcmF8}1Ta~#6A-h7TW(z683aOrJsJ~-F=N?Lvb~O8xjBMDUlB{zfOv;y zlyFkhskxe;bbK`x{tFS~RKE|?OY3DX!afk6%~<>bNh3|vc*Bkx5PLLHUo&K7L#N>k zK9OEMSFG&>uN^}uVg424|E?LZTd+tTTIl>d2FPiymK~2)Z!M?c>=B)Qbl1x4NHF1D z+S7Hq7#iygpbRE5D%|c_13M2cEcfecBC#MArlu^J2V<)jzjBiq@J7oQGMO#sNMqOg z$(Ly}eWYcE^`+?6a=Ikq>cdZI{O&x@4rJ+)9bk`t5Kv5_0;7FQO2@Pm?oV*VG5%q0 zRXexpWr4UYA07~jrvxeV=T&2>Du5Kd%9~3Tw``GED3)h!L=c{3;QqJ-c!@voY$wq_ z6$#*lB$ ze<5r)+4}R?g==}~my@1vP~LE(NKftL*1hTb{@T}i_MOUIDVDJb^UT-P@kL`N?>CDo zWX|vCVUBqRCYAh9t$35tM#v4?+}Nb5Z~JsxIaUi%7y9>ec3)O7aR|4zWSnV3ixUN> zI$UQb^!=kC@|7H}voF?e_o7|InqTx&KpWt*twSi;Y!ozTOs?hUqKGN+hPOtZ*$C6C zoDhi3rRPswCBMcquVJQV*2c}3es1(1HXeO0an2;&&J&>ShHJ(_ow$>|k7+~3oFY6j zWNe*e*ta=67@cS`IT6ZG0iEPN5kjju2}8U(X&oIXn1VDE`cW!-Aa2)wIF$033SR>> znrQ$uM-Jl3OQb>=K{nyBHN70FW>KP0!r|hPWdsS3Z*}(sN0$p-LFVrtapQlAw`&{D*WSfw`5^d;Rj6q1nobqrTRD zr9xQ|Hzt)``+z-01satydi~JTP%KQoUBs<}wxRAx7U!%y$diCR#gYO?DMYx&_b<29 zJz=+5vz_&RfDA7-_*y0K|Bp&fS_pZ8#2VPv=`xGPL3CTAG%VLollZ6qtyvR+G>NYOTNF# z2+rl+{k#j5$na&zX#t&ZOVADcLD36$*}CvTRb+xTvSgOkgC+zlMi~Oe;u;>|GEoN- zjGEDs{3^7<5KZ zc9nB2vfgcEU*0wv(x0(RPWJ60l($!pRi6GP_k&s!CZd!!axvKBrO|c%qr<96*nynU zbMh9#mnAT_8lwuxmkLwmV)~$gMsO-rv~w^)sUi{o9X>4XadW9-w_dHpFdR-=ZA(Bj9HH>`Xhs*lu1C9Ie2pdT@^|<%ZZ?>||OqmPlCw6yRTg^4A&>;MtO04wivs|aExy2cB+27xTp|36`{r-_T{ z^vmr87g0nZ(r>`t5m|l)91DY67a1vL!Rh!?>>lunNH42)AEKK%BRF9scYi_>AvzeA zyc|5GDW(s}e~?m?2EbZMeIp*Tx%6dXJ7@Lu#P@x=2AROF*ZEaUf3AAZK{RDy%`HJ@ z!$4`i5Na5w7KvkLW2B@zVUaW~Tcg5DcSBCD|N3v46?FwTxoJ_)&Uz15Y)}H*_`{A^ zDUd_4{2;yM$a?Usz(fGr-R^UseHlI(sM{-gMH1ol8cgZWmq@SqoA@C$tsVUwagg;8 zy=>G8t$xZc8g253+MDuPfeX!oS2&U`r#ghxb1jJmX7D(Fvg`hVsOFjeUsd8F2#cGq zmtN*K(*{FfzV+#ptHrm4g7ULR(A{=N8q2Xx2uq3QnTp1fxlW6zPGvXR2iEHg1D2af zPr>Qbr3z)_iTP*l=XC0k)z78HxLc@7ff*7JS2AJ7- zR-X&MD^-Fb$Ba-4joHTx5>gc839_raCNik+{k#Z zg9D^0gR8@k%2k&O*9sr31d?YGcgU_Q@2RrYfsP<=R#_+Gv)?jO43J}v_$#LR^3qCg z9tI}n%p?_g7>;WH_iej?T#NO${jyl1y}N(9uAxvCxV=)={~cfm+bYu+rY0N(9Wu3NC-xJG)VpMj+R~c$!5`7>hz^=*(X}vEQ`bHqw=Q{1Cv{xM z$=Tku#1LVhpJaC3l9}13vqlEH;Y+Of>^Q#HTeIKEfjeeUXO^l{BYc;_f=1o<4*Y2l zXKnz`(;Ns_itY-;|E>CHJm?!JSL)8`R!oZc^W2S?lvIIN9{|?}#AI$s?I; z9o3-)eta&kk_@@PC7Cfmz@xh+1Fu9!45%JB;BOT0y`f*zJlcWSHv2bieREr$j?!bT zN;azaA5lg(+vxw(@shn0M4Fa`jZKE~t90$1v7OT|*9-uB9^Cip`nou?dCS7{^4r`04HkiE&qBn z>x40w9h_%Yr{Y75H%YCpZ(;4kif&HLfp7FH_7x-FbQ!Vlu_BL-0oZ3z$1YLJ5d6Lb z)3Up)0YezG@Uy_S=-2s(UhS=j+ef!`thiqadR09l`6AwQc@;WyWX#j$;*J}XU&ng2 zK~BnvHF6Q+=SgIr?I0V&m4iiAU6N;>qF4ZaIXN$*^VfL zjw|1pjOtW=-K(AYx0(MYi$7VV?c&hSNR4ruJ@{Kl+!#9B1F8EnJtvUdoNVfL|68}F z`1ak5CF`c2*O}Yfc#Z0+(dL|Y)u$J-SI7rB>5AL^`O(_s^)+ F{{WgM9N7Q> delta 38136 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

B#9j{yp`HGxH92INL$Ro&vA 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 Qn-8Vz{PX$?sd3%^0RDdj0ssI2