From d84a993739c0d727593d1c0174369b49a5b418d2 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 20 Nov 2024 18:14:26 -0500 Subject: [PATCH] font loading update --- .../Shaders/ui/font/bitmapchar/bitmapchar.fs | 3 +- buildNumber.properties | 4 +- docs/src/progress/renderertodo.md | 2 + pom.xml | 4 +- .../mainmenu/MenuGeneratorsTitleMenu.java | 18 +- .../electrosphere/renderer/RenderUtils.java | 12 +- .../renderer/texture/Texture.java | 38 ++++ .../renderer/ui/elements/BitmapCharacter.java | 35 ++-- .../renderer/ui/elements/Button.java | 23 +++ .../renderer/ui/elements/Label.java | 24 ++- .../renderer/ui/elements/StringCarousel.java | 6 +- .../renderer/ui/elements/TextInput.java | 4 +- .../electrosphere/renderer/ui/font/Font.java | 44 ++++- .../renderer/ui/font/FontManager.java | 34 ++-- .../renderer/ui/font/FontUtils.java | 168 ++++++++++++++++++ .../java/electrosphere/util/FileUtils.java | 23 +++ .../ui/elements/BitmapCharacterTests.java | 2 +- .../java/renderer/ui/elements/bitmapchar1.png | Bin 10788 -> 10688 bytes test/java/renderer/ui/elements/button1.png | Bin 11245 -> 11174 bytes test/java/renderer/ui/elements/label1.png | Bin 11765 -> 11544 bytes .../renderer/ui/elements/stringcarousel1.png | Bin 10959 -> 10823 bytes test/java/renderer/ui/elements/textbox1.png | Bin 11405 -> 11215 bytes test/java/renderer/ui/elements/textinput1.png | Bin 11401 -> 11281 bytes test/java/renderer/ui/elements/word1.png | Bin 11976 -> 11768 bytes .../renderer/ui/test_Screencapture_Match.png | Bin 31264 -> 71622 bytes 25 files changed, 390 insertions(+), 54 deletions(-) diff --git a/assets/Shaders/ui/font/bitmapchar/bitmapchar.fs b/assets/Shaders/ui/font/bitmapchar/bitmapchar.fs index 9b1948c3..d44a0a6c 100644 --- a/assets/Shaders/ui/font/bitmapchar/bitmapchar.fs +++ b/assets/Shaders/ui/font/bitmapchar/bitmapchar.fs @@ -14,5 +14,6 @@ void main(){ textColorModifier.y = 1; textColorModifier.z = 1; } - FragColor = texture(screenTexture, TexCoords) * vec4(textColorModifier.xyz, 1.0); + vec4 sample = texture(screenTexture, TexCoords); + FragColor = vec4(sample.r) * vec4(textColorModifier.xyz, 1.0); } \ No newline at end of file diff --git a/buildNumber.properties b/buildNumber.properties index 41399377..7813d687 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Wed Nov 20 13:22:48 EST 2024 -buildNumber=392 +#Wed Nov 20 16:01:40 EST 2024 +buildNumber=398 diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 2f825f71..a32883e6 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1090,6 +1090,8 @@ Fix invalid normals from transvoxel rasterizer Design storm engine icon Fix edge-polygon generation for invalid cases Add engine logo to title menu +Use STBttf for font loading/remove dependency on java.awt.fonts +Fix font height lookups in string carousel, text input, and word # TODO diff --git a/pom.xml b/pom.xml index 716ff5ec..d5d223f6 100644 --- a/pom.xml +++ b/pom.xml @@ -7,8 +7,8 @@ jar UTF-8 - 21 - 21 + 17 + 17 3.3.3 1.9.19 1.5.7 diff --git a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java index 959ed6c7..404e90ac 100644 --- a/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java +++ b/src/main/java/electrosphere/client/ui/menu/mainmenu/MenuGeneratorsTitleMenu.java @@ -43,31 +43,31 @@ public class MenuGeneratorsTitleMenu { //label (title) - Label titleLabel = Label.createLabel("ORPG"); + Label titleLabel = Label.createLabel("ORPG",3.0f); optionPanel.addChild(titleLabel); //button (multiplayer) - optionPanel.addChild(Button.createButtonCentered("Singleplayer", () -> { + optionPanel.addChild(Button.createButtonCentered("Singleplayer", 2.0f, () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createWorldSelectMenu()); }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (multiplayer) - optionPanel.addChild(Button.createButtonCentered("Multiplayer", () -> { + optionPanel.addChild(Button.createButtonCentered("Multiplayer", 2.0f, () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createMultiplayerMenu()); }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (static level) - optionPanel.addChild(Button.createButtonCentered("Level Editor", () -> { + optionPanel.addChild(Button.createButtonCentered("Level Editor", 2.0f, () -> { WindowUtils.replaceMainMenuContents(MenuGeneratorsLevelEditor.createLevelEditorTopMenu()); }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (options) - optionPanel.addChild(Button.createButtonCentered("Options", () -> { + optionPanel.addChild(Button.createButtonCentered("Options", 2.0f, () -> { WindowUtils.replaceMainMenuContents(MenuGenerators.createOptionsMainMenu()); }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (sp debug) - optionPanel.addChild(Button.createButtonCentered("Debug SP Quickstart", () -> { + optionPanel.addChild(Button.createButtonCentered("Debug SP Quickstart", 2.0f, () -> { LoadingThread loadingThread = new LoadingThread(LoadingThreadType.DEBUG_RANDOM_SP_WORLD); Globals.RUN_CLIENT = true; Globals.RUN_SERVER = true; @@ -75,7 +75,7 @@ public class MenuGeneratorsTitleMenu { }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (sp debug) - optionPanel.addChild(Button.createButtonCentered("Load Test Generation Realm", () -> { + optionPanel.addChild(Button.createButtonCentered("Load Test Generation Realm", 2.0f, () -> { LoadingThread loadingThread = new LoadingThread(LoadingThreadType.CHUNK_GENERATION_REALM); Globals.RUN_CLIENT = true; Globals.RUN_SERVER = true; @@ -83,12 +83,12 @@ public class MenuGeneratorsTitleMenu { }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (ui testing) - optionPanel.addChild(Button.createButtonCentered("UI Testing", () -> { + optionPanel.addChild(Button.createButtonCentered("UI Testing", 2.0f, () -> { WindowUtils.replaceMainMenuContents(MenuGeneratorsUITesting.createUITestMenu()); }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); //button (Viewport Test) - optionPanel.addChild(Button.createButtonCentered("Viewport Test", () -> { + optionPanel.addChild(Button.createButtonCentered("Viewport Test", 2.0f, () -> { Globals.threadManager.start(new LoadingThread(LoadingThreadType.LOAD_VIEWPORT)); }).setOnClickAudio(AssetDataStrings.UI_TONE_BUTTON_TITLE)); diff --git a/src/main/java/electrosphere/renderer/RenderUtils.java b/src/main/java/electrosphere/renderer/RenderUtils.java index 3823f00f..3bd3a836 100644 --- a/src/main/java/electrosphere/renderer/RenderUtils.java +++ b/src/main/java/electrosphere/renderer/RenderUtils.java @@ -677,22 +677,22 @@ public class RenderUtils { //texture coords FloatBuffer textureArrayBufferData = BufferUtils.createFloatBuffer(12); textureArrayBufferData.put(0); - textureArrayBufferData.put(0); - - textureArrayBufferData.put(0); - textureArrayBufferData.put(1); - - textureArrayBufferData.put(1); textureArrayBufferData.put(1); textureArrayBufferData.put(0); textureArrayBufferData.put(0); textureArrayBufferData.put(1); + textureArrayBufferData.put(0); + + textureArrayBufferData.put(0); textureArrayBufferData.put(1); textureArrayBufferData.put(1); textureArrayBufferData.put(0); + + textureArrayBufferData.put(1); + textureArrayBufferData.put(1); textureArrayBufferData.flip(); diff --git a/src/main/java/electrosphere/renderer/texture/Texture.java b/src/main/java/electrosphere/renderer/texture/Texture.java index fc53d6ad..bc37eee3 100644 --- a/src/main/java/electrosphere/renderer/texture/Texture.java +++ b/src/main/java/electrosphere/renderer/texture/Texture.java @@ -275,6 +275,44 @@ public class Texture { } } } + + /** + * Generates a texture based on a buffer (for use passing data to gpu) + * @param openGlState The OpenGL state + * @param buffer The buffer of data + * @param width the 'width' of the 'texture' + * @param height the 'height' of the 'texture' + */ + public static Texture createBitmap(OpenGLState openGlState, ByteBuffer buffer, int width, int height){ + Texture rVal = null; + if(!Globals.HEADLESS){ + rVal = new Texture(); + //generate the texture object on gpu + rVal.texturePointer = GL40.glGenTextures(); + Globals.renderingEngine.checkError(); + //bind the new texture + openGlState.glBindTexture(GL_TEXTURE_2D, rVal.getTexturePointer()); + //how are we gonna wrap the texture?? + rVal.setWrap(openGlState, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + rVal.setWrap(openGlState, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + //disable mipmap + rVal.setMinFilter(openGlState, GL_LINEAR); + rVal.setMagFilter(openGlState, GL_LINEAR); + //call if width != height so opengl figures out how to unpack it properly + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + //GL_RED = 32bit r value + //buffer the texture information + rVal.pixelFormat = GL_RED; + rVal.datatype = GL_FLOAT; + rVal.glTexImage2D(openGlState, GL40.GL_RED, width, height, GL40.GL_RED, GL40.GL_UNSIGNED_BYTE, buffer); + //check build status + String errorMessage = RenderingEngine.getErrorInEnglish(Globals.renderingEngine.getError()); + if(errorMessage != null){ + LoggerInterface.loggerRenderer.ERROR(new IllegalStateException("Texture Constructor[from bytebuffer]: " + errorMessage)); + } + } + return rVal; + } /** * Binds the texture to unit 0 diff --git a/src/main/java/electrosphere/renderer/ui/elements/BitmapCharacter.java b/src/main/java/electrosphere/renderer/ui/elements/BitmapCharacter.java index b001a636..891174ec 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/BitmapCharacter.java +++ b/src/main/java/electrosphere/renderer/ui/elements/BitmapCharacter.java @@ -10,6 +10,7 @@ import electrosphere.renderer.model.Model; import electrosphere.renderer.ui.elementtypes.DrawableElement; import electrosphere.renderer.ui.events.Event; import electrosphere.renderer.ui.font.Font; + import org.joml.Vector3f; /** @@ -22,6 +23,8 @@ public class BitmapCharacter extends StandardElement implements DrawableElement Vector3f color = new Vector3f(1.0f); Font font; + + float fontSize = 1.0f; /** @@ -33,12 +36,13 @@ public class BitmapCharacter extends StandardElement implements DrawableElement * @param height * @param toDraw */ - public BitmapCharacter(Font font, int width, int height, char toDraw){ + public BitmapCharacter(Font font, int width, int height, float fontSize, char toDraw){ super(); setWidth(width); setHeight(height); this.text = "" + toDraw; this.font = font; + this.fontSize = fontSize; } /** @@ -52,7 +56,7 @@ public class BitmapCharacter extends StandardElement implements DrawableElement this.font = font; Vector3f discreteDims = this.font.getDimensionOfCharacterDiscrete(toDraw); setMinWidth((int)discreteDims.x); - setMinHeight((int)discreteDims.y); + setMinHeight((int)Math.max(discreteDims.y,this.font.getFontHeight())); } @@ -81,20 +85,14 @@ public class BitmapCharacter extends StandardElement implements DrawableElement framebuffer.bind(openGLState); openGLState.glViewport(framebuffer.getWidth(), framebuffer.getHeight()); float ndcX = (float)this.absoluteToFramebuffer(getAbsoluteX(),framebufferPosX)/framebuffer.getWidth(); - float ndcY = (float)this.absoluteToFramebuffer(getAbsoluteY(),framebufferPosY)/framebuffer.getHeight(); + float ndcY = (float)this.absoluteToFramebuffer(getAbsoluteYPlacement(),framebufferPosY)/framebuffer.getHeight(); float ndcWidth = (float)getWidth()/framebuffer.getWidth(); - float ndcHeight = (float)getHeight()/framebuffer.getHeight(); -// float charWidth = ndcWidth/cols; -// float charHeight = ndcHeight/rows; + float ndcHeight = (float)getHeightPlacement()/framebuffer.getHeight(); char toDraw = text.charAt(0); Vector3f characterPosition = new Vector3f(ndcX,ndcY,0); Vector3f characterDimensions = new Vector3f(ndcWidth,ndcHeight,0); Vector3f bitMapPosition = this.font.getPositionOfCharacter(toDraw); Vector3f bitMapDimension = this.font.getDimensionOfCharacter(toDraw); -// bitMapDimension.y = 1; -// System.out.println(bitMapPosition); -// System.out.println(bitMapDimension); -// System.out.println("\n\n"); //load model and try overwriting with font material Model charModel = Globals.assetManager.fetchModel(AssetDataStrings.BITMAP_CHARACTER_MODEL); Material mat = this.font.getMaterial(); @@ -109,6 +107,23 @@ public class BitmapCharacter extends StandardElement implements DrawableElement } } + /** + * Gets the absolute y to use for placement + * @return The absolute y to use for placement + */ + public int getAbsoluteYPlacement(){ + return super.getAbsoluteY() + (int)Math.ceil(this.font.getOffsetY(text.charAt(0)) * this.fontSize); + } + + + /** + * Gets the height to use for placement + * @return The height to use for placement + */ + public int getHeightPlacement(){ + return (int)(Math.ceil(super.getHeight() * this.font.getQuadScalingY(text.charAt(0)))); + } + public boolean handleEvent(Event event){ return true; } diff --git a/src/main/java/electrosphere/renderer/ui/elements/Button.java b/src/main/java/electrosphere/renderer/ui/elements/Button.java index fbf430c9..094216ec 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Button.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Button.java @@ -119,6 +119,29 @@ public class Button extends StandardContainerElement implements DrawableElement, return rVal; } + /** + * Creates a button that fires a callback when clicked + * @param text The text for the button label + * @param fontSize The size of the font for the label + * @param callback The callback + * @return The button + */ + public static Button createButtonCentered(String text, float fontSize, Runnable callback){ + Button rVal = new Button(); + Label rValLabel = Label.createLabel(text, fontSize); + rValLabel.setText(text); + rVal.addChild(rValLabel); + rVal.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ + callback.run(); + if(Globals.virtualAudioSourceManager != null && rVal.audioPathOnClick != null){ + Globals.virtualAudioSourceManager.createUI(rVal.audioPathOnClick); + } + return false; + }}); + rVal.setAlignSelf(YogaAlignment.Center); + return rVal; + } + public boolean getVisible() { return visible; } diff --git a/src/main/java/electrosphere/renderer/ui/elements/Label.java b/src/main/java/electrosphere/renderer/ui/elements/Label.java index 9ecb4da1..f3f77e16 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/Label.java +++ b/src/main/java/electrosphere/renderer/ui/elements/Label.java @@ -43,6 +43,18 @@ public class Label extends StandardContainerElement implements DrawableElement { return rVal; } + /** + * Creates a label element + * @param text the text for the label + * @param fontSize The size of the font + * @return the label element + */ + public static Label createLabel(String text, float fontSize){ + Label rVal = new Label(fontSize); + rVal.setText(text); + return rVal; + } + /** * Simplified constructor * @param fontSize the size of the font (default is 1.0f) @@ -65,13 +77,23 @@ public class Label extends StandardContainerElement implements DrawableElement { for(int i = 0; i < text.length(); i++){ char toDraw = text.charAt(i); Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw); - BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight(), toDraw); + BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight(), fontSize, toDraw); accumulatingWidth += bitMapDimension.x * fontSize; childList.add(newLetter); Yoga.YGNodeInsertChild(yogaNode, newLetter.getYogaNode(), childList.size() - 1); } Yoga.YGNodeStyleSetWidth(yogaNode, accumulatingWidth); } + + /** + * Sets the size of the font for this label + * @param fontSize The size of the font + */ + public void setFontSize(float fontSize){ + this.fontSize = fontSize; + this.setHeight((int)(font.getFontHeight() * fontSize)); + this.generateLetters(); + } public void setText(String text){ this.text = text; diff --git a/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java b/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java index 16104ebc..73003a4b 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java +++ b/src/main/java/electrosphere/renderer/ui/elements/StringCarousel.java @@ -58,7 +58,7 @@ public class StringCarousel extends StandardContainerElement implements Drawable super(); this.font = Globals.fontManager.getFont("default"); this.fontSize = fontSize; - Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.imageHeight * fontSize); + Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.getFontHeight() * fontSize); Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1); } @@ -68,7 +68,7 @@ public class StringCarousel extends StandardContainerElement implements Drawable private StringCarousel(){ super(); this.font = Globals.fontManager.getFont("default"); - Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.imageHeight * fontSize); + Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.getFontHeight() * fontSize); Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1); } @@ -120,7 +120,7 @@ public class StringCarousel extends StandardContainerElement implements Drawable for(int i = 0; i < textCurrent.length(); i++){ char toDraw = textCurrent.charAt(i); Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw); - BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight(), toDraw); + BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight(), fontSize, toDraw); accumulatingWidth += bitMapDimension.x * fontSize; addChild(newLetter); } diff --git a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java index a56e5bcf..88cf8ac3 100644 --- a/src/main/java/electrosphere/renderer/ui/elements/TextInput.java +++ b/src/main/java/electrosphere/renderer/ui/elements/TextInput.java @@ -88,7 +88,7 @@ public class TextInput extends StandardContainerElement implements DrawableEleme this.color = new Vector3f(1,1,1); setHeight((int)(font.getFontHeight() * fontSize)); Yoga.YGNodeStyleSetFlexDirection(this.yogaNode, Yoga.YGFlexDirectionRow); - Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.imageHeight * fontSize); + Yoga.YGNodeStyleSetMinHeight(this.yogaNode, font.getFontHeight() * fontSize); Yoga.YGNodeStyleSetMinWidth(this.yogaNode, 1); } @@ -100,7 +100,7 @@ public class TextInput extends StandardContainerElement implements DrawableEleme for(int i = 0; i < text.length(); i++){ char toDraw = text.charAt(i); Vector3f bitMapDimension = this.font.getDimensionOfCharacterDiscrete(toDraw); - BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight(), toDraw); + BitmapCharacter newLetter = new BitmapCharacter(this.font,(int)(bitMapDimension.x * fontSize), this.getHeight(), fontSize, toDraw); newLetter.setColor(color); this.addChild(newLetter); } diff --git a/src/main/java/electrosphere/renderer/ui/font/Font.java b/src/main/java/electrosphere/renderer/ui/font/Font.java index 11c66d09..9d68c631 100644 --- a/src/main/java/electrosphere/renderer/ui/font/Font.java +++ b/src/main/java/electrosphere/renderer/ui/font/Font.java @@ -2,6 +2,8 @@ package electrosphere.renderer.ui.font; import java.util.HashMap; import java.util.List; +import java.util.Map; + import org.joml.Vector3f; import electrosphere.renderer.model.Material; @@ -23,6 +25,8 @@ public class Font { HashMap positionMap = new HashMap(); //the map of character->dimension of the character in pixels HashMap dimensionMap = new HashMap(); + + Map glyphMap = new HashMap(); /** * Creates the font object @@ -53,6 +57,8 @@ public class Font { public int startY; public int width; public int height; + public int offsetY = 0; + public float quadScalingY = 1; } /** @@ -103,13 +109,45 @@ public class Font { } return dimension; } + + /** + * Gets the offset y of the character + * @param c The character + * @return The offset y + */ + public int getOffsetY(Character c){ + int rVal = 0; + if(glyphMap.containsKey(c)){ + rVal = glyphMap.get(c).offsetY; + } + return rVal; + } + + /** + * Gets the quad y scaling of the character + * @param c The character + * @return The scaling + */ + public float getQuadScalingY(Character c){ + float rVal = 1.0f; + if(glyphMap.containsKey(c)){ + rVal = glyphMap.get(c).quadScalingY; + } + return rVal; + } /** * Gets the height of the font * @return the height */ public int getFontHeight(){ - return imageHeight; + int maxHeight = 0; + for(Glyph glyph : this.glyphs){ + if(glyph.height > maxHeight){ + maxHeight = glyph.height; + } + } + return maxHeight; } @@ -129,6 +167,10 @@ public class Font { Vector3f dimension = new Vector3f(glyph.width,glyph.height,0); dimensionMap.put(charVal,dimension); } + //fill glyph map + for(Glyph glyph: glyphs){ + this.glyphMap.put(glyph.symbol.charAt(0),glyph); + } } /** diff --git a/src/main/java/electrosphere/renderer/ui/font/FontManager.java b/src/main/java/electrosphere/renderer/ui/font/FontManager.java index 1fc7f0f4..816538d6 100644 --- a/src/main/java/electrosphere/renderer/ui/font/FontManager.java +++ b/src/main/java/electrosphere/renderer/ui/font/FontManager.java @@ -34,22 +34,24 @@ public class FontManager { * Loads fonts at engine startup during the init graphics resource phase */ public void loadFonts(){ - java.awt.Font font = null; - try { - font = java.awt.Font.createFont(java.awt.Font.TRUETYPE_FONT, FileUtils.getAssetFileAsStream("Fonts/Tuffy_Bold.ttf")); - font = font.deriveFont(24f); - } catch (FontFormatException e) { - LoggerInterface.loggerEngine.ERROR("Failed to load a font!", e); - } catch (IOException e) { - LoggerInterface.loggerEngine.ERROR("Failed to load a font!", e); - } - if(font==null){ - font = new java.awt.Font(java.awt.Font.MONOSPACED, java.awt.Font.PLAIN, 16); - } - if(font!=null){ - defaultFont = FontUtils.loadFont(Globals.renderingEngine.getOpenGLState(), font, true); - fontMap.put("default",defaultFont); - } + // java.awt.Font font = null; + // try { + // font = java.awt.Font.createFont(java.awt.Font.TRUETYPE_FONT, FileUtils.getAssetFileAsStream("Fonts/Tuffy_Bold.ttf")); + // font = font.deriveFont(24f); + // } catch (FontFormatException e) { + // LoggerInterface.loggerEngine.ERROR("Failed to load a font!", e); + // } catch (IOException e) { + // LoggerInterface.loggerEngine.ERROR("Failed to load a font!", e); + // } + // if(font==null){ + // font = new java.awt.Font(java.awt.Font.MONOSPACED, java.awt.Font.PLAIN, 16); + // } + // if(font != null){ + // defaultFont = FontUtils.loadFont(Globals.renderingEngine.getOpenGLState(), font, true); + // fontMap.put("default",defaultFont); + // } + defaultFont = FontUtils.loadTTF(Globals.renderingEngine.getOpenGLState(), "Fonts/Tuffy_Bold.ttf"); + fontMap.put("default",defaultFont); } } diff --git a/src/main/java/electrosphere/renderer/ui/font/FontUtils.java b/src/main/java/electrosphere/renderer/ui/font/FontUtils.java index ad207027..9f0563f7 100644 --- a/src/main/java/electrosphere/renderer/ui/font/FontUtils.java +++ b/src/main/java/electrosphere/renderer/ui/font/FontUtils.java @@ -1,10 +1,24 @@ package electrosphere.renderer.ui.font; +import electrosphere.logger.LoggerInterface; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.model.Material; import electrosphere.renderer.texture.Texture; +import electrosphere.util.FileUtils; + +import org.lwjgl.BufferUtils; +import org.lwjgl.stb.STBTTAlignedQuad; +import org.lwjgl.stb.STBTTFontinfo; +import org.lwjgl.stb.STBTTPackContext; +import org.lwjgl.stb.STBTTPackedchar; +import org.lwjgl.stb.STBTruetype; +import org.lwjgl.system.MemoryStack; import java.awt.image.BufferedImage; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; import java.awt.RenderingHints; import java.awt.FontMetrics; import java.awt.Graphics2D; @@ -17,6 +31,29 @@ import java.util.List; */ public class FontUtils { + public static final int TTF_CHAR_WIDTH = 32; + public static final int TTF_CHAR_HEIGHT = 24; + static final char FIRST_CHAR_TO_BAKE = 32; + static final char LAST_CHAR_TO_BAKE = 127; + static final int CHAR_COUNT = LAST_CHAR_TO_BAKE - FIRST_CHAR_TO_BAKE; + static final int TTF_BITMAP_WIDTH = 512; + static final int TTF_BITMAP_HEIGHT = 512; + static final int SPACE_WIDTH = 8; + + /** + * Manual offset to align them + */ + static final int MANUAL_OFFSET = -2; + + /** + * The factor to adjust the descent by. Just intuiting this from how the data looks, not guaranteed to be correct + */ + static final int DESCENT_DIVISOR = 100; + + static float[] scale = new float[]{ + TTF_CHAR_HEIGHT, + }; + /** * Renders a single character to a buffered image @@ -157,5 +194,136 @@ public class FontUtils { return rVal; } + /** + * Loads the TTF font + * @param openGLState The opengl state + * @param path The path to the ttf font file + * @return The font if it loaded successfully, null otherwise + */ + protected static Font loadTTF(OpenGLState openGLState, String path){ + + //used for cosntructing the font object to return + List glyphs = new LinkedList(); + Material uiMat = new Material(); + + //read the file + ByteBuffer fileContent = null; + try { + fileContent = FileUtils.getAssetFileAsByteBuffer(path); + } catch (IOException e) { + LoggerInterface.loggerFileIO.ERROR("Failed to read font file", e); + } + if(fileContent == null){ + return null; + } + + //load info about the file + STBTTFontinfo info = STBTTFontinfo.create(); + if(!STBTruetype.stbtt_InitFont(info, fileContent)){ + throw new Error("Failed to init font info!"); + } + + int descent = 0; + try(MemoryStack stack = MemoryStack.stackPush()){ + IntBuffer ascentBuff = stack.mallocInt(1); + IntBuffer descentBuff = stack.mallocInt(1); + IntBuffer lineGapBuff = stack.mallocInt(1); + + //get data on the font + STBTruetype.stbtt_GetFontVMetrics(info, ascentBuff, descentBuff, lineGapBuff); + + // int ascent = ascentBuff.get(0); + descent = descentBuff.get(0); + // int lineGap = lineGapBuff.get(0); + } + + try(STBTTPackContext packContext = STBTTPackContext.malloc()){ + + //get char data + STBTTPackedchar.Buffer charData = STBTTPackedchar.malloc(6 * 128); + ByteBuffer bakedTextureData = BufferUtils.createByteBuffer(TTF_BITMAP_WIDTH * TTF_BITMAP_HEIGHT); + STBTruetype.stbtt_PackBegin(packContext, bakedTextureData, TTF_BITMAP_WIDTH, TTF_BITMAP_HEIGHT, 0, 1); + + //make image + for(int i = 0; i < scale.length; i++){ + int p = (i * 3 + 0) * CHAR_COUNT + FIRST_CHAR_TO_BAKE; + charData.limit(p + 95); + charData.position(p); + STBTruetype.stbtt_PackSetOversampling(packContext, 1, 1); + STBTruetype.stbtt_PackFontRange(packContext, fileContent, 0, scale[i], FIRST_CHAR_TO_BAKE, charData); + + p = (i * 3 + 1) * CHAR_COUNT + FIRST_CHAR_TO_BAKE; + charData.limit(p + 95); + charData.position(p); + STBTruetype.stbtt_PackSetOversampling(packContext, 2, 2); + STBTruetype.stbtt_PackFontRange(packContext, fileContent, 0, scale[i], FIRST_CHAR_TO_BAKE, charData); + + p = (i * 3 + 2) * CHAR_COUNT + FIRST_CHAR_TO_BAKE; + charData.limit(p + 95); + charData.position(p); + STBTruetype.stbtt_PackSetOversampling(packContext, 3, 1); + STBTruetype.stbtt_PackFontRange(packContext, fileContent, 0, scale[i], FIRST_CHAR_TO_BAKE, charData); + } + charData.clear(); + STBTruetype.stbtt_PackEnd(packContext); + + //create the bitmap image off of the raw texture data + Texture texture = Texture.createBitmap(openGLState, bakedTextureData, TTF_BITMAP_WIDTH, TTF_BITMAP_HEIGHT); + uiMat.setTexturePointer(texture.getTexturePointer()); + + //parse the glyphs + try(MemoryStack stack = MemoryStack.stackPush()){ + STBTTAlignedQuad quad = STBTTAlignedQuad.malloc(stack); + FloatBuffer xPos = stack.floats(0.0f); + FloatBuffer yPos = stack.floats(0.0f); + for (int i = FIRST_CHAR_TO_BAKE; i < LAST_CHAR_TO_BAKE; i++) { + xPos.put(0,0); + yPos.put(0,0); + if (i == 127) { + //skip del character command + continue; + } + STBTruetype.stbtt_GetPackedQuad(charData, TTF_BITMAP_WIDTH, TTF_BITMAP_HEIGHT, i, xPos, yPos, quad, false); + // float charX = xPos.get(0); + // float charY = yPos.get(0); + + // float x0 = quad.x0(); + // float x1 = quad.x1(); + // float y0 = quad.y0(); + // float y1 = quad.y1(); + // float s0 = quad.s0(); + // float s1 = quad.s1(); + // float t0 = quad.t0(); + // float t1 = quad.t1(); + + + //create glyph and push it into the array + Font.Glyph glyph = new Font.Glyph(); + glyph.width = (int)((quad.s1() - quad.s0()) * TTF_BITMAP_WIDTH); + glyph.height = (int)Math.ceil((quad.t1() - quad.t0()) * TTF_BITMAP_HEIGHT); + glyph.startX = (int)(quad.s0() * TTF_BITMAP_WIDTH); + glyph.startY = (int)Math.ceil((quad.t0() * TTF_BITMAP_HEIGHT)); + glyph.offsetY = (int)(TTF_CHAR_HEIGHT + quad.y0()) + (descent / DESCENT_DIVISOR) + MANUAL_OFFSET; + glyph.quadScalingY = (quad.y1() - quad.y0()) / (float)TTF_CHAR_HEIGHT; + glyph.symbol = (char)i + ""; + if(i == 32){ + glyph.width = SPACE_WIDTH; + } + glyphs.add(glyph); + + // if(i == 110 || i == 100 || i == 76 || i == 82){ + // System.out.println((char)i + ""); + // } + + } + } + } + + //construct final font object and return + Font rVal = new Font(uiMat,glyphs,TTF_BITMAP_WIDTH,TTF_BITMAP_HEIGHT); + rVal.process(); + + return rVal; + } } diff --git a/src/main/java/electrosphere/util/FileUtils.java b/src/main/java/electrosphere/util/FileUtils.java index d1bf60e0..eee6622d 100644 --- a/src/main/java/electrosphere/util/FileUtils.java +++ b/src/main/java/electrosphere/util/FileUtils.java @@ -21,6 +21,8 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.io.Serializable; +import java.nio.ByteBuffer; +import java.nio.channels.SeekableByteChannel; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -32,6 +34,8 @@ import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; +import org.lwjgl.BufferUtils; + /** * Utilities for dealing with files */ @@ -186,6 +190,25 @@ public class FileUtils { return targetFile; } + /** + * Gets an assets file as a byte buffer + * @param pathName The relative path in the assets folder + * @return The byte buffer containing the contents of the asset file + * @throws IOException Thrown if there are any io issues + */ + public static ByteBuffer getAssetFileAsByteBuffer(String pathName) throws IOException{ + String sanitizedFilePath = sanitizeFilePath(pathName); + File targetFile = new File("./assets" + sanitizedFilePath); + ByteBuffer buff = null; + try(SeekableByteChannel byteChannel = Files.newByteChannel(targetFile.toPath())){ + buff = BufferUtils.createByteBuffer((int)(byteChannel.size() + 1)); + while(byteChannel.read(buff) != -1){ + } + buff.flip(); + } + return buff; + } + /** * Gets a cache file * @param pathName The relative path in the cache folder diff --git a/src/test/java/electrosphere/renderer/ui/elements/BitmapCharacterTests.java b/src/test/java/electrosphere/renderer/ui/elements/BitmapCharacterTests.java index 00c28b13..fa3572a0 100644 --- a/src/test/java/electrosphere/renderer/ui/elements/BitmapCharacterTests.java +++ b/src/test/java/electrosphere/renderer/ui/elements/BitmapCharacterTests.java @@ -14,7 +14,7 @@ public class BitmapCharacterTests extends UITestTemplate { public void test_Create(){ //setup this.setupBlankView(); - BitmapCharacter el = new BitmapCharacter(Globals.fontManager.getFont("default"), 16, 24, 'A'); + BitmapCharacter el = new BitmapCharacter(Globals.fontManager.getFont("default"), 16, 24, 1.0f, 'A'); WindowUtils.replaceMainMenuContents(el); diff --git a/test/java/renderer/ui/elements/bitmapchar1.png b/test/java/renderer/ui/elements/bitmapchar1.png index cea8d0d59a54de44617e68b8597efb3086e61f45..1845c2dda39d04d957f76996404ea6fe71d46ffc 100644 GIT binary patch literal 10688 zcmeAS@N?(olHy`uVBq!ia0y~yU~gbxV6os}1B$%3e9)PJL9^Y{#WAEJ?##-BwBmboAUHtaVB>=Wox=PF4ht}`$#BWFGw)9R+rA{UQ&i^av@N`) z37Wc+Et5WFHW%JM`0}3r&boqwzutY_9_w|pSS&fC%^ALJ4EWi70(@iPbl}t?A`pwc24&7b$|c<;DPE|?sw?z z^|c#D;DEV>xz4iM&pRd+_zgzzI}Q)(kv=3AG)yIpO=0` z+?<}j=hv&%;e7wU)IRPtx7$_yV&ieS-+%UgzxVraqUE0}!TvwR3?MoVy!>+c=;MC- ze=mQ(-~a#kVWuC~&po_)A^rTkzpriOpvE3J`RnDQrPJfAtoFUxd;RBwX8wO)jtKkL z6!o)1gQ8&5xjS_a8rk<%zFxb%u0G!8u-5eow{6M;8-+R?n#X`E+_e zB9e~G-TC(rx4sN0*#7_6n*ZnC-`)q_)Aec#|NZ&7zW+QlBnlRt`?KSMtxlPK{JuX= zcNRb2xA*vke!Z9-A1)?(*8KhTwSM1^N8Rqn-@^jAXPleZK9f1F?Lk zA6lP&wEceF@6(UJ!y+#bk&K`gB?L1;S+j+pj2ly+j04M{VZmUg3KiO*i6uostvD|Cg_t}>M`Epyr0Na>dywTzZ)SqmJr*YmEu#$WsgmVEA~ zC!f#r`S#B1c|Lbf?#okE{G6Qn{)x$vpcRAh?TVYxnwVBz$xV-qSOE1o({3T8Sz0s;07o!H3ISu_z!`-s>=~|b=>ipIv zUVdBTzAK->5TeAE;~SyC!x|yB*iG<|c!tA@QR$|)hsQZ2#SPZUD|8dbyNl{X?&uE_ z3twrXWjoExHq+K}|3RNsZ;Djb80yC_%67!;XEhko-I1DX$l_qL*`t?aBT=U;h|Qa6 zJoyuy4B3R4U&~omy5?eC5^X;#EQ1 z|7VH=$1x2rj@GC+?-G`*~C7w>*J-b(ZBi!TuW+83xM zdpBiFe4kEPZ|tXx!2=XZs*^jYrt=k)A*u#b5mErHNFD$TiKqZD02n|PB^dzM1gQeJ zQb`p63<(tg3;+i3vQ07oz9tfp0AK(xfX{G}0Z?a1B!p)JhLEIX@j6j@RW*F0wB?=J zR#_~CAa|-7q!OemMch;s2~Aa)fD_OOphAQ?2m~Mjpa28{dFz8*03-kufItAbfK&kF z0w4jP00aW50LTSEf@hop(aIl3a)>jS3-Ey=QPzzMA(Cqddh@}yqye3zQ^xCclreXS h`soTd{hv^0%wX29Ar`{{?Z#nF9a- diff --git a/test/java/renderer/ui/elements/button1.png b/test/java/renderer/ui/elements/button1.png index c9ab7b01399d7098a1d7e19e3addd2e5af56f001..933e2fec9bcee54e57fe4fa24c42961f13b9ae3a 100644 GIT binary patch literal 11174 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 SekZ{JJa%_nH0zs`Gk*ga7L(`z diff --git a/test/java/renderer/ui/elements/label1.png b/test/java/renderer/ui/elements/label1.png index b0a8fc8a565971de2c9dc329cff2f30570b6798e..a3895c2226a821ddea9d5765434b913b6b5932dd 100644 GIT binary patch literal 11544 zcmeHN`%@D~9AAn>R5Xg6fvSXBAM{}bMM;o^)EbM5fGr)Bq96kb9YmzjJRr%XIMpIG zXc-^85-rn*MFB-nOah3Hlv0R_5_#mI0RobcL?9s~A-$0Fm$rXE+u8f&zPGb?``yoe zKA+v&ySyFI5p!oRnhgM$yLAisQvhai0GNUI^gv4nJML@(V3lGkdE;mF1dS}_o4xya z4-6mv*8B?b-v0eNZ=5PoH|rb9U}qx$iI7 zGh>F&fiu65%MF>Dx?t*HQC|B!UeIIwx4~PMMIFc8)z-84k1uceUGK%umAqgoC=$`p zI+C2S^XlidFPEc9I1YOt*%^R~u`^uJhN~MG8<2EqrR`u*zLn1y`r$k~m@T!L6piZy z#z=x~tizu>oY7O4kww*>?-nvfr?T31B{2H)yVg4&!3j=#+OjxPnDs?>jU?PMl%fR3OY!J-}p&#yjsv zuCDJJ?W+A^&YU?BH_>cw^v+Wl%nJjet>Tm&8@Q>Gxb~rW9JN|qkRcbEn>JyHHxMz` zFMqi6s^v&FYb|K78GC#Jh5BYi_~c-@j;jcseC9^X5#{j(Gd-Fd4Fk{==bd!lT{(Ag z2orz2PQkWlk%q~a6^)jc6;)GOu|HyMz3-E_WYfcIMif808NIMFB|IYHE9J@ehhf8r zoe`uXgAZ{kx^Yo!sLV}2A`_6x{IdPAnE;G@R(bTYw z&rjjx6E>r^$46`~XPIO)(jH3NdR=s4<_c32@O5T~k9_+|8W2`j>-#Yzt6t^Hu8gZ0 z(5LzAIebTF)G6#S;sSrWiP9db9&V|Z?xo4T%DSrNBU4Wp6bi*o@TiNgI~Z5oFfgIP z>(0d=GM7wIqG^DTZkrtUKP4$xs>k!ZIAVJUOD;0W1?wg!6e}}+_-p$F>MQPeDvvQx zJ~X8~hT$!u%Cp3N`GwT}v%4Bd-3=^DLxO;+O|6j@(=FPY_M}qU_|sjDIFuFa7BKNk zMP+toDaoToMZZ2uPfB`jDsAloqbXTEyxYGZJe;mq z8uARDeUC`yzCxrZ91+IS#;yfZHK+Y_$}-VF6%izevd8lbX==keYQu$rWf5Gar8~XK zuL$i_4l}@A*)KPRnNik;h5ti4g-g}$7((?r>``H9m&6MvJJRvkcZ}<%@kwMFsyfme zjezb|CayR2QY48E##0KoinWvb&+nzCtp)79GZFK)Bh*8OMoR1r%j}exoqy{IP0moi z*sZ8dms)DlTZ{O7QV5H{Q0UC)7^OT;Ky2fI5tbD?z_uF1cIhQUJW70%syBc2?Lk}z zOQZB-WdnkI7J=#&(_U{G5yXhxCk7vtBgHq)%8yNptUX6vM&q_sy2Mwyaly`Y04ryX zw#5okr&V*Ht@v&-O^0%$79X}xc71>A<>y1~Wnq{r@i#|0A_GNZDg(Xm+A->+uth*I zX}U&F7^ z9Fs%o!X6r`zsTehx|A(w61c!9#J+9hPKrrSe=9=;2UoKQd{ASa+YrV)TrfKq@`fKqTE09Oidf#mc8I4i(e z!N~+@3h=GT#RO;y&=jC4Oe63=k%HAH?91)$=x%Y)uZ_dAe$HL7gaG*7t}$kAa|QZ$ zUAu5iKmEBC4=X{O0E7TSfLa9f0tf+Q0ThB`wE(>ULI7C+g#f+4fdKRZ2mxdP6oLZ* z=mr0A2&$=l7tsGYIZ3Ax>B6Abqww_UVJ%)geF7luwkx$yc-5gD>{Age9A7u6xiU0rr literal 11765 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 literal 10959 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 literal 11405 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

TZZ&0t}(y~~qg;BJldrD5_y zsFi!MeW4F%LK>kqoQ+mkJ4YGL2c8Ek!B~J+D-g!GLe_Yxpw2_S;%c9zM7z4qr21%B z)vKQNyT#lAW7MXZ;8)FlGeE@zUF#AXo~Sru2Gu4@9<+kr+envQN{y08QR+?>x;PB6 z&Xi9MLMUk3CWRmr=LQffTgxi5!$@l$sbR6kM$MCj^ihpze5v6V<`W}vwL<_G?b*>D zQ4yEYOvxZZQt*&|-o#7zqQzNcCx*c8K`DXA2(p}7C=9NEfpi~8=KBMeINweYEIeu= zA+a^^vb8gsH7dxV99x)|B{5W`GGX_46_8H0@XXl%Rf2E>4cfn#mnedV1S6Xw2z!bS z@0VZB&CPq9VGfd%g<~Eq)?(bmk|DuLh3dW#+PKfoLj>(YDN|==V>r%DJr`xwj*e3F z0N=u|SIT_9VFtm2Lw>gvVUle_+Ss5(#aVM^;}ig1O2xSl6%$E(2QPaSCCS4<$7N4d zUCAoe4ml~q(fJ#Ui-sb-JkMgAG$?YyGNn(9Tg_%E+OL@6gCRir?;9=+S)mD|Xt`cF zxhzQUsOw?Nvo%lqp{@;<7*xS?b8_HOfx}ys^yd(S*t%HC{8$_j2upSx?z~n> zvo?782jYo$if5x!+s|_zKP(c~ZL*Gq7DFu>lkP%-kYjcXtSq(mP-5ZNc@`)@tTTY@ zsrpr`Op~Ob?dkhzD|}0sJnD|Ol(XL*v5$X1zSS6&jzFyeR#ChIUM1^?FK5ep>@x#O z*_(rl?$-2d=Cf%Hg;x_oTa+@gKmLao!y stDpKrSE~ZHbDDQ2BCDHsANZ&raU{hNHTYVxd9CHqc--OUgK1a)1-g#}!~g&Q diff --git a/test/java/renderer/ui/elements/word1.png b/test/java/renderer/ui/elements/word1.png index 6d7b716a1116751253f17356fb1797d7c5d2fd66..387a6f919624826c058e2cf7aade2eb2098cb9e3 100644 GIT binary patch literal 11768 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 Ry(=f4us<=rb>HdB{{_euUR(eG diff --git a/test/java/renderer/ui/test_Screencapture_Match.png b/test/java/renderer/ui/test_Screencapture_Match.png index 04b65f77a161b04f6c3eb76b054a6243032f1ccd..9ef61b5e689b3a43f00f1d481dea263b16330d7a 100644 GIT binary patch literal 71622 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 literal 31264 zcmeFZc~p{X|1OTX%hJk5txT<5JKGJ~q^71+HtsSj%X!GmG!e~AP)V?PH>k~)V`VuZ z4k=D3n3hzgWCkdTn3gCAI3db-?gx9{@B8ldZ>`@tXRY(k+5I6(@H{v7{TZ+8`f%g$ zp}n)TmuSOauvz=}?K%pBX~n`|zigd84LsA=^4cB-i{kFzwc}W%_W&D{-6@W#2{T_6 zeY?WP@isB(mV>p6i_2BwC%1JWx0@e&t@dr0E@WH`*Vhray39OoJy3c4Y~FoeO{8kI z-)e(RbKf_5CS}%V24xa5b@sHh?F-DaK-|QTwJ5r9N;>!3QiJf(kx_At4lPQR@3>7B zGp@u2q((5@3czBZe;XF;ocsm0ENjk>-`@TH%a7mAX=_aW7Mt?V%b=b3XG7HX@Q;P4 zx8Wa`QE$UP!9l$Z{{)B0ZTKfR{1Y7h@r8eU0rpQ`_$M#?(^gE{z(2n5k1zZ`=L;u3 zc%j<-b#Y_G>1^>ACr3r-Pz5a}gn4t}T5_|{g_u6yGE$TWuo>n(WkF<*L}uo^~r?+uc%XCu$l$aAzUK!i(i5*s@$-N;n>Cy z`Wzg!iW>gr$jEam=AKXJUt`Z1dn~m&-}kBc?%lfq?S9}LCvIMa%+RU#-Q5*b-W>7E zL~rXO&dSa(sv#-C7_K}g@J}Br7jCrVTo_?=Gdx1sVO=#Bxl#j6y6|u*)|vli#2#Ly`?Fb($Ny)}HH-Y+>suF*rZ))Hehz)70HI$U$Okskd+69(B^-=%0Z^qsPvgpL6aY za(+xaba1l3{u_4w??|T`lWf_3@k_1F?Z&%WNikZ4 zJmkZe4`hG(S)?FK=wz2{fs8JuSp2Ymp$|gDo7V@kW}*X z+udb*?S}6*3M!@d04|ZkDE9${h9CFNcsYzc9 zaHaeL4yqk#6K`ZIJy}LewiMY2ilBYEs@|vHk57BWULGU~hn$h6xFub@<)c^e>Bh9m zn4bE$tP7!o{N|XY;-@rqU@_7J?{r!RVVIB4;av(kWfL?U7VReRc#wVoA;I$ks(`y> zZ`-tKc;Hn0liSVB&3oZPHynf4CPbU!aSgIt1=V9LqyP&p@Wbc8Z~vPKe9^Cn&Y}40 zPlHr;;3A8xmxG@hcCj>;!P{9BUGT@XLy#rSyo-X33vZdSqFTD&dRWj>qPnzNG8KbE zBQ#vE54Taq5+6tm@hCp|wh5)uy&WH-YP!9cR*gQtW#)WZNvD3~%W>iD#T-PL!^5&# z+p4?&eQo8SXt)6_@9%z_j0p>VYV|IIn~v+#e`Lm?8!md}T&iH^xh0g=z1d9YWF}i( zh*{fFXON?ifpwkegRH7%PR?bDk5}b+gxTozYX9S+%!+V{TsF{_ARiwnc4R0AM*H`2 zqTc_eSYD_xn2gg6eK95irx5#WKIC@xFJ>!^$_Hzy(Z0ctt;Wi^bUgYCQglJqj*f|F zO1WOvm@@H(W9nHh&b?*IgKM)^JmttSkt>KeV`ytqAzXUVuMvYTosxE)f~xaPR`4|m zmqWBJ_xw&>z}5(C?}S@dD$?4DjVF{9TxC~_j(*5m&F^E|z9;z)UQmJ0_DDhA7SPmb zeaw`b!%gX9c_Cc#J0_A3JPQ6De?P$?dFd$hbLwoKWh^_c7q`-;SKj(+w- z8Y)vkn3s#G4;f$O7$ti5uI0P*d-aF!8{6Typ||tBDTpeOPf8P7PJDTw?9sxG?_?|< z9dC|z76ks+ne)yT&a}e#25%o<>)+ZoQ-^@lzqI>%P|ezSu6_b^zX1`ip2SCMotef!3CQ;ZS%Z}PI5PIK7D~= zyZ6Yo0sqx@PevB>#Hd=N@r@Ko%jVNdH^M+L9)B|D$2n*<++=$9>HZ>0wUs3^*LzhW z1^$U*W68FCY}_YUIoYN>?+>KbL%+2_K5UhjzE2gNM98aLpO9j@)}2)SxR2%MT+n&M zS;P?dFLKA?LZqYmLG4!Iy=BZi&o)(vAmRhD!S(^Bf9zbr{mScUy7BQLYwJ2yDdq^3 z*GR9xRB}WDk7BsN`)3C_Mx}na07podBjx^bLD&dLgxU4)F_WIuKz z{IlVfM;AppEt!TQWS{Of-1)IK664%d=Kc zCq`u4_D^nM9@id=szyH-J@a?_>aO*GzKd!4fyb&8WcbsCc+qB4{5jEMI4*!a_PS|K zB_?jToF|?Bod}A8F=bCBGDhTW60YkP%^`Uft1u$FO4YRQL!a(j(Vl7y_G78TB2O3J z#JxuoMQ+%T|2k@xuis*_a_ru39%S=P=d#P}aVK1ZlWfqmg`t@CD{D`XsOKeSm+M(* zpR=#gL8_CYDk4Sp{FZld_qaZWf~HwE6K_#`3Qq)kxb?HVG;C11)v_Ea+bY!C^`eI- z9hhcTB{KM|^$pDG4|668^wzVEmOflqiIek4QT&a5YtNg6rR~t{vXt653piSk2bw_9 z@Y+5b*nmfM^j@&Ix6gNbR3@A>O_-&uIAA)%{_W7Tnh1a1rXiWY^$tPL0oyEkb(SDj^uhEBP3jT@} zjzs1K98u@ zmiBMK(gU&_;nJjVFYHA84q2k)+oQ4SaGEW{o76{UmbPo9;#Xg$R|<}OI8kBiQqFau zqcsxuo&+mU7LH_dpI2#4z)v@_IGy%v%Ipf@({fUYEWHVR;dK3NQ5iG)zoVn|_*zkX z40HH9iAM_c_-v?{ zeE1|P&^PU1$^3)2j-z$-t~~1kCxCuLFYr$n{=ts!=${#@LXHi@5PhnH+Yr-gzIzcP zJT^90-1N{h?QkxOv-}hiQP4~_mL&N%NbOq-nx2ddKJ8&)vhhg`xP}j0WoaiZ!b2i^ zu&|c+5IxSoejom>c#T1;S|;KJ)u{iDu>O5$L0{ikruF1?!rR31*e(H^dURJ*o)dr}05YAY#~AJjhQtM3xU5s})vCEHY;r!nQqMvTvw^&`nC>2OoGFykfZ!-~fZx!fTkSc7dQ@I7og zFf=(PM3lEQpS%?Yj}jMTRq5r(e1cn_(Jo|4!!e<&^#id;4=COAbHdg-C>gBRdAXL-4z7;&y(xv3>f~ z<-1sy=jg9Ay}SL_9l!oD_2>eF%dhKiXlV7!2|c(BHBe3+o<*$v`Y4Dq@v+wi6J<-g z9Z)|fn1KX@>?OKFj=jSrL5g zqC+U#=#Ek2o3|4BA6s*y{QZZbUk#z;!37&{s}x|7FxYMDi%`OZomeoWS(E&ga`4Hy z0n+_dh7Y&@Y2&vi^-^Q&`+D>;S$Kgy!7Qh?Ir&$VLiYhPVnoTKF7|NfeVC}#tG?nw z7~I<#)!OtGr?{>fR4L%QcgJaI>o|G{a7wP~!v2Im$GBdhN(odj!#41Kfiw%S*duRr zVWE$-RykNpRmv>Y7h{{8U0r-Bygs2|jO*!$N=aS_LzESFviUw`C7ftPnb7e>)2uEW z9C|k_2U83`)dP!GcH=AL%SM1pDv*PmLZQjE1DjMte_zJ3iDINi|! z8($(gr!;>1mbyU7^YmV`o{*DbExsm_oB!R??zYQCP)>uL_%dUG`c_uIp5qg|7RAVE zi=n^oI86a99}KoVe(rM02;xnKNgSZIlCT z#XeHMO?L&>;Q1_fcX#U#4GkU&@> z1Oma2-}NgSo4q1b1$yq|{iQeN zuSyZy?{4->R213Ia?tWHaf2ts9%}mAn^Yp(Uis6(9r(-wcy~gCeM@1|kwz&y`jwTl zB$<=W8~^_Odw@k~=Y>2x9v=!21CxM{kDC|V*foXuofaMk{HhxuF|JM?9x}JkP?1k3 zMpW&XhEq-?)z;RU$%}Fr`%#LpyZa;ndpLWL^d#aoyjrE~H$HZpz9*x(##%FeF6q&S z4cwBo2~8C-ri0*$MtBjP1@xD!Q>1f z95KvK*puNUB99z85kPbg4iajn3ctiRPyry)SsWcn=38HQq38Y`VYT75kO{fnPhY!|zSz?>P60 zIB)b_ph+xUq@%ZP-!EO!+s<3_uXs^Vb36nU+%%h0)b|Yyd~agVae^3tOM)x7ndY{g ztlkBB3obn4e@R#T|9pd1TBh68GFU+>{WeOv`noQ8bSeP8gxw33-e646*oX?tw?^a-7pqeagY>@NF+nwDrD0_hl9xY86xD!wo~r+(=Pc zS3Yi>I(4d{g;G*LNsA07(!boib&DpW&i!duI<`0OYyh~F5s{T*70x@3QBH6Xd8H@c z-W-p2k=d?`b+CjP1|P~*7FN=0ryN&=Bshd15C)(0OCRkT8LkWp3TkqvfT};b{|@6* zx|vtyXyXa~zE&}RsL}ZVeaVs~O%v3^I-Wh|KZTMjS070_!f8}z;1?3RBkv-=)?S5s z5UQ%Sk$dP^blsuq`7XqLO0u%Ji1vsebIUEDmizO1%23TwQ4{g-rm+Bng5GNnok!}JucdW7XHuzVWQ{cl zJ^M9J;$_rq0zvUnx@OIqLvAsjU+fRa%Re1KQbr=X#3n{h1o6x!Z$|E^g5+AviYjgkruS+1c0zHLx2`>PcMh;fyqwU|*i>QT+XVQ!J3I z8F&)1_R5R^r>S=-<8RG!3EpmQZGqyfbgZ6ZurjLw_*r-O8vMfSDZf>qcYWR59WnFhgA3!M})Y#`S=*)X1+>78OfHP_44vc7K3n1`kg*R z$o%BW<+QiU^aW#L4iRry(VtT1UPn1S>#5 z+xjB4hP6MLH;#1>DUQ41!;fq*z^#jT=a=b}dU*=#?Ja#~po811Q~QaRzMf+Cc&o+) z?Fo)aTl#PF-q*JeMT9IVh^llpEG~T7rGv{OeC41Me@gw>vs*vEoF9)}E5BnkM!Mvm z>fz+n!o4^IioU;A3D8T~qp+>>`qS)UqVJ>TCA_DJN~CN6-hXZq?1f94WA~onO#kUP z#$SKkhc4Fa`rRq>!b$GgiQ(^S0X%J889+;$@66}%cnvff-LJ@Z@nSy7{@yR;>Q(b?Hak@qVkj;g01k}Qdv z?YY(>9~4)#_=oA~@TV$tLDji;(%Rn4h}($Z)PwmZ$yPH!QE+?l=A#P zp@F4q*RC}n$|6-tMI*#>Y-GFqwA=;LwX5fBd>FWeB^KIi+{0fc-$-zA36AZT_LB=>K8Bi&q)7To(7L`e5!QK?Ksp(vxL)x3Q9 z5~&@d*cg-x5onvyRpS1wj@yRb_@Xa>64yjy1GKaMs$zke?09AzvTEUt^NO#8viLU7 zt3}f4jEoFs5FiM)W!!1*T|G)9@4lr+cLhyCC_F$6z{M}R-xr;XdE)745&ojEa8M^1 zpJ`a5T|{(pqxgWDER>PRa~;F_@{7@PJt&t3OG`^b_@aS<0jTt;#<~-#s}*bGMiRom ze|SjYao^uJF&pTp7+Il+5_VMVHLq7gcc8N({OGK-f74m1)pMF}9F(W}(vD6EYB{l(l3SaJpgU-^-cAk3Xm_6-O37$O8OU2fG@>;E9PCDI@QPZ@PHci z291>SQ)ug8i>@BM8lO`I)kWyBAao8z(?yg)G{>o=d}0VkD(27k^~YkdSwVUa>g~Vo zJN1rQ`0upGczcoQ3-Ox?3%K z{`TH|VYMMOkMqp8Y)J{{#&B&oXG+L9PFWTRlU#-J<7V2@N~0h59B6LHDIZzjj_4%b ziSDYryAKUGL8CnACdSwJX#OoqJJVzB`6kfV{l%?UAMbno;pKrua+qfQDF=;go6wJs zH>NVmAR7lKmR`ycn|ATTX5s_R*|vSWt5hl*lCsc4(wJ^?L2FP>{KGuQ*Co7YY9V~@ zF&9b`)#rd{+8EW~CkOa8?JBnK@l6yvDE<-+l&)q@LtG)Cm>={8#r<~R(J?+v`wxXz zZky4HWd8fp@t);pztSvRM5~NG;SA9*L_mRfLUN|iutw=_`qQ-^gdFbkC=GTaHZ~;e zX-P9lupM*lwyl9$J1OXW#}nwv^56vD@J)~(y#whmzP;mfSP!d%eDB^p6yNCp*Y&;h zbBxv?;8WvgmOg6u$ueIWERe1`lro;v=uvcXx5G)7paJfK-<|A0)voh#xR_x7aHbVhxdNWDT@M?gVjK%jv^#R!a@7QSW`FtbXxCbX)m-R0}nOMI>${#r&a20Lsh)? z^YHMH)W;bltO@=iipGha@4lt9Es1#BTbZzh5oTZ4u`b~VROOs6VX=sagctLtv`1DW z&|)6_x>HykugH(;T~ZOG9YS1NUREYCliIfI-Oi-biEb((o0Obq6t{;oYU;yp@hd6| zZaZ3#?%bldVJ&Iq`TqS1Th2%t)7V|t?g>}iVKX=!T*dR}&)amDHg>Yjl4=J(fBvkI@U)a%*t6&-V*rNMzXdKoR_+dJ(efDCSdXo(tq(#AU(2q& zbjeI!*lZqFd!@Lv_v4ez@L}2Y^S4_guNGh=Lfd}$A6APcOSBNnB~K4<0ZC4FvZgd9 zTN;D-jyUd4val{}#ldA)r5oQk(US>MFPW&giZ{5P#j@7Djt zZeXY0>KfiPQrW4owGF>aW?Pus&}D}gR7!$6+RfbYRQL=Fp6B8OM$tO9?u2rhm1WS*TccP4lO#hS@g)w;C%BpkXHp_9sbC`ZZ1X z_8l%qki_-%^&`2WwqouTc)->{(F*k)?dMGH)SZPoTXeLwt)ru($)(%JhQBwsl#HNd zV*;v7CNuN!^4r4D-Bs+*pM(%#=Uo4_;O>j3SAHh?)?KsK@#94H#MLziZkdbX(J0C+ zTyBvPXiAEkpm!pq8XFQ~C()fdlQ}0gZ}rD@Yt~qY?g$oNH^wfxv8z&1<3xmt+mf&( zzZmD@Ib~H<@{hfZ$q5k=5#lp|{oS0jU=xYowv;lVz;0OQSAVj5s?X!`uli8nQ;0>E^ei6lbi?0*fyF&n|S7 zhxHuMv7&zCqAN9W*TNYAJzJ={ZUphzm~yvBmtpEr=I!b_e)R_$V^J8*(~3kn2Tbu(Ny$4nPe`sp4jEnCo9=^ zH){`8bDf_B?A^P!z@YY8kymxne7#qX7U-9ede{;jeszs9nvr-2ChtuSWw?1g%R{Ho z2#!7Sh%ckU6L@~iYv%-tWZd0Lqm-WIm~Iq_F8aIU21bU|-d5mUEiF5BF~Bp=(Qk`0 z=^7#AVvbSq0NGK(N(sTpUm0-*3eJSL%!m~S;IA7}rS2Xc^LG@`^BWhRzu@NPhWE-y zLMiQ}eHnX)M@F<#(*N$fOU^iT8`ebAM6oC68(VE+%{ z>@VB{3d!KkArhm5sn*1{`g|XX9rCedE>|TexKU3J{9I_gA>@+1{q%%+<`~UCs9iV+kZ*}9otJ@ym;Z|n|(DE>r}qP zAl&r$9cxgc^az(Cbo5QPeWTq6n1o>%^(vu1p1I;BdpirMokF~2*;X+@oy||)>Ran} zwUxmwee~#2Jk%}4jr??!@CEdqG_Z=-e(j}5n|wC;IUJv9hr8f#KLv`1D>c_24)#w($X2z+|YX0QT-N_(*M`Nn zWmfHb(QYj2bRn*F$(Iu=Dki$2x=|e}>TfS@>8I^?@%HwX0A9vGImqy!vVaZopq35* z<9kPpqF$H+aH2jS@B3ynwVBDiI`Dge_a~gYePR&g(e4$*mo9 zg9@?s0%YS{{b_rC^`gO57veBJaz<-wq_VUe zi7x#Tgh0SaM#~Ec66Ey=dvoBU2_3R$UPY|8B&a%M(Gg-`&vGj`93F;rMvFw54$1NA zoR;ps$`^^2pz)qJwLd(Y4@(Wn%V}nvX4i%Bg?!7sjEL;=(?yC|9kL&K%lsF>C?YB zqa@{!y2C-eL4iU?z$Qsv80TMW49hvK00qh!zzq^DA;PLEZ=KP}RjKzc3I1eM57KDy z`q}IxX-7s>)D5hla7gd>L!e|koHD=mo^F9e!gu9P;7Zj2qz5t3>p zveUGX!2)`(w9#-g6!W43iiHK_WIzIRnnXW9`}%&>*UWzlr?qlH8f?op{1nYmb6+3h zMMe!s-pF51YR>fPs_h@QjkWsi4NgH3Dq~n-JYjr9a_12b0L^T4dzbl%W*ACpdVabBTgJ#lsq3LWK|#(+Kvk42AZ8L_#|2c6*iwm zmQJf2?T|fsX5J~SUctn|kr^bj_x1dZOl>Cu2dRysCK#trFCnD4u9(-)!08o6UkI2W z%BYQ>Z2CT5l9cDjodCSrN>l)z_-|sZW|sbB zF}zW^FmVO3c{Eck04(*pe2IK?iS>!drMQ1>TBeY>-Q) zQTl*z+VOC7p!@oPrFAteQ*Ole>79<{wikeuAPD5390)eXun`(BwXy{^i z0-F?Uq(R^pTIF=U&$Bb&Voy8kfXe5qWYhTz10!EZ2?R%xC1W=K+O=!p&U_F`h$F>G zgrSynWeF=t`_f2?h;PL~f{pGoTzxKirBpYz8fe z&2v$9925OXp{wm&hPF=M7BzgyE?^Q*YO%`yYs9=*c-HjT%Fi$FH0<1nM`*ol#0e|7 zv)w)=CnhqhgXp<$W_JM4FLlt~f@o-i+QRaCzEE#XcFAN>`OQte2@Mde6i?Xhp5X3m z3rDTf8I@c0AMWCl=es#bc8faVM3J-F77oN0cO8C~*@@@p_t<4xE!5et(EFO9+4A=R zr>O@d-q+&Nts{bp>B&h+c1+xyLO)(ugLFXL_r1`3!8?|Sm74q*13Vs)z>3GE-@JL# zjv0aQYLw90y*Q#E76h?~!*h4ex92EcH+c3=2xfL_Rp%p?v}PoQF{98a_()<=@ge+nG`rK2vA? z!a{ckL}kx`KmM3UI>xr@Kl)f+Es7CkliKMlC{ai+X2R=3wa>BHFE1BKHX;&<9By%H zE7bSY2cbI7i~L(7WgT=#Qtzb6m@(reGOx*t`y9@%JaFJZySzy1s9}MXj`m-a>;Tr| z%Y4y=dVlXXI?w4(d7ZIx@Q$+OV&e_bVF}|%3+a)9c){WkOr2BmlYb<^i>H=5Z(sQt z*)!Vdf=2}8(4EY$zQhLV=`G=-G4c=qgme`(`*IiQxic6HZ12()XV;I7pFtn0KgnNn zkRgj;?_I!8>r<3lH1QbcgR32#ZSITH+~6CGZlgL_?iUf^R_SfxPK|-I%P5SDKOUUd zZWQ(Ht~D;@!NZ5d%JhVt?R$-5M*qY(##k^YtFDTp%U+2+TH=v0lu>TsS}}3l>59fHD5v%$mcQ*&_`DnNM;>2a z%8X7`%NX^iqRj+oiCmyuGd{+g?uRHx3RuLw_olYK?5QUzAatD66Os1;0zRmfe3@kY zNkH2Efn&}XNhz9I%PYmyWorZJvm1}e zKdlQ!hk%M9aC`7YWLGti`Lsux;}QAvDK^K7J2dhlv~_gMST?s}v@aqZ1lvn1=||a| zg8+Il8A|&`k&!4i!Z9{Zr5Liawev`@E)9dQyI)~Vquzl1njneHW_NJrSd@ZB*@t_Y zLOVFGul{XQ07R5_P^0h;Y1<}B;0&o86KwMuqA=zq zIaJg`;kJ3fl1g9UEB}UEf*E}O243+{kP_p}_Co?y!D}9?;!K2O>m+}AT8wNjH7rX) z-LIss{{8ney2l z?kflNuNq#Pc+z=5#Edsu#}nKS-AHEwcvf!FC$-aoRX1o zVm{NPcA!wq21-kYBYdFLj`*6fe^qeRPXP{igXhZ6ULe=?P4kC%&G`wqM>po1V1r@+ z+;DhXj`$ZKvo-Aj^-k~2cmJK8OC&1oP4OBDb3R>r`Qid zycLT9%?9|kKg{FHdyG|&TbJjRf_CJ7$oP}~>JkonBz>dbp8Irhytm+XDLE@Gnm732 z;abG#blxdMIq9(_l6C$|6Vxa*cCIBvW*~0a<}sgq`d8P8dMN!BKU@@_jE3 zXuOC!16rX@2=AC0DD|?j)nD&EDtcWQz6~?871JKPeW6ZY#}A*g+SGx7>n>jsFI_Q=?&8Ri{D z3^2zN(J>{+Torxq$m9NNY+r|Gg+?xbz965se|x^a`F+TAzU9=MvG~&hp~J_lZ3yWo$L%Lx+ZnCXy>J(VkY?LKV5`t3iJghoZQshQiW-S8@5#%j4b)uJ zTpyC2)VVh0J#p21)X!Ngr0=`M)U$v{Pc;MLlxJ!(f}OG73*$Ko@yBcBEluwrY8hx` zRvKvr4=mDq^$-NQcU?IL4F&r@|3FI$d$WuA6n`2DV@Lh^{4 z=o-WCg}L{RQlo|Ws&#Y5_6?P{ir2dqcHJSPwI8zW*qSl=#7FDgUcGSVpNb|t+xc^A zvusXa+&t}NL``$Dj`_DDy0+cI(f%yB{vz$4vOhM`+#P6RY;T~O?c{@X5!x|5F-7T; zPE6=?N1FgeMa|*yzXry^I(+lagjI};C+qv@JxSu}fwsBKpdd)3Cjb9>Jpc#3rF7ol zPa}uOb^x>ouC-{*->roO5Yx;Ns3Xk*QkOhPXa;qpK+RR~yP;)%qp^;s?oUmNd{DdQ z(_fZ(!gbJoIc(7(Ij$IT_7jgMkvZ^mo!;L)eYj@0fXQkr4xo(IC4N1~MR0|Zt3^dm zEO4n`O##A<0RxLvW`Pgx1)x$hARQhv-^&=TM$Iys=ZY6|4nm^D^QuWnV)9#6hVROT`_|AQbhUk~arA#2Q04%Ru!K|LRa{Dot)mA4Ct^CaH z>{LF4I}?D@y)uwKUK8Mw(GHE7N|Wcp)}C^TMTB=SIyx>i<4OQO02CQLc?8djSM{?_ zDX<8o)s+bVJ$m}}P-JY8(TJ?&VZYcdUC5pc;q(O^vK^AcYHjCAqc%dOVdD+)W;u4k zFKFKvsuug7OSo5LrL?-S6UXNOKJE81vldKRfAztLkPt;%K)UTI3jWOctNma~ zQ~r*?ANmdvspcG&r4D3!*KSPK{MV+!pAOllo?5WFLS!iTA9;a;#ytutOx+&#Wk^2f zdz15b~w5Tc7Mv{%0_2dF&8j0hKrs%g_5E0VGZ2x#&uSLce$)uw# zjwbp3kUluXCsX3NsUk6_sWCMJQwS)?RT5Et)A838JXFFLtQha}w&3+&H{!Yy>&U0}=D3SXl5 zJY_pVIpJT+STrCd@|)}JfQ<6`JZ8#|hPVO{O@b?p{gCL(eCinsGLSHYUp5B&U;CN z4~N3>6$g_g&VXt+0+Pb@d3uVhDKa?$>OtF6f`w6@*Car1Ak0WIw7*#9Q6~EiW?J@} z{}l6%PPNRbn&?fAuyDMX*`CD#1WSkAR1~CYWfU#AG^uJu-(ii9A9{oETNv!dHqt`; z@y8!cZs|!l?2|(CX(VN$57x>EdnU0v_Qbk9A}lci3n@CBnIvz5U5s>em5%CY(a`18 zgoaC}tNmI<#p2o|8`EUaEj^qj+=im^Q}dbpMQ`7})g)_?50ZV9Ql(-xK47G}EXmzk zvU(w!P?)I-+`!g3S6sop2MXWlSF-HW7pt+A5g7EVOQRY#GCzt;bsB;UYc|YP!!$PArny_irUB7B-*`c2ZKBpLfN>58V!^Uy|N zT0poN^584kA{8cB+!}M%STfLgfUQ#|R3)o*|8={bLVgRY+nL+7YN72V=kQT)Z;InF z7o5DA$_%1y8#&lLR1_4g%L8ItI}{?w!aH0{>MYBNz(EufLG7Dln!XvYxIYrsANIz=jBe^CnM~i9?d3C`Tczs#5rmM|L^FtR)P=lG> zwBt1|`R9!hlMI&9m2WU`!82jo@V=Amam;D^`ae;|?d5=|kqT^(`ikBBdAPDy-T%MuLSe>2kz=XQqh3Ww2H2cEBKp;KZUy zG5rbGeG5OmxF;kX21DfNH@wmeOR~+mu8gzuV}hJHK=l%aKci2;+*WH|!nvpFpctUm z`TC7yG(Yh38X9EH(8)TK$_nP^0ctD^cUwFQWtR^*a&Q{zS*5S{&Vi*JCqzP^weKGb z2#>L_8}O`?=1Vqu0^^zH0nbZolyn9urI*E5XBZUFSnTgW=-YZr2s!xVhOflWR}TOz z`ueXb=IGQdIRFmG>g??ws=E=pd8{R7>5xLgb_op!Qo75|cn&19cdZ7n^AVTgXoy#& zkBK;(;Af||EK!`}Hl-S0ZG3-?u(4I_n6h=q$$$iM@DfRqIM83kCP5i-Oi2g5<{y&P z-b{=;GPSa@QsZ@L>xvjC)w8=IH$XChKL&oG%T7S*gFMIOqv{5qQDB&>%;y~}a16fC zTCKw;byCmzOBI{m3(Mlr3CYkW_2s7LnjL&Kq;9-%F5WR>x;?N+$+l$78Jppr1S)E$ zp8-F8vs#N6JJ(drB*pr^o)x&@O7*`*JoUy}_&F^x*RzbwNd66vq7@~8&hiNzN z&yrBrDkb0>3%v2-gp9+jleD13B!is_QAZXo4(V->rlG&HB0{ipj2jRgbJDL)=oQF` zu)DUlMU=Q7MIrPWSpsC8Ue^Ra?(_ImPlUG+?O^k5zQPT%M1P>Jk{@XaLNN1fPcAQ{ z%fnZx#he>zCk3M$)|G2GOiE1GWvjJ2!k!cC%)|R_POwkxwV9<>EGN)0VGI9g6A4qU z>gXGtqq<}Io?V}(@hHj0#HsX}@!_jSKK0rqv5=Mepc2=-M2CiOA}$A&{hk+r?oR^r z<8PfU_+ClYQJ_rN4FnvkP#3P53r>o;PYxE)q_sk?S7d(FOcx7|8TdQ`w5t3GRz#rr z03LWlPCX6E)Z(>W5$La{qiMwzi9l=ZIIuHb;-&Kdyf)>&Lh;+=N7^|FD@=Z*##ynu zHF`h4Jb)+49KR-Fd6L2tP78Le2P)A$UlY_#oUhZX4f~cm1J1IC93wj<9v!_vVCR89 z2{}_<9Bf;H-Tn~3(u8mp_}{S9`=~p-q*0^Jn%2kN-Q6RAn7i#$j5;H1Ey_6J>(!cp zMk=Q2=q>$R$$DtmXM8YN3D5&s5z3c$gvL@}2D@HwHme%k88@Z7CemjbGm+Q%l1K8U z4*JU#l_*nRi48q$^F(Ksy9qeNV?D&4j_RfvU>glLth$UbUCe1{l}Zy9N6X7)Tamz4 z!(T;AkA+gx?KzVy-b@{ApC+vC#!n3awsp$?-KUpPCwAyxGf{=B$-L>gU0IwGgdg7Q|Z$IeNu z^U|!d%~Kf1mWP;v*3DDJTJj(LnZa9C2lQfC`EM`OkMF{?_3uwj&F3$ML9&gri#+&{ zbV+VE#H?t(=VdS{#Qj&d3bQ)&_2jFkEfKbwU8nN7?o9hvBVXr!g02+n`|Bjt{B7&i zTkkI&ViwN)ch7?A2E#1M?~Wo0PO1eIK|tYj9@~s8iy>c_7*68p!sR9Zr6qEw8U}E` zT2eT+juZ?34-XunR;`szr*C;o)ZO6t$WvU9u z0AObi>{CD9>8Y)4*nnLIlo`qS2N_47=E9i01bIZ5$wddJslghWirtwgF3X5ddSeEQez=3Y+>+1@{_`M$8LCH;O*3G?QzN;Uf& zTs6f<(FwjM1VOy4rJEL}$yAGne1NdC0+QICVHVP%FEP1qVbNxD!zne3p6^*P?4tM* zati*G5#nRu14)+JvkYrI%0iH5Y44NjW$6achl7<}`7wcJ>h`qX;E+b4Q9-a@I!0Jw zuQ%HJ{d+`#J8?}B9>pp-V-kGG(UHc?6-y*Or9+@aNng8-k#YvjNnK>qI&p)9M~Dki-@juX_=0Ni?_2q)i)f_u^bikK(FbV$sw;8gC6ySvXh|WR zsM*GY8Yi|G&^Az^8>Hl_MQ%0gm;ac@1QS5gYfi8Wpv%*-usDtg4BQ$J4#orBA&a%- zw={7eR%0JfGk^ALb5&ia2b*aSj_z2umz50+D zzpEe5rPS`mpz}K;45qIrsDN7bCE?IW7AZpKcg3A82L1W|+)b`dfAX3pi@IJ=)TNRj z`4A}T=+Gwia*Wxu!lCE|#GusF)M{ne+nDqstmNnWyam8z>Z`&dqNn1zee^uFe(w92 z8(VjO@m--is|_Ef?MS?Axe%8>rEUNHRjFaduk+MWB2b8p&`k1-z-U?4(^g(IdMMUv zKpo&=FHHW&^WZ>mgIE_lvwfD$X6IrhgfPz33pu@(O$0g`XQW@<6#l919r%%^E=Y>q zZaq2TS!M_AnlJHK45VZUi4Yt_Q4=3LDDn8a<8Uem;+QMNdKPP5tXsFPD$w^77~q=# z^7%KIU~^RA+07pP`Q~BWZyb>W;EQ#F<~K^til zW=|Egml?Zk=x1!H$L%c?U!9u%h3Qq^u0*4=N7~fdP-->C5L-W6(~yBQxdVX3@z{MA+x;3K__WR3n9Q{7euq=M~-rZVXvhf3$FAz~Y!EO!2r$YiGNp)oi z0urM_z)-@*(9SB2XXSK(GZub?quK)Jk|C`G@ZHT#B)Ccl$F# zDwr3O>Cd>rzq>DSitkm5G$-k&NGv}wj}s4q6xXl)t8B1Nm-$;KVW|v4z*b2a0Lt7I z@pF27y^?GQO*%uWOt(+%pFW*Eln~440bgA23`URk{Ji~Kt^4C+4<0;7;X?`$gYilM zlyWQ>KP5iw>KmcV#~b~ueJ%{WO#&lNG$~N(TAG_rrX{t+KJ2GpG@`kGrsH3pt(o3^ z{Zh^0iAnKF&7VJ%G<)X2t2D2D_@Ua^^J64?!=+t-zaRs>0EmyP4n020&>ijm^=>}Y z2Da5hkOJQOKQg@e1}(Q@S<0CaX2oLpq(te&t{;@(ia)22ILfgybG>DDD*1>x_NfUJ zN|6VFnzi7P9~~gGJ!18M6Ss@g8e;=gNQqdVO%^6Cy%5S8#zu_%pq}Rbm@>b;OnU$b zh)}hcsvs7SCE#ntK)qjToEtQuK%Wt-6(CuE9~KFTl41=cMDBdZMYAGn4Y-nvfdn)bD3E+0_k_TnlaJ}_ zEYAMzpYVg>WHLkYe&>D9bDsBk-hl;Pg1O|H9k4|ueip-U%r#K4P0f!S{!{`+*R|Wr zjTPWYKZB&`v`IxpWC@RM0}`s50vK|KP%~gBB9}q=A$2_N?h=q4S)5Rh^1;9^V197B z`R?62hdk$t?gEG|V7m`;uZDe+|D%jP;G8m^D&q=RY<5(y?+ENR62M)rb9_?d#Jjje z1w4%>nsCdJp!=Ixx>Whtguq9Nf8%CDg%SN@F?q_>Pjnqs13k7&HRtCBRVlpDCPO{a zep`cS-J|JG3{8OY2GaOOpgG+v`?#gT?=>qu%P?1x1o)Et$w`ob(nIXrHPY(Xq{Ye3 z%|cl{D5g5X9q>MRpo&2BnVFPzrVL$eaJLxFur4^_niK4EX(sxER0s9?9exFLG5+j% zAb#F=AyF|G;$OHTRLk6nVd~Je9FO~;inOFBQrn^mYGhM4+ZNB%&DiXWKXiy?VgRf0 zid08*Z=mi+%%mk#>`Dfi|Hg&NkK0{gbE_^_%+1(L2uvOqam*@bB`9O=R?2Qct&E~! zJ$1$f;OlK>HWH7BffnL?vSAK%Z(P)=`I<&koircD4}&6>!tcIe?e~oc%KMa4u;U$ZMgpSo(-PX-XJ4K;bgrU z{ug)l5fgN~G>%HjI>dDE3bd*aC^bnkG?GYcgBsaDWO+$72A~v>o7h=ajc(!-5qW*z z?)l-nr3t2e;a5MF?&@8Udq3g<`M_}|fg$GYn~epsg$xqc+${diyzyId?6e}ndFO1W ziMhCRyQJ>H!g^>Yz!>l>yIs4Kr(Sc0yb+axD++i|#`Nz&(d8wS^+itzkY;S>_vd#A zrH{8NcLzD+=nKExlp#rVhXi=E6%{7;*8Xr*{%N2ZI14`{%%;S~Te8$jVO!O4wR78o zPZpygVL~~4mw4h-zrwNsTES+Tm|2Xe=gwp7s_K_{Q%y7HPKja`JzO)hENp9izHBC+ zncA|`u>r_qUfyW6dv#{T%pBUgB0;yhvUR8lO|2|1&p>hU0~^>LPWiZFOs{%sg#c7_ z9%&5NNUso11TmwC^Y?(zMPtqE@pH=wqR=uqYsRW$KQMBeLEIh$yX03^P1Prb#j@>| zE}Ta97sq;vL>-=eaX%qMr^185!NFsE*2(4XlEn+EkrJk5S9iA`)pqMw8o~)za=1u? z`aU_>zsC-A(w=R=)%nN4?pYt|U*>z>*BaLXF(A>8A7`6TsX2jL0dDxCblC+mtg0H- zH-k37TxRTI=Jr5L@Z%)tkjpsyC}E6ioUgt0QcwiCpXyvqaL>%buY^Xmg4IN`r$9j^Q+ zK_IGp1-b-pkfKtHHvm>zX;5V9aVrc(W^Q8?IfIiz&uC^myDJiCD7

;1BWLfo&lJkfTHKXR9{~g04x0LLpvs=1y@OGym7KMPHKpXlaGiQ5(tS zMABT3pq#}bPcb*Y=X~RuOn zRu%0@UALs!S7-Id>$BP%gtW3Mjy+>rc_;-cjU^N|ydOe~{jBiAb=mc-X)!{V>HNY4 z5@sty$S*1k*Ncatl&eNa&tm&+gmFnA1-->QC z^qM;jd1_81B<$dYaLN8r)$>(QX#P?`Bl;{*^-nv-aXHi8X@}!A0BT|D5j5NwEpRG@ z+>`_jN?`{(%r0?^<*xi(L%YhH!b1E&Q|>5zG4=%|3d{}g?Syk-ZSubgincX$hT{=P zKs@eSd>=AgJueBoqHpKIH1;?3zuQ%wi-uU*Ci?FYkZSY&qYgl;Ig+r?hU+FhVc1Z^#V5zy8GZ3wixK${3K0@_-j4S{wSXcGZO gKwArbzYuJ6B-yO5)8#kbgAd~9pM1TlJVSr@4{v~@-v9sr