From 8aa9a0ec43f242d72f3ef449b7e5efba10052d7d Mon Sep 17 00:00:00 2001 From: GPF Date: Sat, 20 Jun 2026 00:45:11 -0700 Subject: [PATCH 1/4] Add GL_KOS_texture_stride support --- CMakeLists.txt | 4 + GL/draw.c | 21 ++ GL/platform.h | 30 ++- GL/platforms/sh4.c | 8 + GL/private.h | 8 +- GL/state.c | 14 +- GL/texture.c | 219 ++++++++++++++-- include/GL/glkos.h | 9 + samples/nehe06_strided/main.c | 192 ++++++++++++++ samples/nehe06_strided/romdisk/NeHe.bmp | Bin 0 -> 287370 bytes samples/nehe06_strided/romdisk/PLACEHOLDER | 0 samples/nehe20_strided/main.c | 279 +++++++++++++++++++++ samples/nehe20_strided/romdisk/image1.bmp | Bin 0 -> 196664 bytes samples/nehe20_strided/romdisk/image2.bmp | Bin 0 -> 196662 bytes samples/nehe20_strided/romdisk/logo.bmp | Bin 0 -> 230538 bytes samples/nehe20_strided/romdisk/mask1.bmp | Bin 0 -> 196664 bytes samples/nehe20_strided/romdisk/mask2.bmp | Bin 0 -> 196664 bytes tests/test_glteximage2d.h | 51 ++++ 18 files changed, 802 insertions(+), 33 deletions(-) create mode 100644 samples/nehe06_strided/main.c create mode 100644 samples/nehe06_strided/romdisk/NeHe.bmp create mode 100644 samples/nehe06_strided/romdisk/PLACEHOLDER create mode 100644 samples/nehe20_strided/main.c create mode 100644 samples/nehe20_strided/romdisk/image1.bmp create mode 100644 samples/nehe20_strided/romdisk/image2.bmp create mode 100644 samples/nehe20_strided/romdisk/logo.bmp create mode 100644 samples/nehe20_strided/romdisk/mask1.bmp create mode 100644 samples/nehe20_strided/romdisk/mask2.bmp diff --git a/CMakeLists.txt b/CMakeLists.txt index 06ed35c..f208e42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,9 +152,11 @@ function(gen_sample sample) if(PLATFORM_DREAMCAST) if(EXISTS "${CMAKE_SOURCE_DIR}/samples/${sample}/romdisk") message("Generating romdisk for sample: ${sample}") + file(GLOB_RECURSE ROMDISK_FILES "${ROMDISK_DIR}/*") add_custom_command( OUTPUT ${ROMDISK_IMG} COMMAND ${GENROMFS} -f ${ROMDISK_IMG} -d ${ROMDISK_DIR} -v + DEPENDS ${ROMDISK_FILES} ) add_custom_command( @@ -201,12 +203,14 @@ if(BUILD_SAMPLES) gen_sample(nehe04 samples/nehe04/main.c) gen_sample(nehe05 samples/nehe05/main.c) gen_sample(nehe06 samples/nehe06/main.c samples/loadbmp.c) + gen_sample(nehe06_strided samples/nehe06_strided/main.c samples/loadbmp.c) gen_sample(nehe06_vq samples/nehe06_vq/main.c) gen_sample(nehe06_4444twid samples/nehe06_4444twid/main.c) gen_sample(nehe08 samples/nehe08/main.c samples/nehe08/pvr-texture.c) gen_sample(nehe10 samples/nehe10/main.c samples/loadbmp.c) gen_sample(nehe16 samples/nehe16/main.c samples/nehe16/pvr-texture.c) gen_sample(nehe20 samples/nehe20/main.c samples/loadbmp.c) + gen_sample(nehe20_strided samples/nehe20_strided/main.c samples/loadbmp.c) gen_sample(ortho2d samples/ortho2d/main.c) gen_sample(paletted samples/paletted/main.c) gen_sample(paletted_pcx samples/paletted_pcx/main.c) diff --git a/GL/draw.c b/GL/draw.c index 6a17ecc..d9b8940 100644 --- a/GL/draw.c +++ b/GL/draw.c @@ -751,6 +751,25 @@ GL_FORCE_INLINE void apply_poly_header(PolyHeader* header, GLboolean multiTextur */ } +GL_FORCE_INLINE void apply_strided_texture_uv_scale(SubmissionTarget* target) { + TextureObject* texture = _glGetTexture0(); + + if(!texture || !texture->isStrided || !texture->pvrWidth || !texture->pvrHeight) { + return; + } + + const float uScale = (float) texture->logicalWidth / (float) texture->pvrWidth; + const float vScale = (float) texture->logicalHeight / (float) texture->pvrHeight; + Vertex* it = _glSubmissionTargetStart(target); + Vertex* end = _glSubmissionTargetEnd(target); + + while(it < end) { + it->uv[0] *= uScale; + it->uv[1] *= vScale; + ++it; + } +} + #define DEBUG_CLIPPING 0 @@ -842,6 +861,8 @@ GL_FORCE_INLINE void submitVertices(GLenum mode, GLsizei first, GLuint count, GL _glTnlApplyEffects(target); + apply_strided_texture_uv_scale(target); + // /* // Now, if multitexturing is enabled, we want to send exactly the same vertices again, except: // - We want to enable blending, and send them to the TR list diff --git a/GL/platform.h b/GL/platform.h index 4e9e23b..683bc32 100644 --- a/GL/platform.h +++ b/GL/platform.h @@ -67,8 +67,10 @@ typedef enum GPUTextureFormat { GPU_TXRFMT_PAL8BPP = (6 << 27), GPU_TXRFMT_TWIDDLED = (0 << 26), GPU_TXRFMT_NONTWIDDLED = (1 << 26), - GPU_TXRFMT_NOSTRIDE = (0 << 21), - GPU_TXRFMT_STRIDE = (1 << 21) + GPU_TXRFMT_POW2_STRIDE = (0 << 25), + GPU_TXRFMT_NOSTRIDE = GPU_TXRFMT_POW2_STRIDE, + GPU_TXRFMT_X32_STRIDE = (1 << 25), + GPU_TXRFMT_STRIDE = GPU_TXRFMT_X32_STRIDE } GPUTextureFormat; static inline uint32_t GPUPaletteSelect8BPP(uint32_t x) { @@ -218,6 +220,10 @@ typedef struct { int width; int height; int format; + int stride_width; + float uv_scale_u; + float uv_scale_v; + int is_strided; void* base; } txr; struct { @@ -232,6 +238,10 @@ typedef struct { int width; int height; int format; + int stride_width; + float uv_scale_u; + float uv_scale_v; + int is_strided; void* base; } txr2; } PolyContext; @@ -245,7 +255,13 @@ typedef struct { uint32_t d2; uint32_t d3; uint32_t d4; - uint8_t padding[32]; + struct { + uint32_t texture_stride; + float uv_scale_u; + float uv_scale_v; + uint8_t texture_is_strided; + uint8_t padding[19]; + } meta; } PolyHeader; enum GPUCommand { @@ -384,6 +400,10 @@ static inline void CompilePolyHeader(PolyHeader *dst, const PolyContext *src) { /* The base values for CMD */ dst->cmd = GPU_CMD_POLYHDR; + dst->meta.texture_is_strided = 0; + dst->meta.texture_stride = 0; + dst->meta.uv_scale_u = 1.0f; + dst->meta.uv_scale_v = 1.0f; /* Big hack! This enables texturing no matter what. If we disable texturing then * we lose offset color and the vertex format changes meaning we have to manipulate @@ -448,6 +468,10 @@ static inline void CompilePolyHeader(PolyHeader *dst, const PolyContext *src) { /* Polygon mode 3 */ dst->mode3 = (src->txr.mipmap << GPU_TA_PM3_MIPMAP_SHIFT) & GPU_TA_PM3_MIPMAP_MASK; dst->mode3 |= (src->txr.format << GPU_TA_PM3_TXRFMT_SHIFT) & GPU_TA_PM3_TXRFMT_MASK; + dst->meta.texture_is_strided = src->txr.is_strided ? 1 : 0; + dst->meta.texture_stride = src->txr.stride_width; + dst->meta.uv_scale_u = src->txr.uv_scale_u; + dst->meta.uv_scale_v = src->txr.uv_scale_v; /* Convert the texture address */ txr_base = (uint32_t) src->txr.base; diff --git a/GL/platforms/sh4.c b/GL/platforms/sh4.c index 35d73b1..116c480 100644 --- a/GL/platforms/sh4.c +++ b/GL/platforms/sh4.c @@ -87,6 +87,7 @@ GL_FORCE_INLINE void _glPerspectiveDivideVertex(Vertex* vertex, int count) { } static uintptr_t sq_dest_addr = 0; +static size_t CURRENT_TEXTURE_STRIDE = 0; static inline void _glPushHeader(Vertex* v, size_t count) { TRACE(); @@ -195,6 +196,12 @@ void SceneListSubmit(Vertex* vertices, int n) { Vertex* v0 = vertices; for(int i = 0; i < n - 1; ++i, ++v0) { if(is_header(v0)) { + PolyHeader* header = (PolyHeader*) v0; + if(header->meta.texture_is_strided && header->meta.texture_stride != CURRENT_TEXTURE_STRIDE) { + pvr_txr_set_stride(header->meta.texture_stride); + CURRENT_TEXTURE_STRIDE = header->meta.texture_stride; + } + _glPushHeader(v0, 1); visible_mask = 0; continue; @@ -378,6 +385,7 @@ void SceneListSubmit(Vertex* vertices, int n) { } void SceneBegin() { + CURRENT_TEXTURE_STRIDE = 0; pvr_wait_ready(); pvr_scene_begin(); } diff --git a/GL/private.h b/GL/private.h index c43d6e3..ad66312 100644 --- a/GL/private.h +++ b/GL/private.h @@ -128,8 +128,12 @@ typedef struct { GLboolean isPaletted; //50 GLenum internalFormat; - //54 - GLubyte padding[10]; // Pad to 64-bytes + GLushort logicalWidth; + GLushort logicalHeight; + GLushort pvrWidth; + GLushort pvrHeight; + GLushort strideWidth; + GLboolean isStrided; } __attribute__((aligned(32))) TextureObject; typedef struct { diff --git a/GL/state.c b/GL/state.c index 6d50c2f..03820fd 100644 --- a/GL/state.c +++ b/GL/state.c @@ -409,8 +409,8 @@ void _glUpdatePVRTextureContext(PolyContext *context, GLshort textureUnit) { if(tx1->data) { context->txr.enable = GPU_TEXTURE_ENABLE; context->txr.filter = filter; - context->txr.width = tx1->width; - context->txr.height = tx1->height; + context->txr.width = tx1->pvrWidth ? tx1->pvrWidth : tx1->width; + context->txr.height = tx1->pvrHeight ? tx1->pvrHeight : tx1->height; context->txr.mipmap = enableMipmaps; context->txr.mipmap_bias = tx1->mipmap_bias; @@ -421,6 +421,14 @@ void _glUpdatePVRTextureContext(PolyContext *context, GLshort textureUnit) { } context->txr.format = tx1->color; + context->txr.is_strided = tx1->isStrided; + context->txr.stride_width = tx1->strideWidth; + context->txr.uv_scale_u = tx1->isStrided ? ((float) tx1->logicalWidth / (float) tx1->pvrWidth) : 1.0f; + context->txr.uv_scale_v = tx1->isStrided ? ((float) tx1->logicalHeight / (float) tx1->pvrHeight) : 1.0f; + + if(tx1->isStrided) { + context->txr.format |= GPU_TXRFMT_X32_STRIDE; + } if(tx1->isPaletted) { if(_glIsSharedTexturePaletteEnabled()) { @@ -1137,7 +1145,7 @@ const GLubyte *glGetString(GLenum name) { return (const GLubyte*) "1.2 (partial) - GLdc 1.1"; case GL_EXTENSIONS: - return (const GLubyte*)"GL_ARB_framebuffer_object, GL_ARB_multitexture, GL_ARB_texture_rg, GL_OES_compressed_paletted_texture, GL_EXT_paletted_texture, GL_EXT_shared_texture_palette, GL_KOS_multiple_shared_palette, GL_ARB_vertex_array_bgra, GL_ARB_vertex_type_2_10_10_10_rev, GL_KOS_texture_memory_management, GL_ATI_meminfo"; + return (const GLubyte*)"GL_ARB_framebuffer_object, GL_ARB_multitexture, GL_ARB_texture_rg, GL_OES_compressed_paletted_texture, GL_EXT_paletted_texture, GL_EXT_shared_texture_palette, GL_KOS_multiple_shared_palette, GL_ARB_vertex_array_bgra, GL_ARB_vertex_type_2_10_10_10_rev, GL_KOS_texture_memory_management, GL_KOS_texture_stride, GL_ATI_meminfo"; } return (const GLubyte*) "GL_KOS_ERROR: ENUM Unsupported\n"; diff --git a/GL/texture.c b/GL/texture.c index b9c8066..f8f8109 100644 --- a/GL/texture.c +++ b/GL/texture.c @@ -42,6 +42,64 @@ static GLboolean TEXTURE_TWIDDLE_ENABLED = GL_FALSE; static void* ALLOC_BASE = NULL; static size_t ALLOC_SIZE = 0; +#define GL_KOS_MAX_STRIDE_WIDTH 992 + +static GLuint _glNextPowerOfTwo(GLuint v) { + if(v <= 1) { + return 1; + } + + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + return v + 1; +} + +static GLboolean _glIsTwiddledFormat(GLenum internalFormat) { + return ( + internalFormat == GL_RGB565_TWID_KOS || + internalFormat == GL_ARGB4444_TWID_KOS || + internalFormat == GL_ARGB1555_TWID_KOS || + internalFormat == GL_COLOR_INDEX8_TWID_KOS || + internalFormat == GL_COLOR_INDEX4_TWID_KOS || + internalFormat == GL_COMPRESSED_RGB_565_VQ_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_1555_VQ_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_4444_VQ_TWID_KOS || + internalFormat == GL_COMPRESSED_RGB_565_VQ_MIPMAP_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_1555_VQ_MIPMAP_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_4444_VQ_MIPMAP_TWID_KOS + ) ? GL_TRUE : GL_FALSE; +} + +static GLboolean _glIsCompressedFormat(GLenum internalFormat) { + return ( + internalFormat == GL_COMPRESSED_RGB_565_VQ_KOS || + internalFormat == GL_COMPRESSED_ARGB_1555_VQ_KOS || + internalFormat == GL_COMPRESSED_ARGB_4444_VQ_KOS || + internalFormat == GL_COMPRESSED_RGB_565_VQ_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_1555_VQ_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_4444_VQ_TWID_KOS || + internalFormat == GL_COMPRESSED_RGB_565_VQ_MIPMAP_KOS || + internalFormat == GL_COMPRESSED_ARGB_1555_VQ_MIPMAP_KOS || + internalFormat == GL_COMPRESSED_ARGB_4444_VQ_MIPMAP_KOS || + internalFormat == GL_COMPRESSED_RGB_565_VQ_MIPMAP_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_1555_VQ_MIPMAP_TWID_KOS || + internalFormat == GL_COMPRESSED_ARGB_4444_VQ_MIPMAP_TWID_KOS + ) ? GL_TRUE : GL_FALSE; +} + +static GLboolean _glIsPalettedFormat(GLenum internalFormat) { + return ( + internalFormat == GL_COLOR_INDEX8_EXT || + internalFormat == GL_COLOR_INDEX4_EXT || + internalFormat == GL_COLOR_INDEX8_TWID_KOS || + internalFormat == GL_COLOR_INDEX4_TWID_KOS + ) ? GL_TRUE : GL_FALSE; +} + static void calc_twiddle_factors(uint32_t w, uint32_t h, uint32_t* maskX, uint32_t* maskY) { *maskX = 0; *maskY = 0; @@ -495,6 +553,10 @@ void _glResetSharedPalettes() static void _glInitializeTextureObject(TextureObject* txr, unsigned int id) { txr->index = id; txr->width = txr->height = 0; + txr->logicalWidth = txr->logicalHeight = 0; + txr->pvrWidth = txr->pvrHeight = 0; + txr->strideWidth = 0; + txr->isStrided = GL_FALSE; txr->mipmap = 0; txr->uv_wrap = 0; txr->env = GPU_TXRENV_MODULATEALPHA; @@ -868,16 +930,28 @@ void APIENTRY glCompressedTexImage2DARB(GLenum target, gl_assert(ACTIVE_TEXTURE < MAX_GLDC_TEXTURE_UNITS); TextureObject* active = TEXTURE_UNITS[ACTIVE_TEXTURE]; - GLuint original_id = active->index; if(!active) { _glKosThrowError(GL_INVALID_OPERATION, __func__); return; } + if(active->strideWidth) { + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return; + } + + GLuint original_id = active->index; + /* Set the required mipmap count */ active->width = width; active->height = height; + active->logicalWidth = width; + active->logicalHeight = height; + active->pvrWidth = width; + active->pvrHeight = height; + active->strideWidth = 0; + active->isStrided = GL_FALSE; active->internalFormat = internalFormat; active->color = _determinePVRFormat(internalFormat); active->mipmapCount = _glGetMipmapLevelCount(active); @@ -1059,6 +1133,18 @@ static GLint _cleanInternalFormat(GLint internalFormat) { } } +static GLint _cleanInternalFormatForTexture(const TextureObject* txr, GLint internalFormat) { + if(!txr || !txr->strideWidth) { + return _cleanInternalFormat(internalFormat); + } + + GLboolean oldTwiddle = TEXTURE_TWIDDLE_ENABLED; + TEXTURE_TWIDDLE_ENABLED = GL_FALSE; + GLint ret = _cleanInternalFormat(internalFormat); + TEXTURE_TWIDDLE_ENABLED = oldTwiddle; + return ret; +} + static GLuint _determinePVRFormat(GLint internalFormat) { /* Given a cleaned internalFormat, return the Dreamcast format * that can hold it @@ -1448,7 +1534,7 @@ static bool _glValidTextureSize(GLuint size) { } } -static bool _glTexImage2DValidate(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type) { +static bool _glTexImage2DValidate(const TextureObject* txr, GLenum target, GLint level, GLint internalFormat, GLint cleanInternalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type) { if(target != GL_TEXTURE_2D) { INFO_MSG("Target unsupported"); _glKosThrowError(GL_INVALID_ENUM, __func__); @@ -1493,16 +1579,62 @@ static bool _glTexImage2DValidate(GLenum target, GLint level, GLint internalForm } } - if(_cleanInternalFormat(internalFormat) == -1) { + if(cleanInternalFormat == -1) { INFO_MSG("Unsupported internal format"); _glKosThrowError(GL_INVALID_VALUE, __func__); return false; } + GLboolean isStrided = (txr && txr->strideWidth) ? GL_TRUE : GL_FALSE; + + if(isStrided) { + if(level != 0) { + INFO_MSG("Strided textures do not support mipmaps"); + _glKosThrowError(GL_INVALID_VALUE, __func__); + return false; + } + + if(width != txr->strideWidth) { + INFO_MSG("Strided texture width must match GL_TEXTURE_STRIDE_KOS"); + _glKosThrowError(GL_INVALID_VALUE, __func__); + return false; + } + + if((txr->strideWidth % 32) != 0 || txr->strideWidth > GL_KOS_MAX_STRIDE_WIDTH) { + INFO_MSG("Invalid strided texture width"); + _glKosThrowError(GL_INVALID_VALUE, __func__); + return false; + } + + if(height <= 0) { + INFO_MSG("Invalid strided texture height"); + _glKosThrowError(GL_INVALID_VALUE, __func__); + return false; + } + + if(_glIsTwiddledFormat(cleanInternalFormat)) { + INFO_MSG("Strided textures must use non-twiddled storage"); + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return false; + } + + if(_glIsPalettedFormat(cleanInternalFormat)) { + INFO_MSG("Strided paletted textures are unsupported"); + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return false; + } + + if(_glIsCompressedFormat(cleanInternalFormat)) { + INFO_MSG("Strided compressed textures are unsupported"); + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return false; + } + } + GLuint w = width; GLuint h = height; if(level == 0){ - if(!_glValidTextureSize(w)) { + if(!isStrided && !_glValidTextureSize(w)) { /* Width is not a power of two. Must be!*/ INFO_MSG("Unsupported width"); _glKosThrowError(GL_INVALID_VALUE, __func__); @@ -1510,7 +1642,7 @@ static bool _glTexImage2DValidate(GLenum target, GLint level, GLint internalForm } - if(!_glValidTextureSize(h)) { + if(!isStrided && !_glValidTextureSize(h)) { /* height is not a power of two. Must be!*/ INFO_MSG("Unsupported height"); _glKosThrowError(GL_INVALID_VALUE, __func__); @@ -1630,10 +1762,6 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLenum format, GLenum type, const GLvoid *data) { TRACE(); - if(!_glTexImage2DValidate(target, level, internalFormat, width, height, border, format, type)) { - return; - } - gl_assert(ACTIVE_TEXTURE < MAX_GLDC_TEXTURE_UNITS); TextureObject* active = TEXTURE_UNITS[ACTIVE_TEXTURE]; @@ -1643,21 +1771,33 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, return; } + GLenum cleanInternalFormat = _cleanInternalFormatForTexture(active, internalFormat); + + if(!_glTexImage2DValidate(active, target, level, internalFormat, cleanInternalFormat, width, height, border, format, type)) { + return; + } + GLboolean isPaletted = ( internalFormat == GL_COLOR_INDEX8_EXT || internalFormat == GL_COLOR_INDEX4_EXT || internalFormat == GL_COLOR_INDEX4_TWID_KOS || internalFormat == GL_COLOR_INDEX8_TWID_KOS ) ? GL_TRUE : GL_FALSE; - GLenum cleanInternalFormat = _cleanInternalFormat(internalFormat); + GLuint pvrFormat = _determinePVRFormat(cleanInternalFormat); GLuint originalId = active->index; + GLboolean isStrided = active->strideWidth ? GL_TRUE : GL_FALSE; + GLuint texturePitch = isStrided ? active->strideWidth : (GLuint) width; + GLuint pvrWidth = isStrided ? _glNextPowerOfTwo((GLuint) width) : (GLuint) width; + GLuint pvrHeight = isStrided ? _glNextPowerOfTwo((GLuint) height) : (GLuint) height; if(active->data && (level == 0)) { /* pre-existing texture - check if changed */ if(active->width != width || active->height != height || - active->internalFormat != cleanInternalFormat) { + active->internalFormat != cleanInternalFormat || + active->isStrided != isStrided || + active->strideWidth != (isStrided ? texturePitch : 0)) { /* changed - free old texture memory */ alloc_free(ALLOC_BASE, active->data); active->data = NULL; @@ -1676,7 +1816,8 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLint destStride = _determineStrideInternal(cleanInternalFormat); GLint sourceStride = _determineStride(format, type); GLuint srcBytes = ((GLuint)width * (GLuint)height * (GLuint)sourceStride); - GLuint destBytes = ((GLuint)width * (GLuint)height * (GLuint)destStride); + GLuint texelCount = texturePitch * (GLuint)height; + GLuint destBytes = texelCount * (GLuint)destStride; TextureConversionFunc conversion = NULL; int needs_conversion = _determineConversion(cleanInternalFormat, format, type, &conversion); @@ -1703,6 +1844,14 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, /* need texture memory */ active->width = width; active->height = height; + active->logicalWidth = width; + active->logicalHeight = height; + active->pvrWidth = pvrWidth; + active->pvrHeight = pvrHeight; + active->isStrided = isStrided; + if(!isStrided) { + active->strideWidth = 0; + } active->color = pvrFormat; active->internalFormat = cleanInternalFormat; /* Set the required mipmap count */ @@ -1745,6 +1894,13 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLubyte* targetData = (active->baseDataOffset == 0) ? active->data : _glGetMipmapLocation(active, level); gl_assert(targetData); + if(!data) { + MEMSET4(targetData, 0x0, destBytes); + gl_assert(active->index == originalId); + _glGPUStateMarkDirty(); + return; + } + if(needs_conversion < 0) { _glKosThrowError(GL_INVALID_VALUE, __func__); INFO_MSG("Couldn't find necessary texture conversion\n"); @@ -1842,7 +1998,6 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, } else { /* No conversion necessary, we can just upload data directly */ gl_assert(targetData); - gl_assert(data); gl_assert(destBytes); /* No conversion? Just copy the data, and the pvr_format is correct */ @@ -1931,6 +2086,21 @@ void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) { case GL_SHARED_TEXTURE_BANK_KOS: active->shared_bank = param; break; + case GL_TEXTURE_STRIDE_KOS: + if(active->data) { + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return; + } + + if(param < 0 || + (param != 0 && ((param % 32) != 0 || param > GL_KOS_MAX_STRIDE_WIDTH))) { + _glKosThrowError(GL_INVALID_VALUE, __func__); + return; + } + + active->strideWidth = (GLushort) param; + active->isStrided = (param != 0) ? GL_TRUE : GL_FALSE; + break; default: break; } @@ -2155,22 +2325,21 @@ void APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint y return; } + if(active->isStrided && level != 0) { + _glKosThrowError(GL_INVALID_VALUE, __func__); + return; + } + // Retrieve the dimensions of the currently bound texture - GLsizei textureWidth = active->width; - GLsizei textureHeight = active->height; + GLsizei textureWidth = active->logicalWidth ? active->logicalWidth : active->width; + GLsizei textureHeight = active->logicalHeight ? active->logicalHeight : active->height; + GLsizei texturePitch = active->isStrided ? active->strideWidth : textureWidth; if (!_glTexSubImage2DValidate(target, level, xoffset, yoffset, width, height, format, type, textureWidth, textureHeight)) { INFO_MSG("Error: _glTexSubImage2DValidate failed\n"); return; } - GLboolean isPaletted = ( - active->internalFormat == GL_COLOR_INDEX8_EXT || - active->internalFormat == GL_COLOR_INDEX4_EXT || - active->internalFormat == GL_COLOR_INDEX4_TWID_KOS || - active->internalFormat == GL_COLOR_INDEX8_TWID_KOS - ) ? GL_TRUE : GL_FALSE; - GLenum cleanInternalFormat = _cleanInternalFormat(active->internalFormat); // Determine source stride @@ -2181,7 +2350,7 @@ void APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint y GLint destStride = _determineStrideInternal(cleanInternalFormat); // Calculate destBytes using the texture's full dimensions - GLuint destBytes = (textureWidth * textureHeight * destStride); + GLuint destBytes = (texturePitch * textureHeight * destStride); TextureConversionFunc conversion = NULL; int needs_conversion = _determineConversion(cleanInternalFormat, format, type, &conversion); @@ -2220,7 +2389,7 @@ void APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint y } if (needs_conversion == CONVERSION_TYPE_CONVERT) { for (uint32_t y = 0; y < height; ++y) { - dst = conversionBuffer + ((y + yoffset) * textureWidth + xoffset) * destStride; + dst = conversionBuffer + ((y + yoffset) * texturePitch + xoffset) * destStride; for (uint32_t x = 0; x < width; ++x) { conversion(src, dst); dst += destStride; @@ -2269,7 +2438,7 @@ void APIENTRY glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint y // No conversion necessary, we can update data directly for (GLsizei y = 0; y < height; ++y) { GLsizei srcRowWidth = width * sourceStride; - GLubyte* destRow = targetData + ((y + yoffset) * textureWidth + xoffset) * destStride; + GLubyte* destRow = targetData + ((y + yoffset) * texturePitch + xoffset) * destStride; FASTCPY(destRow, (GLubyte*)data + y * srcRowWidth, srcRowWidth); } } diff --git a/include/GL/glkos.h b/include/GL/glkos.h index 524212d..11f8876 100644 --- a/include/GL/glkos.h +++ b/include/GL/glkos.h @@ -214,4 +214,13 @@ GLAPI GLvoid APIENTRY glDefragmentTextureMemory_KOS(void); /* If enabled, will twiddle texture uploads where possible */ #define GL_TEXTURE_TWIDDLE_KOS 0xEF51 +/* + * CUSTOM EXTENSION GL_KOS_texture_stride + * + * Allows explicitly opting a texture into the Dreamcast PVR's non-twiddled + * x32 strided texture mode. Pass GL_TEXTURE_STRIDE_KOS to glTexParameteri + * before glTexImage2D. The stride is specified in pixels. + */ +#define GL_TEXTURE_STRIDE_KOS 0xEF52 + __END_DECLS diff --git a/samples/nehe06_strided/main.c b/samples/nehe06_strided/main.c new file mode 100644 index 0000000..495935c --- /dev/null +++ b/samples/nehe06_strided/main.c @@ -0,0 +1,192 @@ +#include +#include +#include +#include + +#ifdef _arch_dreamcast +#include +#endif + +#include "GL/gl.h" +#include "GL/glu.h" +#include "GL/glext.h" +#include "GL/glkos.h" + +#ifdef _arch_dreamcast +extern uint8_t romdisk[]; +KOS_INIT_ROMDISK(romdisk); +#define IMAGE_FILENAME "/rd/NeHe.bmp" +#else +#define IMAGE_FILENAME "../samples/nehe06_strided/romdisk/NeHe.bmp" +#endif + +#include "../loadbmp.h" + +/* floats for x rotation, y rotation, z rotation */ +float xrot, yrot, zrot; + +/* storage for one texture */ +GLuint texture[1]; + +// Load Bitmaps And Convert To Textures +void LoadGLTextures() { + // Load Texture + Image *image1; + + // allocate space for texture + image1 = (Image *) malloc(sizeof(Image)); + if (image1 == NULL) { + printf("Error allocating space for image"); + exit(0); + } + + if (!ImageLoad(IMAGE_FILENAME, image1)) { + exit(1); + } + + printf("Loaded strided texture %dx%d\n", image1->sizeX, image1->sizeY); + + // Create Texture + glGenTextures(1, &texture[0]); + glBindTexture(GL_TEXTURE_2D, texture[0]); // 2d texture (x and y size) + + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // scale linearly when image bigger than texture + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smaller than texture + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, image1->sizeX); + + // 2d texture, level of detail 0 (normal), 3 components (red, green, blue), x size from image, y size from image, + // border 0 (normal), rgb color data, unsigned byte data, and finally the data itself. + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image1->sizeX, image1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, image1->data); + free(image1); +} + +/* A general OpenGL initialization function. Sets all of the initial parameters. */ +void InitGL(int Width, int Height) // We call this right after our OpenGL window is created. +{ + LoadGLTextures(); + glEnable(GL_TEXTURE_2D); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // This Will Clear The Background Color To Black + glClearDepth(1.0); // Enables Clearing Of The Depth Buffer + glDepthFunc(GL_LESS); // The Type Of Depth Test To Do + glEnable(GL_DEPTH_TEST); // Enables Depth Testing + glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); // Reset The Projection Matrix + + gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); // Calculate The Aspect Ratio Of The Window + + glMatrixMode(GL_MODELVIEW); +} + +/* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */ +void ReSizeGLScene(int Width, int Height) +{ + if (Height == 0) // Prevent A Divide By Zero If The Window Is Too Small + Height = 1; + + glViewport(0, 0, Width, Height); // Reset The Current Viewport And Perspective Transformation + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + + gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); + glMatrixMode(GL_MODELVIEW); +} + +int check_start() { +#ifdef _arch_dreamcast + maple_device_t *cont; + cont_state_t *state; + + cont = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); + + if(cont) { + state = (cont_state_t *)maple_dev_status(cont); + + if(state) + return state->buttons & CONT_START; + } +#endif + + return 0; +} + +/* The main drawing function. */ +void DrawGLScene() +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer + glLoadIdentity(); // Reset The View + + glTranslatef(0.0f,0.0f,-5.0f); // move 5 units into the screen. + + glRotatef(xrot,1.0f,0.0f,0.0f); // Rotate On The X Axis + glRotatef(yrot,0.0f,1.0f,0.0f); // Rotate On The Y Axis + glRotatef(zrot,0.0f,0.0f,1.0f); // Rotate On The Z Axis + + glBindTexture(GL_TEXTURE_2D, texture[0]); // choose the texture to use. + + glBegin(GL_QUADS); // begin drawing a cube + + // Front Face (note that the texture's corners have to match the quad's corners) + glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad + + // Back Face + glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad + glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad + + // Top Face + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad + glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Texture and Quad + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Texture and Quad + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad + + // Bottom Face + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Top Right Of The Texture and Quad + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Top Left Of The Texture and Quad + glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad + glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad + + // Right face + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // Top Right Of The Texture and Quad + glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Texture and Quad + glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // Bottom Left Of The Texture and Quad + + // Left Face + glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad + glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Right Of The Texture and Quad + glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Texture and Quad + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // Top Left Of The Texture and Quad + + glEnd(); // done with the polygon. + + xrot+=1.5f; // X Axis Rotation + yrot+=1.5f; // Y Axis Rotation + zrot+=1.5f; // Z Axis Rotation + // + // swap buffers to display, since we're double buffered. + glKosSwapBuffers(); +} + +int main(int argc, char **argv) +{ + glKosInit(); + + InitGL(640, 480); + ReSizeGLScene(640, 480); + + while(1) { + if(check_start()) + break; + + DrawGLScene(); + } + + return 0; +} diff --git a/samples/nehe06_strided/romdisk/NeHe.bmp b/samples/nehe06_strided/romdisk/NeHe.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e1c652e76887e533845c9cd34cfe9c59dd8c1f13 GIT binary patch literal 287370 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 z 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 qU;g{Q{K!00CG49R7dUInST~ literal 0 HcmV?d00001 diff --git a/samples/nehe06_strided/romdisk/PLACEHOLDER b/samples/nehe06_strided/romdisk/PLACEHOLDER new file mode 100644 index 0000000..e69de29 diff --git a/samples/nehe20_strided/main.c b/samples/nehe20_strided/main.c new file mode 100644 index 0000000..e274fa3 --- /dev/null +++ b/samples/nehe20_strided/main.c @@ -0,0 +1,279 @@ +/* DREAMCAST + *IAN MICHEAL Ported SDL+OPENGL USING SDL[DREAMHAL][GLDC][KOS2.0]2021 + * Cleaned and tested on dreamcast hardware by Ianmicheal + * This Code Was Created By Pet & Commented/Cleaned Up By Jeff Molofee + * If You've Found This Code Useful, Please Let Me Know. + * Visit NeHe Productions At http://nehe.gamedev.net + */ + +#include // Header File For Windows Math Library +#include // Header File For Standard Input/Output +#include +#include + + +#ifdef _arch_dreamcast +#include +#endif + +#define FPS 60 +uint32_t waittime = 1000.0f/FPS; +uint32_t framestarttime = 0; +int32_t delaytime; + +#ifdef _arch_dreamcast +extern uint8_t romdisk[]; +KOS_INIT_ROMDISK(romdisk); +#define IMG_LOGO_PATH "/rd/logo.bmp" +#define IMG_MASK1_PATH "/rd/mask1.bmp" +#define IMG_IMAGE1_PATH "/rd/image1.bmp" +#define IMG_MASK2_PATH "/rd/mask2.bmp" +#define IMG_IMAGE2_PATH "/rd/image2.bmp" +#else +#define IMG_LOGO_PATH "../samples/nehe20_strided/romdisk/logo.bmp" +#define IMG_MASK1_PATH "../samples/nehe20_strided/romdisk/mask1.bmp" +#define IMG_IMAGE1_PATH "../samples/nehe20_strided/romdisk/image1.bmp" +#define IMG_MASK2_PATH "../samples/nehe20_strided/romdisk/mask2.bmp" +#define IMG_IMAGE2_PATH "../samples/nehe20_strided/romdisk/image2.bmp" +#endif + +#include "../loadbmp.h" + +/* + * This Code Was Created By Jeff Molofee 2000 + * And Modified By Giuseppe D'Agata (waveform@tiscalinet.it) + * If You've Found This Code Useful, Please Let Me Know. + * Visit My Site At nehe.gamedev.net + */ + +#include // Header File For Windows Math Library +#include // Header File For Standard Input/Output +#include + +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#endif +#if defined(__APPLE__) && defined(__MACH__) +#include // Header File For The OpenGL32 Library +#include // Header File For The GLu32 Library +#elif defined(_arch_dreamcast) +#include +#include // Header File For The OpenGL32 Library +#include // Header File For The GLu32 Library +#include +#else +#include // Header File For The OpenGL32 Library +#include +#include // Header File For The GLu32 Library +#endif + +#define BOOL int +#define FALSE 0 +#define TRUE 1 + + +uint8_t* keys; // Array Used For The Keyboard Routine +BOOL active=TRUE; // Window Active Flag Set To TRUE By Default +BOOL fullscreen=FALSE; // Fullscreen Flag Set To Fullscreen Mode By Default +BOOL masking=TRUE; // Masking On/Off +BOOL mp; // M Pressed? +BOOL sp; // Space Pressed? +BOOL scene; // Which Scene To Draw + +GLuint texture[5]; // Storage For Our Five Textures +GLuint loop; // Generic Loop Variable + +GLfloat roll; // Rolling Texture + +int LoadGLTextures() // Load Bitmaps And Convert To Textures +{ + int Status=FALSE; // Status Indicator + + Image TextureImage[5]; + + if ((ImageLoad(IMG_LOGO_PATH, &TextureImage[0])) && // Logo Texture + (ImageLoad(IMG_MASK1_PATH, &TextureImage[1])) && // First Mask + (ImageLoad(IMG_IMAGE1_PATH, &TextureImage[2])) && // First Image + (ImageLoad(IMG_MASK2_PATH, &TextureImage[3])) && // Second Mask + (ImageLoad(IMG_IMAGE2_PATH, &TextureImage[4]))) // Second Image + { + Status=TRUE; // Set The Status To TRUE + glGenTextures(5, &texture[0]); // Create Five Textures + + for (loop=0; loop<5; loop++) // Loop Through All 5 Textures + { + glBindTexture(GL_TEXTURE_2D, texture[loop]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + if (loop == 0) + { + printf("Uploading strided logo texture %dx%d\n", + TextureImage[loop].sizeX, TextureImage[loop].sizeY); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, TextureImage[loop].sizeX); + } + glTexImage2D( + GL_TEXTURE_2D, 0, 3, + TextureImage[loop].sizeX, + TextureImage[loop].sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, + TextureImage[loop].data + ); + } + } + + return Status; // Return The Status +} + +GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize And Initialize The GL Window +{ + if (height==0) // Prevent A Divide By Zero By + { + height=1; // Making Height Equal One + } + + glViewport(0,0,width,height); // Reset The Current Viewport + glMatrixMode(GL_PROJECTION); // Select The Projection Matrix + glLoadIdentity(); // Reset The Projection Matrix + gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); // Calculate Window Aspect Ratio + glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix + glLoadIdentity(); // Reset The Modelview Matrix +} + +int InitGL(GLvoid) // All Setup For OpenGL Goes Here +{ + if (!LoadGLTextures()) // Jump To Texture Loading Routine + { + return FALSE; // If Texture Didn't Load Return FALSE + } + + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Clear The Background Color To Black + glClearDepth(1.0); // Enables Clearing Of The Depth Buffer + glEnable(GL_DEPTH_TEST); // Enable Depth Testing + glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading + glEnable(GL_TEXTURE_2D); // Enable 2D Texture Mapping + return TRUE; // Initialization Went OK +} + +int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer + glLoadIdentity(); // Reset The Modelview Matrix + glTranslatef(0.0f,0.0f,-2.0f); // Move Into The Screen 5 Units + + glBindTexture(GL_TEXTURE_2D, texture[0]); // Select Our Logo Texture + glBegin(GL_QUADS); // Start Drawing A Textured Quad + glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.1f, -1.1f, 0.0f); // Bottom Left + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.1f, -1.1f, 0.0f); // Bottom Right + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.1f, 1.1f, 0.0f); // Top Right + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.1f, 1.1f, 0.0f); // Top Left + glEnd(); // Done Drawing The Quad + + glEnable(GL_BLEND); // Enable Blending + glDisable(GL_DEPTH_TEST); // Disable Depth Testing + + if (masking) // Is Masking Enabled? + { + glBlendFunc(GL_DST_COLOR,GL_ZERO); // Blend Screen Color With Zero (Black) + } + + if (scene) // Are We Drawing The Second Scene? + { + glTranslatef(0.0f,0.0f,-1.0f); // Translate Into The Screen One Unit + glRotatef(roll*360,0.0f,0.0f,1.0f); // Rotate On The Z Axis 360 Degrees. + if (masking) // Is Masking On? + { + glBindTexture(GL_TEXTURE_2D, texture[3]); // Select The Second Mask Texture + glBegin(GL_QUADS); // Start Drawing A Textured Quad + glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.1f, -1.1f, 0.0f); // Bottom Left + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.1f, -1.1f, 0.0f); // Bottom Right + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.1f, 1.1f, 0.0f); // Top Right + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.1f, 1.1f, 0.0f); // Top Left + glEnd(); // Done Drawing The Quad + } + + glBlendFunc(GL_ONE, GL_ONE); // Copy Image 2 Color To The Screen + glBindTexture(GL_TEXTURE_2D, texture[4]); // Select The Second Image Texture + glBegin(GL_QUADS); // Start Drawing A Textured Quad + glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.1f, -1.1f, 0.0f); // Bottom Left + glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.1f, -1.1f, 0.0f); // Bottom Right + glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.1f, 1.1f, 0.0f); // Top Right + glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.1f, 1.1f, 0.0f); // Top Left + glEnd(); // Done Drawing The Quad + } + else // Otherwise + { + if (masking) // Is Masking On? + { + glBindTexture(GL_TEXTURE_2D, texture[1]); // Select The First Mask Texture + glBegin(GL_QUADS); // Start Drawing A Textured Quad + glTexCoord2f(roll+0.0f, 0.0f); glVertex3f(-1.1f, -1.1f, 0.0f); // Bottom Left + glTexCoord2f(roll+4.0f, 0.0f); glVertex3f( 1.1f, -1.1f, 0.0f); // Bottom Right + glTexCoord2f(roll+4.0f, 4.0f); glVertex3f( 1.1f, 1.1f, 0.0f); // Top Right + glTexCoord2f(roll+0.0f, 4.0f); glVertex3f(-1.1f, 1.1f, 0.0f); // Top Left + glEnd(); // Done Drawing The Quad + } + + glBlendFunc(GL_ONE, GL_ONE); // Copy Image 1 Color To The Screen + glBindTexture(GL_TEXTURE_2D, texture[2]); // Select The First Image Texture + glBegin(GL_QUADS); // Start Drawing A Textured Quad + glTexCoord2f(roll+0.0f, 0.0f); glVertex3f(-1.1f, -1.1f, 0.0f); // Bottom Left + glTexCoord2f(roll+4.0f, 0.0f); glVertex3f( 1.1f, -1.1f, 0.0f); // Bottom Right + glTexCoord2f(roll+4.0f, 4.0f); glVertex3f( 1.1f, 1.1f, 0.0f); // Top Right + glTexCoord2f(roll+0.0f, 4.0f); glVertex3f(-1.1f, 1.1f, 0.0f); // Top Left + glEnd(); // Done Drawing The Quad + } + + glEnable(GL_DEPTH_TEST); // Enable Depth Testing + glDisable(GL_BLEND); // Disable Blending + + roll+=0.002f; // Increase Our Texture Roll Variable + if (roll>1.0f) // Is Roll Greater Than One + { + roll-=1.0f; // Subtract 1 From Roll + } + + glKosSwapBuffers(); + + return TRUE; // Everything Went OK +} + +int main(int argc, char *argv[]) +{ + glKosInit(); + + InitGL(); + ReSizeGLScene(640, 480); + +#ifdef _arch_dreamcast + maple_device_t* cont = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); + assert(cont); +#endif + + while(1) { + DrawGLScene(); + +#ifdef _arch_dreamcast + cont_state_t* state = (cont_state_t *)maple_dev_status(cont); + + if((state->buttons & CONT_A) && !sp) { + sp = TRUE; + scene = !scene; + } else { + sp = FALSE; + } + + if((state->buttons & CONT_B) && !mp) { + mp = TRUE; + masking = !masking; + } else { + mp = FALSE; + } + + if(state->buttons & CONT_START) { + break; + } +#endif + } + + return 0; +} diff --git a/samples/nehe20_strided/romdisk/image1.bmp b/samples/nehe20_strided/romdisk/image1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a89fdd283c53100c3e6620addfca5c0dabd26a1d GIT binary patch literal 196664 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 EEjOcX1poj5 literal 0 HcmV?d00001 diff --git a/samples/nehe20_strided/romdisk/image2.bmp b/samples/nehe20_strided/romdisk/image2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9536a2b5f368353aa8e76457f6f16a09d0707f82 GIT binary patch literal 196662 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 literal 0 HcmV?d00001 diff --git a/samples/nehe20_strided/romdisk/logo.bmp b/samples/nehe20_strided/romdisk/logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e7ad8fcbc5f682af2ac8290bb1c878a532bc8240 GIT binary patch literal 230538 zcmeF42Y6M**05K4LMQazdj~}n5D=x4P^1b-kq%0c-a_vXdM}}c4x#tnJ5rQ@C`C{Z z1?iCF{O{V6oE#94?|xVB{l90=vpMXXv&+ny)z_LeA5|SO$V0S^;9qb4m39-k%l~eY zl201HCy6W8Kl6otI${p%kB`dN=p6go+nss7-DUPwHUw-4*buNGU_-!$fDHi~0yYF} z2-py?Az(wmhJXzL8v-^2YzWv8upwYWz=nVg0UH7~1Z)V{5U?R&L%@cB4FMYhHUw-4 z*buNGU_-!$fDHi~0yYF}2-py?Az(wmhJXzL8v-^2YzWv8upwYWz=nVg0UH7~1Z)V{ z5U?R&L%@cB4FMYhHUw-4*buNGU_-!$fDHi~0yYF}2-py?Az(wmhJXzL8v-^2YzWv8 zupwYWz=nVg0UH7~1Z)V{5U?R&L%@cB4FMYhHUw-4*buNGU_-!$fDHi~0yYF}2-py? zAz(wmhJXzL8v-^2YzWv8upwYWz=nVg0UH7~1Z)Vr5dsMkNaDnjDutv=BPml#rVNrk zoup1JsZvSmH2Rq$g?`UxvSgAbl_X0lK0a@J;v0YDUY?LPrKC(D$&*XEw2~pcKAab& zO(Q9iTW?9NU7}+N6H1~)dXgxyB=-Mbz4wis`cMAo;bDy~vG^xZfBFOCky5{U^KnZ+W-3m!vYoNftf(DXn2L&_*}tW$ z|FsW^6IXE~eFn*#St?YJI(4Ld8|mF$dUTf&L!@6{>DFC(^^pF(rB65M)>XQ9k*=Mj zeS7KDUK)NTMT<(>v`XU~-rj#bN-w4?m7-O=qmudrP&!j4$(T`}sT?4k;x_cI z7@kaz3>oy-^y&44D>J24&H(30l}!Bo_3-q3q0b58Nb;C_xrCsgN^pa5n<*P5HX)|foPy)(nXMiO4z8Ss!{FEnWNUg(%1Hg(ILgq}8 z9ne|b%brzoWR~pNBztxR7d@fdT*gV-bUMGBWX&pBvgr3_y4~Df0fD#q%H2)UB$rh1 zrHoSYeQDQJTDOvR?WA9C89q>Yb(NkyWMDu2vv*I$x-Y(vh7F~7aqWqjUw4nUdCv>i zc>CzR0N)@<=8Td7d6d$co%E6{@e3FK|MG{syX43!mC8%ACejgX>8i9daG(T_mg$pa z!2(%4PZrIQd2=Lmo~&CSOJ>W0d9s9Kj!d5}LxxK4-qN|VVpNCr@_8dESTGvBk(GaL z;3{zYpqPC2nKWxA!}`j|LHfE$6J*L1nLl6V&6C-)W#N2THCN`(lv&onul@VW$bmAr zpY-Y_1N+O^Ael5o#txJL-KAS6`I-)VB`umslZMiyu~e%j)dQqPb@}vDY4n-2Z7c2C zE4S&;LArh|1G-A5FQr8jX;4e5R+WksC0jPd;VhYSHZ!J?N*_uco=`*T)|EDGq+=(g z8oCO5Y1vY~YA5a6O5@L^as{PmXvgp(WMa0=QmK^G3Xp2mrA}RG-A2A@CEYqm&+ZB$ zy3w+^H2GZW)m28st1DNQ@}I~jWtC^r;f8gkZ7b>1Q^pOHaYJR=WC@)sD;LP3MKWu) z%$zCnX328CnJ3eyN$@xsHC+1lkuSeg^lsEZN|sPmq%$Zd@#0xpN+RVC>C;H|%u?(< zsaH$7w3PNu^(}3nmsSe5p}nMQXX)Bag8E2MH|f<=A>6Htbo?qBT)n!;*BzCS_UJ7A zgQQ0foom4I`R9@^pXAP|8XD93mMv~P{&YAka@Cjfy|yM!NGbA8>0Bxy0y;lyG10a|69IOL6J4HlqxArn@auq+Vi&Uq(>L& z+ewO@0OiAW#1nCbL&=Fu|k%I%7VEv1NcvrL4%}6Pi3T# zXZiAyE4MOCxEw?QC(oN#KKVo$1#+YxZyX_u=gNvuS+`nFACR3p^x+2%$o~DZdzYLz zAg2z?j%~7WogCUOYrDgEVh0Uo@2_jihcZ zY2QdXww5kmORwJ2FGz+Ak>ooN!Q(jE7`K%D53SWxPxnC8LMSs1Y(|m<$=L z>~!pCnKDkskCd4()fqao6UWK?>9TN^jJF0dbf{`&{d)=2-L|#zB5(;=@aBfhE%|{o zs4tz`%HaModA!V;p}czID%rMGwr!Jx`{npy*$s9bu*SPr_Ux8}d-c~18)d_4CG7zN zbc)eTss~E0Tq;aorv|8+ms;}VQFaPDfeNL-oNix#`RHI<=dUV7Up8vJXyO!HmsGS`{dYB#f?$Jq|FzK*iD*B z<0dLA70In{IDwDx8Prd9ZwMs1Tt0Vj6$R0Vk zNA~TK%^PJ&s7xKF((22vRJ}(wF*Kz7(4I13gv_2Ho0iMgHL`89?B%X~%ANM|>aDV6 zt;}B_W5!5Okbe=1GtDsw;u4IUvgC&@w-r^U)MH?NeP z>tu77Y}+Wi*2|jZvV5_A3HOFWt__nd>t+24*}h4~yKRd?3_3czTebqawX$NR(p}g* znLJK)us(gHabqc5Sheen8P#TSZ7BA9iCSK*l6>7(h6l;iU|G3Tc5Ja2)Dgv;u3c2O z0nH3*IWd86I8X^TZj_TpW%pKDvP44X%czmkvzMwg0Rj5tKidvyAo=r1{hDfqaQpD# zD&JQumkldr-5S}rNp|g&{d;7?dRe|g)+~_~Au?{PDs`~a(q&Yw`tNMmdhfj_t()pZ zj~p(G=g7(xvVX4}J))#nx1Nd;R7&LLUp6FowW?}`HK?obKXOo|!!FQ!ostYZ0q#9% zgpBSlgZs#!K00x*@kR4w{Yn)s$ZiBB@4~8jT|={N&_Me3mGE$JIFv;r+`-;vjiq@b zX;4q49@aV%5V=$PQ?(YiZjoIZWz#CzvO(E+=TEw2{6DVLh4Yo+#5N$mG!~ z{gGdjM#=2S@?~2oUrs))p{NyDO*?7sBxgYm&5WBcFV% zdONy0FsFNr0=ZeQw$!g9)dHnTW&O2MB|V(KHms+8u3KAb*V0h{K;VW7idu5$kR0AC z8`sMcUOGdD4pWAMk;1QKKbBlMBzt#N2uJ`nVLB=X_?vURO2n664AY!h&mDkdqD#@+-2`JlLZX5d`| zu(rm^;2>$)Sciu0%_wTtj2;ow0T60f#tYU2D%OxeYAA6HE{m5OBe5^|51l1XDz&Oh zr;ajms4SW#Tf^kgZaH;St(yuJr9gpyy<3zS-)E9)p^|m{*~`>1cCOD!?ba-cf0Bss5c>VW%vj+1ioyceDaI>(yXR@7AW;= ztFeILj5f7+iEQ1b42P-w@B?)r{*M}9=e?L|+cqhJEngth$EnuTyom&SB879S8vjl~ zsa`>vG>}eT$=D%kN~51(K_q%3vblRmzPxIb0V@PCPFi?-+&KTE-u=B7Bg;PfO#1bb zSrcRxn6^VUu2o~Faz#n>BCg_>K;(smz3Eu7RK^aL0{LF%QMgc$?=4%&(W7$uq#S}( zZq>;>xl66uW5?8*gL~r&cD8~A-BzxQ6BgzZ7M3b3EOS^`qOh>Mt5+w0tCub7yh<${ ze8n`l>&%%R)@A;5a^|d9g$>Ss<0rXrN{%0q3uja>1-&^?@SMXzZ!c0L`muN;kp+hi z%ii6pC88CeE+WeseI9+m>+U7W1F9@rCR?`3cJA6B+tvC5YwO*cF#;3surRN%Fwd~Clwo1H!ot#ph54;s z?S_{RVt2OG$)!{YwP=nXRchLVmb*gM;#*iE>zB&uebK%0Pb{Mb$h^riajddX4(1|w zs7x3m6UNE}%L+z(BTTV~XN{NXV`bT5RS8f+UfJ-B)%jHQkYh*G)(Bf7i>69&f9csl zc_7wP%jRmU@`|ZbWa&~hcIY{57Qi|iTy(|^KWnh=)_55*gUt~ZmOd=ZjR}JAQIeev z&pC*JR7Dn}`6Gx2_Lo-8<+D0cubxyxnAX#`4`igXR6~ZPC?x%aU;8R zaXfl>`k1;jX-x63VGZ)SOpf$`%*Rh}{mS|x{(*ZXA89?LpD zAQ#VT_{=mksLh*`Ivn)S&EfENINY80!cU-I?mBi*P9Kt8+f?rV_^o`^T5pAq-MA6^ zQqK9tG{ja!MC?zz9p%ues^!TI+}yWsbGvshwZoCs;fU*S zqN37Wx|Dh5OgDtDvHpPnJ4IAGMY1!T;|Jx`K~;6=7z_>n6%DfvrhWFLoH(Wo7N6LW zBl7)uIe%IXA5sI8Prf{VMsEBlw{Oa`huTkii_Zbe$Q)rSl`x&tZQ?Q?eWZ}wy+d}a zm6ajtEu1=Dy%58P$fR*<&OqI}b}I&=mpWVV;+_*H#yxn@BQny<;Yb@Zr+FQY4;+qM z4o7-x?D3yI^*wdU6F*7m;$pCjx0fp?bLVQ8@Y_t8tUjpToz*tMU4!`O-d#P7TUIMR zqt$23sPBaTqn6yd6$^YuhcaNqgrA>U7B~+f;kmQaENa$BLlXbl=IyPH1>y^^Bc#Cc z^(o zBcma9{CKPmOvmWY-Mf%2WSGg}NEQ{9A|fK|^XGYM(PtF{Ir;&!)a_3I$)I>$8;>6H6)~|Pd??!K-Ak#4O zzx`Hz{z1KAr;kfGh<#ih+*jwSX&xSN)~|E+-7wFeR6 z-yN6s&GlBO^~x3VQcnhW<%)X@{qlr35fKR-4h|pe`flB#-vz6wSI_Op5znVj;AZI@ zj(iSB;i#yBk&!u{KhN;|IglwB5m6{I5`IE|QaT)|pFWL$?wkiQ6vq(_LN1VBjTBJy z`ZaY$?!%eCTlI4SCA8EjWzQxZDXwf7FWx@@X!?&{wEuvdJuA0w%i~A#{Fyv^?gZM4 zCsFE7T$Vix2VvA)Zdi*Hvk;85nye2dWORri{ zj_p=qggLw%-}q1s9OIo13X*Z-WWjvZh|u~8bg4D2{AC6 zt5(XmU=5R{OCQUr^rC;Z(Ip0pMK*e%%$cg5H>4F70VbHAk9GwOzhYVa9xcvwP|kC( z{pnMkP(026=t- zuw1z)f82{@wl4wm&ws)#xe?V1R%}}F_hs%BeIq^)oQ;@H9MBgsoi3ICBs#j9Jek|f z$#H-A$MMnBQe(ZbplyCpuUO93wSodt%yem}jpEWD{g9m9K=cp(YkCKs* zX)ay#tniVQ_%JyoVpRhJrG^fMEW^GmL5(!8EJtAD(rKi$164}_@x0QcNxp7fhG)-Euu&=f zEotb^L?Bpsg=sI*FJ!oCp?FyObBz2&2lkAJaC4@aaq1UBNxNvkDqjYd6a3E z{6$d4w?tk-hVat8KmRNzPAGojJ34nremE)ZUY5UThVfnGuc6-$qM{O``{9kDF;gj1 z`fc7EH!2EY#JhZ-J#)WsQrfprtKY?T&?^%rzyNXY*DpzUI4E5mtadn3+`H?6=rPda z8f-=;F)~W$==?c3dqzD-G_@C2M+e;?JtKcHE_UqDYmmHHOrGzyBtymZ*bEBvGYGg(4!7Igy`dR;sAX z!FfG6fZx@kL^mHF&mu*9&Yty~HPy3BNvCfOhMaoN9Be@JZOAbC-Z#+io!b&TMkj^G z#?Y_cg(?hiQ^oQ{3P(h^zjW{A%SyZu0`m9LS-JWB zpXDz%db!BoG?glS8WHhsWMq7tLKfS1OP$*5%$Y3Do?&G}>^_ekxnWDbUo09$L8=rf zytpQHYB%G-1E#*dZasRWymJRf!DkLfLx&^p>C>vv8YIM^#!Y9S1ft&kNjg~eFZ7E} zg7S>1d+wC#v`{f~4YxGY%FMp*z-xgQ2om_^7kTg?cJ7$#E8olD9?>)9MJ6s0lz`0?Er zEy{fVetF9=Qq$o`g{z@XP5qV7(#Idm{CTQa?%$=+?QN@NKSAv+8lu|2MbqicdkLJO zNg9~ojyQ8#u3S(i0|`LRc(jZlfCa(pj*+UgL8eSnJNo_iV-*a2nUo zViZ-gV+Vl-X+Q>@*6<=TB8KqmO<6WaQ{_>I02+-?QiZc-Rp4`Qk|s^Gropd_7kdF` zH7=>^*IyRmJQi?S0vCN1TLuzNXpkSOymDS5p2gw-LeQv}@#Fi|ub=h7gR)UkfzO}k zzkl0z;S5QcT;Jv9=GLdT8+MuLu=#ug{XV`cvnRe4{nF3dxPpI?hqqKxM7%PN}777yTLQKFgIWUNQP}vPzXoKYNzt)-7M-Hi;Y8^TQ9b z+_;g-GW6m;d**iLj5D3d&Ck!fWXX8ne_!n3!-5YVCfK~$GfNgXgK1t~3Coo$^6j_p zgol?556^%-f}_UZDia3_iUt(C^t#4$XvSX$x8dS_dsXv4dPL2`w`@EdddZzz!xNAs zIAdO+B>ba#^^F2hs1SCI*P};e*uscW{TCIJ!dVEP_IXG<6L|Z5odyA9dpzS9?|;9wX`eD^+?oA|iD}gtwtz zIH3`9&JH-~w`tQjmoDXkcpZ*P4o6j#!#lU*E|~4c8YNmldH0rD#k6wZ?R@2t zKc6n^z#gH&w@ZB}-t@#k=0vYJLo11%KDhV7vLg8 zg6t-OfFW=~E}oMM=TwEpcr=jwqOtrCzcrjsdoO_U=xdyO6ybzIv?Qttr!t;~g>HGmn z&Q&zu;pJPgB0g&6>gITz{6#6cbzNpy z@n44gX8rm3L%I8ldhqDduhyKtNWZGnn%Bi}Bn6eBQ1JGL@73`IIedFme*8v_R_CwQ zT`%d+sR9GbUA`PAW<>ESRmy6)qZt%$@pBnb+`fGYsSrjf?Qqnw0HV-%{3zb84N^!A zli0>0f)C#JDpe|JsZyRK(hwU3A)QciJeJ;F^QtX zA{VVd2kS+`r)h3(3D&RAY=y~)9MyF=>RU!Z#h-un#~L+njJ{GNPcH8gCHzX2@?o%5 zs<_RWqedJgxqq+f6^E>(@w>lk5Zov#BHn%b!XfEuoXAK|q8^RvNUbXB`G;FRc@jOp zptLjX5J#Nm{FAP^NYlbUtD&}}Q~X7D`tSS?-Hc@Q`Li{A^UZOoQ!Co>OZ*zg8YWEa zy6Ll z=_8$VTqqX(nurM==4i(e3Qv(D9zUt42o($KGR>7Mo^VmCc^530X2XUOckW>3;IBaR zRK9xEiS1sMD&Y!)BBHzT8r)FToe3oh3C#bJe(CBx5EYl*FY43a;ZD4=?ga_yq<;Tr z`sKzSFUr|t>MgnWjoi4X>p@(hVNqq0D_1;X2sT4tV4cgCC zH5xwV1nMIPmh~H3g2_V;yLM@q49*NK z^E8ZoQdLbuOpubnEStB$wDCEc_&9>BW5*nqF6Bl^c8-XV0@}xL) zh|oU_>O;#ZhY04tJ6G=h{XA{jP@Q2-;3k(!1rP_t&-Z@x*6W<_VNU31TyLp&`70~7Dt z6B>IWw}J3n>sC_nW7RtTfkvO1ruv`B=n=AXz8u)5&I%TnnFg6)xx~OwZ4+|f-+xbk z#Oy^fo;oE@pD6*}`AN4es(Dbz zrb?PAfzKAAQ|C`i%8*;yv_6+Faxb7mX-swNmOGwsqrGqgfa=g8<@D+AgoJ#seOu=5 z!#$}XU^PtXH2A@s{ddKUSc}i0QsdVfGUF}n-)Bm{zyB%^Zbvhy7wOl43#P#+U?8R^ z(c?vA|8PkmOwjP$5xIQo&;Dop$yr_O-_(JD6`k@IUroo3c=lfANRUQ}62ATVWe5o= z8WNH-BqUo%NTHCB;vpgLS)UaaF8nAow5WBw7aIEUf(0LkgcJw~Nfr{4E+oV+Bt+-Y z2_=jIltY@4zZgM~Few}tPRONWQpUm!od4&~S%v`locrX+ZjGKVT_#~93~W@pl6((X zE;1Urz|^IO@J8~4A#mr5IEe|pq0bjsw+>;N9tVP+TZf(x5~lv+p2yU&l0A$5f=D9i3+Enw zt!YzbaF8^p`425E1RA7^vn+1nSP3J+Z;R%{7PBan>0<#4VFD)%f4M0&NtKVUeZ~Wf z`yFBQ=$_^g9k;w3IPnN%K;tJ*$geL*ZL|(}8dh6eTwydP{ocQ$p4f9|l?PTdjs${rEnf9;wl1c;aHrItCPeAy_j6$Jzha(JvVL z>(4TE!duDT$M@y#uPR^E6=_KmRt}m5;_(XWb?CQA;6g9a?}K}CHC*9?{5^kEML@fk z^=CptX;Cm@1a8{Ez`)CwAZ=;wQZ@Z1j@CsPGpFdHq%~_*ywY2sMAEn+Np55Txa*60^)}sy zW#RCQNdH zr>F1c%@B1#E5(kuq!+Y9LnX+YN4BifC5>w#;mOjbtp_=Q87f)(D@wXdN;S>GINpz4EE7_f`Zrw!t_MrtC#+c;6 zgN!gkcrwD`y&~f6>AW!ZgseHVLFZ(>j(#6Ll3#w3Nn_uNez6PiM*eYMy=qafpx?Nb zA4XsLXZ@KZ((4yBc!7#S`qp*wCtvno;i$>{8u^>3e}6QP*x_*g%{Lm?iy`*df&Wj> zm>1V48%byA7x{}CY{Fhp@dw5A*(HkWI!7Eqi{|R0fMEl5T|ob?(ygPetRxb*Xr3nT zVN_oIQIjQ{?WGrO+pOz}5PTjUsWxteE^-+9h2FW>wM(4COo$|AdW*$w&e#3<#D&L3 zKOgOjoCg{%ucS%SY~5Pa@~D)&aYKFnmW3Yu7`RHGK3OhaL}|~42!8(DCq_lof==7l z%c&FUh^DXr!)*4smh}0%8{K1Z2kXaKVZ{1evgwkxx_!lRrSgt;J<=7|3oh05%pSw&jeOVeW=$u>6e!h z8E0XgvlS`gH)2GNbLTMJ$~qi1tNMp_I3!=xpUJ#J2Ugtp^Sw`=%1>A1w531e#X9$m zx(#WDn^||^s7dBx|Kh(YAEQ5~3kpJqiMHU(D=;UoUGrMACc~5|1%iW%1P2!m4$cuA z{9bTy8S68<^-Zqe;7q~6oEHoZ&JrA)A~-mSbtLT9&)viYULvcP=-0TQO(3aQG3_uK z8l@8O1(A8kg6PhaHDJkPb*WiRYFVpj$BvXGA*xFga#}b~xXVO~UVM>nB{wO%ORB&+K;NYy*!7w>_ zCpfrh3^bAl2dB1<1O#gTJikWG1662fhZcQ9?@F;QqR{ckec3afU*9uPYq^ zK&B6}#q6bZ=_&XfrQG~QxwFi$y>t?R+ zg#-{WRDHpFU|O6w?j=iRs9!%zqehw5tij!i(pB3!$~zqIKYd!@9|@bmpZz z&)3m!TtBS9J2(H_>u!&$0vdVD8cd2 z{qVEJxpm9UtnGS{tfD<~V1n^q8TzHefE3M{h7W{V3ivij=|uN#(@N@8*NnI_AIK-A zbiphV4U25~GF?-~6yxGHN*xBTAx7&{eYpe|pjKLr9BD&Cvv1uRO}~8aa-}&(Ie~+r zfRPKzaGE+C-5rh|4#$@c2M)|ntj_@Jq?$EkBq{DYJY9%OKlH;FIRkD4og=4*Dt&tQ zn>TUjaSQfuikmm1y@>hq>(F9ao__s+ApnPj(~(lnQb(Gnr$*sfiFuMbFza3i3S95J~O8fFOnCR1+ut& zS@H4YLbqhe;>?^G-&)}ny8?^ngA#M+>PS(!)vB@%mNSGOjrNVW(l2jE#$kgqn-t4> zsb$UT5fG3hARv8UVETZ7G|QI*QgkquDrB_M8)7?eM)5lO{r#r=d?|YU;7gnz2)N9z zdRF1Od`Yj+%wHvc%}b#&)*ZZ@KS?);w)_eSpVj~`~w7MnFIcAY*-*JRl$~e-0UvI4TOs z0{sG_l$bvRJF2GeI}y z8X`EMUnrO z2=Bd9`(lQOUY+?yE3Smhm7xQreQT3as8jqmH3HV3e`jkSz}>0Z>mJbgMo?*XM=u`q2GQJtpj6Bq)#9B#topv7+C@nOG>0Y;Ozt;ATWwI z58(hw5KOFfrM*PImc&u3@a)-S;18+hx1qe{SfOKw}3zfwVhijZO_-EQ@ET*~M%QFd&Ui)5yP$Yi4 zJQg;)m;`0C{qH-?9}bfUqm^=n*NdYV=Tv+`J$d5wHLIxx+WV?Bb?BAhlTDkuCF=u`q9#jIg z7=xZxnyxhwQF7;+X1o|p46+3`aF3igu1~{TWjNt$=r_3q^8$|_zjNV2onyxWjvi(4 zzI(G~Zr)cA0^~s zI1)U^YHlXuh$WNO5uIuUSUA8g8jF%9PR#npAFv3t#56AVzLtLRXQEayUxw2<?U_y10Ono9NZ}AIK;Or|#A!U5#iOvmB$>A;Pk` z&~N5p!wMMsfYts329dEQM&IKh)BwV(H1%_zC4Az%W zvegjoS=O&dA|sbmUc2UzJ0_97a%E%$p69}#L?V`8|_LZsaO zK`DKYC3X!~u$DIbl+~+y5E#3adPEKoGVwtZrzF< zJ67lR?a~)7HVh9h9v+VW$|GMscXS>DF&rjvp%_%rZnzEsWH5ar$%I~AJT0TG{0+!~ zwVWskPQs6TuH}?zB-KD}WPe%V?AW0>@#@d=m$X|$Uoo`Ly&Tc6zH&){Pm7^nz6ViV z{bn6Dtgw@QMbh@`mm>yT zbl4{b&d^}`88bc#53dp){$Y4Hv;TQ`c*XGWEZ=_X2FIrC0Igv|@AKdKM@7NqhzMxl z!!!>MQbh7P9C@Omye?lRwLri2^zf(_=ob+I33GT~377uebmCx%J$w3F;o#EOuKA&^ z7&@(3(fi30bQpv&dye?Dj1=e?<1~ zP-B_V@ihEbNB77#d*%3EjTfVk6Yilo=NCm0ms*oLZfVkZr%vsgI<+S_KyJBdQU^V#U|euNmNT9KzqJN^ts=BAYd3x{%@KcXI2; zSQ0jv!z^F{ZQ8_?VL~!}P>>R%6F1Q6UA->!AA`sg3Zv(%R>k?_4`?Tqb(aSTX7%bu zuYil8U!H~v?Ye#;MPOj*AAay7+HPTvSA_}*pFCkP9c0eo<1#5}`t~Uv6$un?!KEEV?QMZi!i~OZ# z<_!E-BeWVJWeIDPCsR@KWR&80q$<@)o2XqpZ=!@*WpJ>gUq!zR!8HZ+{b9obckgy1 z-0!XmLz=#Qb4Eo1WYiJ_u~Ys+zeU5sszyeBOoFI2*pIAStoL{B1XawSeEalC9}$5u z8y|VfayAp;B^f$Fg4~-oMI8q{(>dxTVZ-lDG?J}f%X*TW;pnl)LX zqVge{NysOhN>G)?D#dy8GTy(>WPuFHj~$Xv-j7Z)uU$*FZ&Q0PY_(Pa0+QhK-$cL3 zlaS=EB7m43t_D~6+qcil*^e%$qIn(X&njQtx<$)uu3sUWS80dIoNV4ql3Es-!FFVp zIY^hnSBAN54&qjvK#U3av`)Cd!&8CdBs!ADal(69U-CW4@QD(-r%vsiA_cmlUg_#w8qv}dE^gDW_ zTs$kkT-AItBZYAVm^dH^KYo1L+qd&YMy9mXtpqSA6QqWCi@vMU%1H>E5MweHE>BLF zFwU~2nI1iaX)BRNMv}~|qo5(3t!!{iDjw_OOz;-TP^C)Ud-vjFhvEgL6)51lVnyMH z53$HHAx0snj2R8ax(8HFxMOpnM~|vo`OmeeD)aQI_tB%#t8%=(ylU1U$Cw*22~)ya zVZvs-=vvPF=ZI$-S?JJC-v!0JPX4}MRLjY-1fDF50X?OYk-vp3`I}4SFLep1X-WMV zHf*|4qoQk?xx0JT zt5<7A?|Y&>#&9HDVR-6Lk}1>SfAF9?E^%7&>Z-X4AO_`1zu4*I z@v;Ja&o0%YRxZ+Y(9@=AiNy)yh2_$$>BPxI+K$!Kk>!IyXyGG@?UGo_cz z8Pwn2sF6fiezOO+)G=b3n_HX@-;J|;VTy+ji(b0qgG{mFiEcS^_>Lc+|MY2=#gz^Z zf9Jp+&)yvbqn-vsXxb!J{vvUZCd@CR#(pOk9gCY!0+eJ!VYxfy?=0l+1zkw)RG}%G z--i3}}o9s`Y{;o)h+!`+Ea!gego@%Xr;|N3S5q9Su5dN7=!J5P%-awB1V zMhbjbcyjHW<~cWSq3`;${6)WV%HOS&w4Ja1w9!MQM;rOHf)ptv`LjsT0*bMpH&XkT z=n%K<`Klqr)DfvzTRnt9sR3It}`c2PbNxBNgG9nKT z_tK@)%$^;1;lg|2;fbiV!h$#pCA8-a8)i6ou#godqeO{UwQ7d0Stya_haWOVMHPZ4 ztX-pyZkm50kI|zbPnahg>D= zoOOUVf6}~N!@NZ>g~$eLd#Owbkjj@ZIS(3J0i z18xMcxWF{ae-i5&Vopi4vuM!t+`~$-%MVKY_FH^><}n7WKEZg~3>xsX!Ua|HA)Ct@ zGW_57`gObq<~_+OR45w}ktZ@TE@)u*K(eIn^JeAz{SNqvURUt$UB972-B?&{*a*;Y z_RZPb%$buy5)g0S~^dFa~k=}Qq!;6#WGcf z?1EQ``t_rGWzqTJY)0Y9o7ZRI!h(+;!E-Q{{eQgdF`&1uvbUHLz%*X0XquwW3^{*( z@*cBBMZw|{J%8?wYsHxVapHKED3S4}pOk%F4tE1RxR_&TAD`=&35et3_M%7;5o*d! z(8!*mvN0BxlLR0KI1=_OEp;l{yDQbh2i%2pMzwZBwT7B#tP5DVLhB=u7LHomrq}KTiyfj{oAZH|9Ti(M?>0*Nbr09TRXjQF?UmW?eId%pJl`Qj`JjAtOh~ z4E8dZDvPWF&X~I7$Wg`_i-6fD&U@js+`24Je~Z@7@Bb>-&TDQwLXZnUm7@pMn*;^H z?qCQhtR>YR9v)LB7yR}1r&exTRSGKZ-sDM{L<3A$$Y9hLFYeZ@oA0q>Fx6P#BXLXv zX;BNYWlUx-1z^t}){=D8L1i}i6^wGd@z-0)PM%1A=#bZ`lL>3r_AFgS)d|-It)Vku z`MSg_-JU)3J$Nwvu3g1;?JBx&UsBSFh>Aiiyu#UdPO)NiRjpC$jViLKHADx@EF@3v z)3z;3FtQ^TSg?lKVw$^q!nw1v-TwpnC6b#2!;K=bq=LXX$RrsZ zB%Rvm?l8oE3+L0+EDF)LYNh-T#|eXK?=QcgmIIa) zPoKs;e%!gJ-@Rzj1Sd|s^Ykgoc9s}dn7FxntX~gjK-tDA&61PYa!II;z&t8K9zM`Y zUo4D8VS~%HX`=%nU$;JjGYb}I%6c$CgwASGv47A&HoFOu z+0#_1o;6!*3-6;m`)OY{U z0lOIjRf|c2V(lj@xLJ9P0~}xa$XBf>CbLX3d0_<<2 zq+u5)Vfc_aY=qXLh3~a%1kR$LPn}W|iAMUADCV(nPJ)N`AWXEr%$E3wcj;21E?s-=wo-AEjSV>p8f-Zz7DV<^z3m01T`46Zc z53Hu4=@}3?KR0aD!J;*N^uEXXRZJW~Rd2wKj+fFR`8a-3wL*q%Te3ZT$Vg#X3>L*Z z{*eQTyLL(x7|87Fct?#&_M@5=U_}z^A!!&In>3PJ}e+UHUHKA(!T9wh=>?0Jmc-v};>Zj) zuk%1qDA^x>c#xxI)~6FHLNhr^R>Kj?$+JTfL1AC4bPnpJ`|Hu@_UaWL4)u_Oa;#W) zC$GuqW+;uI{eeB|xMMX3MIEbCaPO`6K-8zdU4wp6MUcO2na2Vs_$^7!R=7b6c(S<9 zxdtB;BID6$LDaSyJXqbcL|!(mlcft~=434yP4aV(FQr{eEu}RmNF%D#rt3BnBz5oK zs}*DV_tfnmX^fqP3FzU3_|1Vsm_0yoSDwTWKBX%fAmr~Z$c1lpqZ#yk(^%WvtD9f& z*f>A^1hwMBfdo)~KwZ#P{koR8;T&J0Ct??;E*6o>@=cu^#l;TR<6 z7Sv#uau7+r_#)qq9q&DPg6Rs*fPNqz3V9BXgJX=bt?cdUGR89z}?~lkm)J+oGIpCrQGa)XHN~M#r{_DzMqwH9>3- zZ#m&b&=I=IxY4p=vBqR)P1D7U zwA|Tc{#5lzTF9)QtmStOuyiT;<+}Vq(cr_@0N3bpU{Vmr4U+ynv@-ViF`5O+@@-;F zSU@L^D@QUP>?%o9{cw7Hmi)2_{%$mq9r5G%#gvOZ(m-`yLgdrP>?@IzkXi$Ck=>D2s3B! z88O@oV~sDJEpJ}mFTc#tuU}m27S>d9lBicNcXUpZ;m?)cUb+p?){UCUvxCxz+jLbI zo&*XPQ<{uW^|;~M8CZ?8)ve2OfCC3zN^60I^-93O9p-FO2hGL)38e0)x>GYNzjkbt z)vILL0^NHNPCI*+mQp91?(>FvE%F!oWflzm67D~7NJ?7k2SIO?L&WhmXn(b=VOO&0 zGM-IW+4^Lnh7|YjQ4V~Q>cKa)Fr(>eilj1OTr4_)QO+g3Tmbz-x%k#FrchkJ{Z6i3 z*A;pFx@&~O+0XzxbVzQEk&&hf3SwCY69FdhrB-%zdZD=m^lnKptM65lG~NkJZ&V}G zP(?a+j2{$~Bq)eamDff&;a4~?#{Sk#TB8zeZO&|2yg-#7a+@hq!APAA=a_{p`ibw$ zn84;&Ty4ujRS_kclP|A!=HK3c8?hdi5TdIro-2pRq>8D(fx1qZ54P{5U)T$jZv5n= zv$koWl`C-MA|m(h((n@jlqGXz>LiUNtyrqs7haunC*<)R)wiou)Rp)Y%*dTP<(M%Z z$SLY=zO)ZojjFPJjXIR}?$JG`5Dl<9s`aA04I8feOpzh~FErBFSU!e6kGNs6IXg;B z4%W@%NUTEBV{^}?A=2yXH$6CaF7>ew>?s*vbY8vk9=|wR&2L$#_ubz;f!^iIsudfp z=9SmGehGMS1LE;JeL$;{hAotp>`~5!!c%l_^ero75BozM(yGNglf{y6->{56Z=@5A zDA{dQPhB`iYZer{>>6aOVev!Ns%w)HSOUI+vn0#1Dmu#P5AtZaq zvYo_EjX3OBrQ0WMV1L7XTAJWG&L4;Foti(d@;wAr$Cg^**@;e^pny5s+_{4G!bGG0 zaIm@CHY2(_3Y_>?b?Qisjx_4skh0|(L$9O#D9&eLf1>nOESiU*Bl=^~jwSGVdzSZv>< z6b(O|heN)PYALt}|FWTHwr;K0FIb?QgeXQxh)fEWL49>cR1)dYtk`0M#cqQK$nXKu zskJVgY5%2e-#l!Prj?EvtkylI5cl5tMV>v-a-(eERjcZ&Uk>vpur+h4nvIcEME^q< zu)_mc?~iQ)e$@? zY7b=Iz6~@8Qj$(RxPSh(oWLAvMf1W1@P+U?S;iT2U>uZ-rb zUiuSq`-WOoG`f194XWXZ+|f9Wp;bo^Xb|F8r3*BIV8u{UQeu z-=;biPSnpoQ&W*WSx{CtuF+{i4_q`?b+%mGrEZwPm{6Oj1 zMWf*@noGCNS{s(A6V@CLA2&h>E2bh;Rer9((oJOOQb( z_&29yeVD$&ycfrd^Sva2gsqZOCspyIHrly^y6GxQ^{-u!OH{5qs|E#oSUda7y&QBN z;=-KVxl8qp^~+@LOjQqXyRo}gt=hWPGTWLrsV`r)mVxYPK2*8Nie;*E;*@ZOhUtj` zf!^Di_O+^K^M8ldnYVv9q=$X~cOyA@!fJ`SUB!v7CwGB&ip_Ui=T z7A;iw8aSX1mQI>iU$u&met`Xm>dsN=6R8y_wW>*@`kHmXUatLmt0Y2O1{%xI0YY>) zb_i+>+s*Um0(JH5+N5tex?4`d-nZ)}bnJ}~xlGyM?3s!=>q3=R&zPv(8X*PAEN8d2J}_kxI84z_OA-M!fZlwOgD%dXk$)++A`oi7VmluE7?!lI|NX{j3@ z)C|yYNww-)MxaX<88%cmm17xcv&K3b&@V1EoUR-gzeM!lNM%dwPyYVO!#Uvd=D_YV z2Y(WI$>Wl=kAa5!;?|AWlo%8?!i7#%1o|cM08cMA*Z46qZh&-Xqx*2RY9`$~DsLGR zBqYUw5;Lc1aV>NquE)fHt2oC?4h+`Tq0O>zzAmib;>pwo=_{iKO5bieUQnwG!IAdz zbq5*JM|UYj9}bxzi)QM^#OPG`U@ zdv+~ssZ}gS50WwLsX9{ka}ORR!-uIAj1-19BDlY7B_F;YT`x|d_II{CxiyMM2jQtAq9|&2FXlr!U9H_eq<4a;IHya&* z0$lY26?+L5w`;4f`>MV4>8x0UbE6*%;s&dhf`4_!ROKNELDW1?jj?4$0b0BpvQ;Q5MvMf|@0>Za@$( zuJ(|Aq6^^wq4Q+&Bu^qW%1Qgrb>R<27GoSZNWJ}&C#vQ-eX=@{U?BLT=qgW!cY(vy zr(#4kYA8>@9SZdo$S-9-lA4vI4LeTuRQXGYdB+-QT3;tEWlA+V&^jpibHWP#;*!Gi z{FV*G@bpymhKCRwMBq9#=j+!rJ;Owlh}6(kxF4IF&zqqTZrxlORM)vEUs|evB(*9E zUXd^0Fkf2(>8p|#b!FBh37sbMr^xh4YOu`0r!h%Y-|<7V7&24Vxs~d%b!zK)aYqpB zF88snv#4KH8rPK;jpeJR5(G0Un@y^`)F^$89vb^ z$Oix?Q9>Hjm)4D?eKTp_PNgkQNPLw9WO1Bk${;C{MUU|xS08JHf{vv_>!N<#zcifh@(zBpFn)) z$rBH35Ys?WL=Ud!EgNLXZ1pU$vjDEb`~@@w59s)W(kqphFB<4}=dhP%O{HxsrExY- z|GJ~n8i8qYn@Rpbf8YZA1_*^z)~cm=am3d$v7J49=>&Y^E%D=M#K#=)98QYAuVvE$ zs_H76n$@Ik9o_J^^H;i3qfbX&z22p>7QN&gE2&{4Y4wG)Y$8=EN!3bHn^oogs$?P% z3T+6%qe67o9`YwvSnWExdx&Zs$O3DRDu&7PIlR0Ss_zt5LC@5~FyVVBKg}EKd*IvX z5(r;(8#QY7s3QxiH@7pbZ#ZCvSXC?u|K*n#CLOf7#4e~Eqcvx=N;Ef|Y1_A|k}!CX z3diQ3ODbz4Ha}m@u!?7O6~;wmmMQ^l*m}FZ4z_D23F@xv^{6(FL!(P4-L$%06U`)n zJLSxw&QfO3AdeX@J?CjmF+5PoGlq3@8Ia)>OgHD??VB5@Vh}zqx3C)&%W$k4c>>?_ z$?*?2rZRgbY12rN3UPoDha7~V5e;#3*NMi3i~5I=>neyL#=Cbl7m-LSw9J$Rej@2p zNS3V1%213iQKarCWxuYp&s{u(8(~w%0%E)f9U>8@*d%?i7NbT|fX`X8zQ7ZJ8(wkv zA=BZCMa+@wVPI>n`OCTZOE@!jc#E%(zE@8yPJ&qE`SIggi>i1#C=plZ&e!5soN%SN zm{0oP{F8o~d$|TI;+zvcc`Vm}&;LT>`L57V>X~8 zv?3gjgJsEL{T>}2!Yumkt0_nstdD})5F-y^mf8`ng;{Go|@|E!U|K&?K zPnlBc>YOoAeMf9(eDa|B+{o_*+CYzt?lHsU(uJ23Af3~MUTq>u&?eHE5WMpz*OTYZ zG!+f?!>}pv3f78?2}^e20>NWHG)SscR{Y_mcKf>_0MjU4Lc<)`-OFan;hoV{1(3fu zc?jt2XY)`i`3geA9nCk#j>vVA*sbj~U1#dAhj`=1Wz`))io)VWI-#Sfz1dhz5Bg)be+B~N)wF9V!2@OC6!rAh ztEaDpe(@9?wd&_UWoWq&@_s8j9TJ9?Nwi@3GgJ&iejTr7#)&lHv1h;gyg8$3lbOY- zrQvwe2A0dh>FP4V-pQHM=Ggz+2}k5rXSb%#f+ua}OjU0%eDHx_!=mJy1}(q$t_F+o zN8Mr%O&8bJ>xh^50-g{YtqtlaD=?&q@{C8CI4>TvEvqDSj`~z_0^r<0>$BTG27#hQ zZ z#eHvhGTayoE3k@21KYIKjEIA~b!i41c=|-?-A5WXRR+XB8x(Qvy3Yx71 zi~gjX2D00>lHIJ_*{g~iC^Ubb#_q`^>C#>*myj1OGq#UbNhF=`@A4ZcPd5 zp~cEbIe_Rkl8;BhNz&R6YsOuRmhx#WE!N5>Sr#UK&7XDZYJ`YCo43$SoxcA@H%YvW&WmCIzuIt}`SF4lO{j!m+8jY?J4xvML~T10%zO5}Gf8iAuu!2*mLeS+PW;fh3Xc-6@AiBiy5F zJx-DFyH8W=PqA;^0d+9$-=(>HYe_C$twl%43@1a0H67$y1W@#hG%c$_&i{EB{`U_M zc1^gyQhD8#m{dbdC#Go-br?p-l#!Z0Mqc8SV9h`yotOlE62_p%QKL1ZY$8czwJi{@!99nC5Xk^w?I?b~QFHtRmf?ZMsDktIuAbd`5dKb=!b%xn4yEMDBx4%MmPImV z(&;8ROa3Yc(ld8X$)8Ktq?2yJpZGwS){GhTgvm8WwrqNfnQm^kr~AKft`jHLEGgu2 z=8T%Al|8G@FY}loqfR=uGkLI?GU^slkUUOKgt*;o2-py?Az(wmhJXzL8v-^2YzWv8 zupwYWz=nVg0UH7~1Z)V{5U?R&L%@cB4FMYhHUw-4*buNGU_-!$fDHi~0yYF}2-py? zAz(wmhJXzL8v-^2YzWv8upwYWz=nVg0UH7~1Z)V{5U?R&L%@cB4FMYhHUw-4*buNG zU_-!$fDHi~0yYF}2-py?Az(wmhJXzL8v-^2YzWv8upwYWz=nVg0UH7~1Z)V{5U?R& zL%@cB4FMYhHUw-4*buNGU_-!$fDHi~0yYF}2-py?Az(wmhJXzL8v-^2YzWv8upwYW zz=nVg0UH7~1Z)V{5U?R&L%@cB4FMYhHUw-4*buNGU_-!$fDHi~0yYF}2-py?Az(wm zhJXzL8v-^2YzWv8upwYWz=nVg0UH7~1Z)WWS3$tjQ!=NQT-hZ{7RjDNvS+uBn3Ehi zghRi#zTuionIwMvzaD{`yJX8Id2>om9%vq7o^1WeTcV$AeVKzlvxuMXUq6;B+}tEv zCdr>ua$8-}?wKdYoczmueyi8p7ugW_FMxo*zvRv>g^Ng;G7{8Xrj3)}F*16TOd2bb zgC%&h1P9BsDKdJrj2tE7#>m96GHR3z9V$Wn<b*SqwS5kjF=MpP{jEM1C?I)ri~Fnk{Ob4F-~N|Dz}rWWHlVzG zTtYIXmxS>pU2;j6PSU5B6e%Qr0*M<}QYV%4$;CgR#ET>TuR)~O4a+~Cq)n>#CWt4g zljzfY{Uk{uN#Xy(lM}?3G+Y)}++O#fnD2cSMa_tL}HJ~`goKDk^unKVHb%$Cqa zvM5y6t&!c^WXDF?WgR;=%AT!qaIfs#Bs(_fm;aBw_kfP#Ow)fKk8>DjY@*4*1{)ja z2+lbtauPX+BoG255JKdfbIypIa}tPbFwP!Np7G4=fA`$ov;W=yz31L@?(eDUZdw5l zMqs={ojy?N>iVj>`g_0UP0#yoU8fZ*v}%=BE!EP6nmbD)GWEjqLMRN)l?;gYR?|bZ z)S`uE&Cu%QTDDB9S8LNcZCj^Zn{;5W4(`+5?U4bw1S4nf(C!^twL&{qYWp%}&DW5@ zs{e_ecp@*#SE{UL&AkY$TcV{)v|^>UZq^<~JN-Rx+u$3>TCT;5wP>E^P1leCdZo5* zyCwR3FaLiDKY?qn)}6PhTvpm_eE_L_NByabwTbJloY*sn!E(+EA%IG^D==;XY&Ma)*q-i=oC0&2`UQ zg^x`fs*FDB&`!_Qwze6+@#l@#>6I6h)<^SaY2#w8$kMVbZC~13)25BuyhXdW zD`%$;?9}1Crv~Kt^G?nV9onPpo!YcPN7-4YRf{x#p61N36u9sn_ z?5pY1G<&Ajuq>?7#!cF_%_E=rp4YF_=G9ugLMvGu=4l3aovC}P#y^tF`gdTQ_1bHCu$u1pwJMZV!v^Z!N!`0>{7BEe{h+`>zYZPLf&JRcpZj$v$NM=s-r=1+ zdz7jtrKPH0KMm`z(E~Jiu!d!7 z_y7$Ypg|cLlc6CjVuLkwpph$cfQAlI-@Z!erSw#d9jFQ8HFm6qWU6m3rKW1+D9xUs z5yR9oS?OuY$na~>fZ$w4>#uRFMVT5rNJ9r`K!*BfXjq0u_4mkJXkfZhd#P`l#*Xr^ z98F19k0kZ(<=<}3bPXS-Zb?e&uCz3z_b=2vbCm&UUaWeiD7m}RdujSOb!e-~RZcyV z%X>f96DVI+Z@s2>-q8miSm~?;h$I?DGzjgrog>D7lMg=ITXSxlqj;7hpPJOtopM)yuSU zh5DzeXBQ=PjgFj@Z{#F(>vrmB-yZ7UTN&w^I>k_USFy-bEKyReTWk3ejT)#PiR#tO z<1md+oqPIw<{NcS5+e^tRYs~Nj?v7Sx-&X57r=xZKG;ggjA=^hrVeea?lw~l1^gW9$9Yj7{ko~3#7G;6vhjMbRYTDwx4 z)>;x1nyPa!8Y6cM&TZAgqxEiQm~P$DS7GEl*JWfb+Npykjnuq38a+m7ebuw4GWu)D z0&QNWp@Y?|v9Uh?xo5cNr1rk&_N~;ixq5filDYow@4cZLul%{D?LYN(OPBWa?$Sjm zU6jmxXrU%e^zp}PURTdNs(VW4sTz8umhQbzRm-VDag{2iSDx3x$=248l!l+GaU(Tu zq9%>3prXDuZQvJw`ke-ThnN3ssHRPn*j%%wXvYo>7@%L}`^AypQNy%zn_V<~lFx_d zo_S=BHsQJr)v%uWbl2LYRv?QPkNm7?&Z`#a*lwk#sD9nxlW})-){*^<8mfI0b#1S4 zBK!BU zLe)E2Np1D^n|{6flAfqx`qJN=2hCiTazcK zeKX5uqeg1oLQE$lj+xd8a7pmo0BBeZ8b*&cYoeZ=v~r%UKm4vpYy5WYHG1-4ZCtHw zo7KOsk)6-S&OP(U9OYUanyF7Wtz4>{Jt|c)GWH{kxkg_c)~La1-lTxLI_tFM=n4cLf=_@=9R?64XO?!m7er z8Jem-9rSV?J^z%Re_X|jsq8%}UqMywQRNaURYH}Et7>tTE1`Qz`km4xRkD=ImoWZT zs9+S^n5AR;y^=Soujb7IrLmcsHB~}_g|2C1iwWd;;r*K5H7b?d4&tvoEJhv%Mo`V+9yh zA^%+!W@MJ5&Yd)6ir1E>YU;YHJUI7Xsgf1lZCiZLy?d)&Yo#PAwR1#Z*+-mN*+Ov! zumImYN87Xzj|Kc4*Hc8#4C zYZqwoRIQw=-D`Ddt0s3! z)mN)#Wp(S|up?8qQztcQtmmFnmCCAGN!7}#YFXWNn{K^HWlIP@%r)1j1PEKgXj{3A zs+V_|=GL24xwPM51>opCck7PZ)vBp>tamhI(s*@jW}#@%(6f~Ji5?5kplY%>H*e~F z-iaLr>5@BZ%|abOo6U#6cip8W^K~po47e1iss8acdfVuE@lY3X9^-+oGd zAAVTt)*63tFB^aJ-PM`z*+<*@wv)P8tv#BfhwhIAYI(@GUYE`C;Mmu=$T08$U%op6 zi>eGr_3EUwE*59h681yb%5$`ROSNgKkpr!quU)IHn?$5$%?f>WOvevcKgU;q@D_OP znMVfMJ9pIL>Gtg5WL~+%5hd2oecScTF-@7EgeE_6WbPRe27j|~L@%=qUb1+>4#{(! zz5kq_2WJtn>u<2E0X;9isQUGl($nFa&aG6nvZ_@RA-{^HjiL9HR;9aD^=_3fsj{V1 zrG(0qR_QXTP*RnGeJ~gN4Ue)PJ6f^0DpgdyPqkrLfWK4KFp9r`FX9H40lsL|fMx;) zY-7IzjD|;zVl6a(hTXgvV$A>etwafHk6SitXogzUi;NaK_sk=66hY(0Lj29%9B&<-Vf;m>?Hd(X z_7P{kbttgx=RbMTedGXtF>{Co z>_o|5YG2dz=~};5pXX@iB;#*^cXjrW6TDn!_S9;eY%5g%!^^@OKbH%;j|dQODSnq8 zsNn!*zrKzF^y#9v-%_pW4*H+~7rV`3n+svDk09(_AndQbU&x~|{N1@Bioea(xZx>; zMTjtdPvLLd0Dq$xYW(dI!QVXgFV<6?+RE9jMe~)|(PM&oj24f-XBauWZYS`!o3fTT zh#9kgBlvqnV`BJw?j!f??2s9jBlugnVkA-Isw-8!s+P~u*GFu&4<6ue2a=w7^5;Ja zmLd4aDG*6en84YtEn2ruUmVkk19s>ce+#h`6fklNCAQPNN!q?mt8rm1)Z$sr2HCSw z-yYM{i2?qeab&KGW`)rK(Bqn8zjvY+C^Rbse?YS4&er6~dikZo&e+SJBOBq@H|o|~ zZL~h|nEE7X!DK(lp6&JFD|)P&s+Li?dyJ~NFtn6Pl{TarVN2Pn{Rv0G?uy_q_HPt_ zWA-mAd1&n-q(~F^%a0x+vN5!o_t|OFT61O=VE0!)#S+Xkw5A=GJ)9OCc9DE=<7@ZuTU0RHX| z@VBY&q2PNaPSjCtadCH3aC4X=7c)NVDe;Wq&FAfbRKi*pAXK4Sj&pWn%19u1Ffd6^Tg24XmpUeMD<}jjx zyA>}n!A-2x@Z2+xoaboA<`MgsanMP^?V(y$7j6HB{^!$-jLv`&N2Hr{3+xVpL8Mra z_eHkD@N|c>Q&KcziVcUSp7bJy=ZeJs=bqKN75d%R#^3&F>e2b^4lBgU?ks%K?W`$b z9b?$GYoiInwPv-}Z_v)o+C`SjTAe(q<2f1~;BV*(YuQpsM3Fk%*&cCc1>$@0n1rS60WuGZWd>N5!(ab>8 zwWSsY_&a3CDf^em(W|dGv1;o|E5IxWd=jTCCvrMNc|g3`xku(&d9K^At|MZA%ZVJl z_KFER70T+v_q1o1;fBN^g1L+n-e;b39nfs=OsYS9t^fPK^iymix+D2C?`#kWHn}teZ`+2*MI(-%}Me@@a>;DV3g9)CUCd*>fTkEnd;u% zr+|`Zxf2I#-(DR%rh|L6dy^f}c^4cuTn`$+Q{DC}vjMGiyf5P`GRL~=jsB2ey9tgfSuBT_7R?YiW zzKlrPuUty^m9<-#lzz~bcYxqh#Vo>533#W-j}rey2S{kF?Q3-~+wtGFO^vX4wgFr; zF%Xuy#1vvqCNy&nbC=HQP0kPMeFsZ-w@z9y-*#^QIQ*?rQN4P2V$7MW-kpu_?b_OB z-mjNW?;7}ic?XL)92o)RDqIVHRQz?@HC4Z4XG8tVUo~~A^O5R)ptK&^jr<H zW{}+tGBQ5-8?l5904_}D;1X>y8`~;1*?vX%M*|0{Z?bIvwzT{n%+c?Duit#9BRQrL ze125N_W9}wO(UrweEmMXG<1lQ$wv)!o@B4y!Q<_zuH=Ux&a4dWtzd_VBE)|a+iUhj zV^?%Wkmn5Z{S#Sw6sY-Mm6a_BrXdS;GJp18GHOK{w-UGeZV&h89W=Fl4%Mnd;No zc-pbOmMqlaLr%WE?&`=-{r-E}vCTl1nXHb$ZYu|Z`}Wb~QD)u^4;Tu}Rg%P*{0zbe z+HfsQRIF^!KQLFhXw&*iP15G&I<&)n@^Hg{MfBw40S)XIG0emJ#KPr7?+5>OMm24t zu?W#F$8jF089Dt7|KamTb(}uQ_AePtgZmjq5nChzfh9wdeX_8S4*o>4`0l-W*;?eg zj~k%l1j%JIJV+#D~5 z4>1&egE8gCHcXO>eyH?8*rA)OnQCLB4>J@Y2Y zGwUSjTX@wDAJJi8cd?`PAAF!Y?l{9!`KLbg>udGW3#$8(7v#~Stv!DDmL961;>2F> z)NQxwmRnT%E~ir5ep`UQWem7?-Qj)SxzI<;-7Qq~W{tFUwGL$m3k&ImIINmD8 z>)1|1`)a~SQ(4EtcpdI(kHR^SwEX@Wl%@f_tw4e}%rqd6k$GaR8Y`u{RxH!Lt*7Eg zC@?U0P9D^-0g=QK?vVS8-7|9-&4CCG#&708CsE9tto!df`#fYCfApdA62Ca84OwRN zknDum@(Kl(9kPW1M3B9EqVIgvNV9Yy6pS0KVMCloK4YRGzDuGe4AX}7wluMScW%_i zjXHKnNA_sUaIZ6nKclf4^i1+|KxSFlcrvgX5Mkt(=gd;+=L4N#u*Sid=&dB=y{8je ze)GLKCgeKe-p9(`x7*-83H(Ju!;$mcbC5gDlGr=R_`5gT#FGUxtqP)bT;B3Ofje(g z-S?c1PP)a&L8|}09(cf+QMcc$TW_)aBB6KQuG?-?nE-#;=bd}YSe);^SVzkR`OoA7 zBfp2i-$`m2$S>jmkRif=T4$sH&dU%xe-Jue85tT0(QlA?li}Z53+CwL2?saR)AZ6y zdiW8I9;z>oT4lw)LkxkNPRMU>jTx-L11(d`$#5v9DEj1>VI~>DyBXYHsVVB-O~iLN zF`=R5chzzo+~F*;aC`JoZP{e`9g-1|-_|6FHMIzH$*v+@9);N!5N%HCyW>jTyE z|3rD;sZ`0VANY3|zgt&%ePH22a`U`8qla|XpnhKN#*cG8l{Jc?mS13W<|OAKlf^o5 zn3s<2+a3Q!em8B>(Stg?TVuiB=8-X32l}S?^dWF6hiNqU%ks#h9_Dv=IQ$8wBbf82 znB0`q+2o7m3-$F^hF~%?*ON;6h5qzs{q0AGesC=0x!dqhJZuEQST|C-Y58(xXKT$G zd#e%?z208l;-A1Rx0;oPMYDK{24#v=(nlT;NLTC*RVk_aN?Tw{6tjkW7pCqV5&fBc z-nsYU9z}nKzwrJ$T0T$vcUpcE8U^}upoB_W2j4hUK@HAO;fr-LW%} z-woQlS%(kk(9S@AMhy-|OKN9|BACm$d~s5}aLMlsP4 z^u48l{v5?$^k;DGBo=qne+5#b^W%#~Q4e)#B45^W+j~q>g)wPs6hePSelz-edb2q2 zFaB+;MZQI7@LG7=DYd5w2w);!Yt&tI1|9_h2z2sY#s-CSPeM@Zyhy%n&p?s z6eJ5`Nw~0fuW`u*mK5YS-bm-3I|YU|<}gnQbWZN-(AXb-r{DZWyLLHtoY27b+CTYr z`yG1oRgD{L8s^wBYS~mTJgSO!TRQMug)yKK#RCr&DUQWW1tLPkJ9h`P0wP2g_9(F@ z9AdXQWPIcG{L zn6zL7CSEH1-}x5US+n%s+j{For*mMMAR_rQUJl2;b_FOCX5Y` zx4X3w1ds)a6bqK4(0{dz{EZ-fgwOno1CjiV$jDJAIalEw+|l-CG;ySo#LNHuPyL_& zqwl}>lia)Bj_a{w?M^HaC3&6wVf_#K#C_Er!dt&mGbTHJ_u{jTN)!WaOY7G+nTG}7 zBEsy4IT*$7a1E%7cJ$_(bYFSZtfa?l>BA45d&7&+Ghrao7{Eu!_*+&9J8|kHCk7Kg zVv#3rbK-DUmathG6}OnsvBUc))e}Z*(^40MV!DFAEL^KrI-G>yBYi|U%{^>x;7IT0 zIuE2-axMZJ0(!VJbdZH2y-&c4Z(;8f&M2^nWRehnSs&u_CpVCb2!C);gulQiLsla| z&m?D`84F#aeH-88S0`-lwP~Z;PwEM(QB@Hn!KuHm!EP2hkQh z$=naCN(zCqUYa^VvnLrtk<;<0$}DS{)_Xxr_IZb};Do@PHEo(*#9M;o$z7Z6%liDN zKHDGUZ^Zb6(Dn%&r`s*S6PwP7BVA*MeX14laA1^78fPXWYY2&sME*t?KZ*s5omJAokCA{fNmht()5g9WKhSsI>Bk@S?YE92|L}!=`<0FyvLA!R zykAfl1YXSl`0a`-Y|@g)Ww&*Z}{K0+a&L1S;)v1jp4bitp^tZq2TM`wv z+DVQ~;aDTl;-QD~#yUg%MP0{u-?7T2y0~WqhkuE1_3o~zBQ<-h1GRuJh>6aC^9uhn zpozPQecnM5`9`SI3#S=#ckeO&?jV0M$lut%HNaoI>#aO8Y0}gr8JQ9IoCC?7GFsCJ z&yCbHRP^DR2#$|)VoASLd*leXlfOZjo?1iHOfde=(40BW--z%RntJ2{nTaexnA;uN znYFQC&H#w$U%PXB@Tp_f0>XmfsKhX z;)azsb-cE&RZg~+EmlTP;mg9&$^>KCZ`vp@f!kZ_YY7v-i&A@AgneSBmj#AJemyda z!(hL|b*Y(?5-<%hJkN_iNIFwxI=rV+2hK_MW5bXy}GDRPfZ+a+o5loQ}WoZx!QIy z)*qf#(n|5#ai5=jq>?2~O@+-`pbqnkknSt5)U(gpgTW8Pd}#Ec9x8tprrw!(d_VCh zpW8iNbe~=g!YYQP-BC`l7F$KOU`UwIB=8}`cqp&qW6pW(;$S7Ec7TVuA zliB+M{5=hS5ak@tFtt+{WONV$=863b zG-ImsCy63O_zQ*L55jIBYR^O93G+bs#d$>Oy|i$;(*k({Jcm5nHP@P7!%~mCwPh=R z23G*K7{yyarK_*X^YKglPePEu)85_MzQIfuTu-=$$V|pH6e8?h=g8yxY3E*do&8|d ztGH@+Vrwm%<2rA{5vyK$@By!r_uv+z%<>K98)5?IzbjI|LjJz_gL^b{ss{Bj$}j_g z#na(0GjrT9TgUiC316;TZtfw<7= zyD`ci1b=ZE0gFU!kWJ7KgpJ_u7{9~K$Kx+0SkrphN+m~yOeaD}y9(kDvOqC1`J#zr zmiFcKU%62tHT-V0hgYK>!-- z7y0;T5HaPZP4R>rk*e2Ua6tLio9*o> zUB-8XWewWm>n@O87|$R4{IDyEV`t$?LbnW++fan#QIhYDa}|{Ao#NC-0z+Xs-$81R zZ`2o`n>|VbA!uv-jpH8rR)cIqq#lVN6^)$R9)zd@r!)Y^wRjoXhj<4yp3`x)k#1!F zbAJAQ;rN3L!kx4TIFBqNXaWuE+b=|hC!)s>8rwqr#r_3jc8>6L8m16C>?W9Un1X?_lXK0YyQ zVO)G%m&cBkiiU9LU<7}`Vq!oW3d0{feF+gz7{h_+!@4z&Biw&~?2(*l=ZY(=WAg$& zScu4Z05Sk*^7bLeU3KY!GCF^iO3Ip}U6c-fHWXM; zm>C`la=4H7%N!m^xr!C&pVwsB{_RO7ShDYmgvQXq#os=K7AJxI%RVy2^I_X}u3>*yN< zuVef{%nHYUL;E)$f3S6sn@SV_2Zj9uVWF*{G7o8QeNyZzBZY$~0KW^@C5r=b-m}ik zrZwlt9}KBXcADib;l(?+*3;8mL7I`LjMshlo=I%;A48B?29XYO>8XzLY8^fMutAN? z2NHlOBXfyt)IU#2vFm=>5;d)7t^uB2;JCyEX8D1kT!m{rQpJq^wC-9sPdnFX@-U}6 zKKX=?g0S{%pCh{v{N+o%^_u3**4{nt8i3>?s=yy|#PkjU5rJZsGFMS|L5lRAw%Wk5 z76E^7&NQ22-+$+%KC+BZN<-TUz{SGCjqE=O&IY;n$U8ZuoEskH10*<+|BN4-OT=Fn z2X7{Z;Q*IS-oGVR{1@mX{(ENrVC=eFf@=Z6;a%}B97&{rB+NYWi~pG$Sb_gJTiaG> zXg}j1$;_kh%7TD+n2GkH9^fz!&^CN$;zSpeBL^cb$Rfc}E0{ls z?wW@o7$5W@V%|U11`#Us2tva=pGFf*4Rqz)mDGYxwHZlTBI0>Nd6nNM1 zG@=OMImGvf*PY@X4-_KT^vog&_!cYXUOdm&R^>`Y%WsH- z%wzvZk>D!aezx~5+G?-K!;GS@okM`*0-j@9o=VC&ra={ww^hNbCA#<}cuh1^#+>v8^;@s4ZOX5QP~O1`2TzAiOLB zNHhRcrwH;v0u*0AB>HR&C9CW1R`)N*N|sr z>xQ;ZxV)PtPSA!mR@zy|ifSXqK{9_OYP@`8mu8(h2D_hS!`0THo;fwEmg&iVr~|8Um3f*QCzdPXysz}N2pcP-UIRw5Ww?c7nYCm2Ujh3{CD}nQ<}2@ zH^_NLgok1A1tBB?K-fz7b@|;9QvM|vv3RC_`?db{U){0&GWhF-qK&!O9l37M3j;PH zlH09|y(oCeumX@WVn#*20YG)@ItuVYZF^iH*I!c^9LsPIZz%$HA*>4W5?eIY-hk1w7}s&`6lJt%1d1#I zke9FyY9RuMEFc}QevrW)?OpKg_uuQ^{vnbR&<0UlG3!E35NL?Cg}0MWhMCEcb6Ere zmS1=jLF<~R^nO;_V=sh@o0&AuhAIw+SpFnG{iZ_j2Qje`*j6o_p`Fsxh7Y#wfOJn( z`hl*VtF_AD1LNwh{T z5JN-{8R47aoxnd&h-&v9?E!z+IllHe^<#51ZirKku^RZi{qq5pIC5@#|A|M7aeNf* zy_<&g^Qtmwl+#>UG{E2e+ia@9;a$7JIg>M{yV}54hc!Lm?-x9B(DMbwzDGyf0%&nt z>0GwK3`9z=Km?vmo&YWCQgzD()^dy8sya`q?x*_X6T7@H-!9J9Ho-mJBxyQi2UMbAm|Ul_Uj`q*BmduM0Qy4 z$=5~Y1B|+Nj7TMLhDb6Qkjn1uv;z74PJj5lGbPAl!QMn_z#t?YL1r?C@*7HYcy6Af z$S*4cQDd+ylwXw6P=2Wule5$HjbrkAcK%>+T|%oUig=&atgvanH(UGn=s=i|yhFRz zJ2#_3gwUp`6W(Q(8%0XXjzaMOL_M1ztrD;ukXJK+R|;-jx5*FqLL4_5y;KB2pd;< z|9uCMJ0|M=cinLOLT}hm2lm@(KWn;PukE;Mi3`R7B#nwvIWNCt?U5;$v)z%_ryq{6 zgNyLG$S;lsa;|o4)@KK`j4aR~RWgKKtFkoF8|heNVkfJkd6;_W!vrf=F3|5z>evCB zPHoA4q(*dcRyg{RZPY z2D5f{VUvQd*Kx<%=Wb(~)Hb8R==AatsaK5}XtE|JG-U631j z<2CCl%$)gi^=2KnkH0`1Kys2vB*2QKP9V_-G*}`;#i@uDZ~&3GBD`)Hw1~T1z8eD3 zX9u)mp_3;O9A+#MG=#9@aI1)9$r?lP2nCU#$WGvf>efojXX&#&u430Bs45vA4L`}h z350Kgv*OQQ$wLkBzk5TYfEb^ilr zpB0s3{K0Hz)_dUO#D{}KA(@dg=6P36apAKikFxHGg2J6LwV+Y(4Wa>`Sxp_ z_}tzY+KrKS0c#b7WCr~gsHS_GkpUo9(Js{cU89pHU9xQXGUshlXoxlZXW#g7tKDl) z8p)zByioLNJc%XmzUyuv8`pTEqIQPyqatSr-g%22e$X5-yfj1~k`h&^)P>?65_`g~ zghGB~pYeD89P7{Mki5`f?fE1ps-L-dwqXf6#4+_i85Wu3M6Fxm*^ZBka*<7_9Ua7R zSnY9D@p)V{wv=<9Ti{V^cO()73kV_%5VJoC`Q2v@AatS7SB#Cep>X^`bo-&yugkWD zSiKN2&GJ$HAimt~o7|nj85$__aSTC}SQ070UlJaiNF1;W!CwTK{jk_95`;&+FKxBQ zY2hNfiO^ID(e6XtUFmuzC?o~4{PKr`Q6U(aARP|`zZqZ0_`B2bqXP%szMRI9uruht zaCZJ6g^Zdio$@E}$axMKC`Lxjx)k%%l<~+pu)is8-063j48|HMMw= z*K;(hXP5SgFS}7%v%tUR4Wn!2}uBs04oBUkh}jN6P5bmbLQAWM`>&kq)oEU0|b1M&qHD0 z&-~{Wc$6sWkp97S1L_k=1qch3CGb2v|9qs<%VUM>KS+`@SO&fjY{GjFP4cW;h`-B& z{7EvAW=*u?4g}`~3gdichX^cgE7Fol>;xGLWa=T#)}nE0bum$qtTSRXRKMY0G#UKE zIPK4HE&>}niu{sX$F)#MxHQViq#%FeyKi*z3ztpUv%$6eUAPYb#OMR)b>yBk{6xhmXrtI$0mQ?I==_jEv8m)M#=}7>#?z z5+u{IN+r7i!MGELT>uTp3tv=DHbbG0dG{2wVK#!H2r}{0265d9JGV1a2BCu?OOd)f zNBMl$)ATOnllhMlP41g&$U^~O#&Rbtl@#Z}Q~K&F5%~pw*PXThAa&O}`+k`7#}1lD z@YtiK$y{}%L7W+KML~0-LX`@BQ{1$2-HcG(+-XPbG5 zUv5Q~HR@RZ1+G%yU7?DzmO`jpxu^DPq-3Vbp}BtV57 zhI{xm{MO>0PAT0~`qoH;$ikj~n$PjOgM%~2>G*CNjJGU<$y+`-vRDeCLvF z_2LWe3vl3oBYka}xy4BV9E9_}F6@T;O6i%0)HzY41bhqWb#X*+$a6-s0)6`RwK9WN z9AYRF0NezNS;!1z%W0Vs0AF2@&_@W&wP|$3hX9?fsB}@7odN?bYluNSFwLz zddahkt&sf(84X7e!J7U1Z0=1Ts~)YDP|rpXkGEn4kH!xgzlHpTEbw=aBdX)Z+kuA7 z3y1^0AzJ~P0v10!0)Q1~3&Mi;AQV`%Uu+7Dg$Vu@)Sd7r97QcpBTJk}bdU&V{N14M zzttCC>hNA`&X8ECFa1^6|L8RQK^7T|ZhZb7+PKy?!u$8Xy95@sE4Oda+ErGnr%rWh z5J^FK9!vZqy2$(2-(c!7ei&TSS6x*E7x&6=lf9bz_Sg!;D_E(5uDeFXZ!a?bAO&V0 zeMrk^yYn^dGtvX9S3ZTmxTbGCmkxtvPtR&J{+4lp4yGb`eV-r6g}(cT4jphGUIJ2m`vgv{I3O+;5pJ&dnTVTdiEt#o#6FjByvCo@ff(g&z(%G<5Uw_sPhnHS<7IBem*Ir}l z9I+%^6Js*<;-jimOqF2vot~*zc!nUHpvP-zP>S~KQcmC#PHb^u`VYc-C@GSJU%HG1HF>xJROmG9-$|~S zeDHui{>VjL*iPZ^+4zHmsHir>7nwFqGiJI<3=Sn&u5-q_DBr?`{+c)6bV_3k@i(-8 zH?ML0mt`b^zu3PaLm$Ne-#8U+JKMF61NoG~9H;bR|K?Sv&*LaU$1(zekwq2%a|D0C za5gV`{{GF%*{rXk{g2QAa;foouG`9uGy0J;Nqu`tpLKD8FG9mSe5S!%x{;1k%|iJ4 zibReIGYIP|v_3MmXmiX>V)_-yR=k8KGgc~|A2M1Kn(Fa~bW6}B@V@iw5(vU#sJ{EW znOr35XH%AWtRAkVie*&oo}%nONT9hgG36?@e{*&@el#!eKZo`&Q)S%Hpv7btb?Xqs za8J|e5A6~4toivLrS4pN6OJa0G~}T|b0;jk*uTH|O7FiHA+UhIxF8C{AH>az^4~4d z+CJa97cihGXpdWo zaS#^bGNJ!D=5*qLVA>yb*j zH>eO>=BM@$#1B^LZq=-ywvF6+fTX*ld)%4m$;SLhE`gyq$HGaWI2STtl;>QOUi2T3aZrZqD%hzQ#(%%j=O-f-U~pa? z!2ZpN@E2G{!Z6l3UAHv>>r|~-Mjd-k=VkqZ^+cbj=+_N zySQIhz4@ZElyA6J6-)kfc45_fRKA?GblfQzfMn0ko~94qak>TeFA?GM=PgpzmON^V z>%K{5ykZ_Mh~p1p+S^M*?1Q$>?E?G_IDp_6SO(w%J?t}Ez#7B>5oZ59kCLT1oLv0? ze{uZcKB5%fp=^Eog+6#+H{aq%PX5*T@CSX*t<5+9f60*P+SN3Wa4R3jAH@EJPX|MA zBv}&_yAFC1h5SKWVNmsP^>n0FQ;=VgC+Q+jI>-4OWfAB|2sla8DWMa`AEaT;!9$M! z?%3cgk$sRO_Bpf!{<5TCLGxP_{-)0-b}LN6ihOF%tiE{xiD$5%Zlx{5@CxV1f4x+)STpPEfr3I{q8* z2dUq_ZM}a@QmrWHiXWc%FAn+eUo==ghEB_4Awdy&K~mzA9{Dpqaq)bPc5G$m6)A8i z?G)k&`Gc@2zxm1@IqY8)KjarW#vwWjkF;vRa!NShobD=-7La($d%0mEHTOt7yJYJ> z*C;~q^-y@-5jVEN8xXon< zl#e{>h{;*|4`O?s;hw2!OxX}xki^Sxr6_-pTFP`Z7)OUAD!5WpoeqP;t<@7nVhJTR zZVau&0`s<0KpR9tL)IQ*+dU5lFdrp>51(QPp7AJa0uYa*nrd~Q2pL0>gxvTJ6NVKmTEG!(#f0W-2hdeY=d<&GDhHrjp zZnxj=9+6~#w`ibZfj_gz@3UNaz4f*-(sX#68)x80xes*=MfW?ecr*y zim4+M zfwrOpTpZf01~DiHNvWwt8wkQ)=6ZkiLEHAmV)m2UDY){#8z;2jDVgjnpO9h3q(w|4pc74zH>oLtIFdBfk>wz(5W zS%@yehQH;t*VLk=wLYqX&mO1#y_^X2Y)$8WQ0A))4bFOq4PzN|m18IQO+f_lz1HmP%a^HG$p*kDFUx3*J9fKZ}pB>Vixk^p- z9PS_J&oK8{b5Ol_P@yggO5*>C@dv?EmTr73$RqMw;8Eyrgj$&GBj|uh%#@lrv_ooP zEDq0QWZof4(vK!D^s*=EI$C!N{}sk2n&H=<>-{$)f>!Px^XWEGsVUR8Aq}~xiAUgx z+z(X!9>G5E^zQ7;le|Y0%`)zj?25-!o*~@%_KUjVy2va*elw!{L3p);(#=6Y6F_IC z`~@OBIOq~clWx>$yghz0aoq{grFrL^3{MUFC|TBUrVR<}Uu}2& z9H{8)*0_=(_7s_}M3=}mnL5^VPGa07Q^Dq5voxqKo8=@)DgrHAY`*Z^Ihr|B%NKd2 zViC)lr!@;TXR=F7qgtSyf+?5scEuI8D~Yb6H(s=j0@oCMeeOxqPe^?smw<(o#60Sn z)_y`y-LHqMxwSWiad0aUKZ31*t2s}1!Z0#*S1}iyeDX=VP-e|^5eEDipJ!|791SAf zv4I|b$d)+S+Q>T$-19t+Zug+DBuqU)tH&I1dm1!ciLWhSDQ;A zf5Bd?z=g$5xbGbTNx}Q!zkI-NM&Cijr6xJ6*2;O#rU;uL#Ex=q3yN5Fbn)tmL3GC2 zd&a5w5&Xe}yWF|{<2UViXQOmOm8zOJ&OO(NS8iORovXBdt?Q|7S*`7>z0W(lIl89c zqg1n@=Iy*`>e9w#Ok(MR_FqN&53X9`YSq}D$gp1uSwrPFUeOGV2s;3^;eH9!-Ct)nCEX_W=gX-l>I-uGl z7Bo3vtdo!2uf`vH1;&qY;*fh)FI{9a83p*`k8L2-dBVufxnz}aE-EPdk&%nJc4e_U zmC#swH=B?$Kgi!O{s!rb)?@pd-<_6hy%c2?sKvrMCx&4AX4W@Y?dh4-uC3QAz!#)u z97aQ9M5Auo#+9ZJ5cEUtoYeyn=IS`pLjEB5`_yAD6&`L^U!_NCDg!FqeAB_cJYt`~ z)@?en-`|3L-udn`$K9|pVn->k$s^+P2exSL6n*l(DzP#tFv#@VfkoLXs2k2M-<6 zs#W&CQ9=qQWLY}nRMdO#xVtD5VDe;B*zk73Nm)g)uen-0M+<^|-l0f40?Q%>QmrJ&z5S*ZEp!SrKP3SpBnYDqB^H*=WK`(hX0tXA z@U&TwA<4SOpSXz_nRh}blH*Fbj{>ZiqV1cwkkoeIV3i4U5V$ahW9OnglRiz=N|vC( zL6>2~7S9zoz#0HLXLyb~$OUeM799VySbfd?Ch13`H@ILsd7 zDtX{9nlsL4RyOk&HVXbA{Dm!R)iEJ*^WlHjU+1Y(5@%+4)u^ObUvNX56gZ6C+|(wM z-f-PrRC73e;`*prBR|y&WmUfHDJNd8;V#ubkY8p?Y7dnyrs%Kt^W3Ya;#FqzU3Z;V zzuHgfnJ3k#fp*j05mv|wn-3arZU?Ppg#E!!`86 zb9NIg$M9L@tT6NtX-@1OU)4j`;yz~)t9ZA1L75eI(QA<)x245c1ivuA_MC2 zVyYlYBp|VaxlIks<^}NwnYX7n2)WsXSjyynq;}FmB;uHMZnQ52?jiTUYH$7^F%GO( zIKLStA>w=vuNw+4|MDmN!R%dTx|J&v`K1sy5@Mfz%)Xso-5lw-I$y~(o+m`PS<^i2 zapB&7pKiZZFV*&SpLsf0Z3kFLM5ds(uw8Yfs#kS?jjxZo|6o7*FJL=#uonxrGx7@& z2JoFSPGc$OPM@`On*%uCkYAK%l!{2=amWx%R0~>=H*{$}s@5b>YpA7Cx_Cg$UOvg^ z(LKQ5T;~Sd!_+QbHmSD3MG0WpZ54DjWc2`l%^xKAyVnk@+7F+~-@fu!R#A8wpu?3{ z_;Fo*wGD(2DcHH=HhVZr(yr@HKM-<>`55K{AHyo)EH*@gad^nQ&uFp5jYI77nfQ0| z{OR*A%EsM}8tLhDO>9lSDAzsfMZ%}Y^ux%7$;GQxV{Kn!BX`$YWv|oD)tW!mMNp~M zh;ta*2X71+=}jBywO3X9ao5IVhAf?_ZJV`sn;pwwu~XbPTJPGu+fI)K^R1vVEg?5G z`$X@&p?Q<7TO#SFH0Pj#93o8qf6pEP1UEkm2M{0zkz?#acJKiA?C$bY|M;smF0~h{ zE#){`*a_yNExj^KBu4^Vi-IrcA1cqFF!DQ-{K?%`dRg4U4V=Zxl)cwXqGS8@**?vk zYaNnD$Ht7RQNwJwg9n6$Ns`0SBUTqlNFYsaO_oc!GJ#_o^v{C__3EpB^P`iGJ& zwkEX7*EkHpw*$4&x*-|m=N_^Y&{HP0m&T5DD_$bbD9_+8;EOm%@HgNOV*hsTaAum3{7+3BNSL3FR+f25HCTvff@}PxY=1K_>p%n{C_OD)SlhC%8fiO{f(stsKw!i z8A~h}orhVmeWNRZ5I>^u!uCy$BWzu%t!r%Z%t8sDYft0Km98p@2;F z@Hfv<@VApE`LP4~@z1Vtiv7#E;4hYMLNj;79u$5eT0 ze4es+`}R4K&KBY?<*X^COZ<26fJpz}wyo{qCw+1BNX;B;UmW3J0y=YO*EmpA*&>hx zhQ>q^MIF~DSsy#LyT?71?f>K7^^d>lzyG)X^c!2UO&b`0`8;Y>h`;QIRAQ=4_U;iV z>O)+&2i$i+Ex>*J!!i7YKS--bY!)W7@BAtUe?LEJN8e$r{=KdnkEy~@SnxYH>BryO z70-qYaw3)^Q5XyjItx=v_NzlK2Mu5Ki(@XBxoDvUoE0x;pFXCSci=X>w~8i@)`5Me zQnPTP63N1o@bnWN`J!!fE?B=p-=6S9`ekisMEp{rvdzEY4)ub_2!&lmLjJ;q?jZ=T z6C@?RfbyKPO}ls6$9RZdwA;03hYo|Hah$lS^w-Er-f%z%H-Q z4h8Ix;=%otmJ|@psOKCQu-LFn0}NOe@aBPa%uWP<1M8UCg&{Cyl79F>|MqunT&5)I zc;Lz=xgxOd(o=m2(j$R{zX6j)%>X+f205P zcN37&H(Jz>Q?{eUI$F|_hK4DUS z_@fr9(FdwpNp`W{XyY*=hJkb-h^gZe9_YY_j9 z=MN?row)~$P@=d0_AmO&ADtjXAhmmZEf?GD8 z>OTk%l%%QezBO}`MR?JC+w257+qbtx|Lo%~Zo}&I;?ts6yK9$e z6Pd)YBjcUr8ZTwxc%>4%mSUWd~Hc#y|0LjX*9ZEO}BpN^3t|V?7N8bS2 z8Dko>w(2{&pGHIZ4;nX+OZ@pseRtAq$0LXJ_dn~K&opYV0}Z&gctof%j7T zDCI8cy-4MRptB*50{jhmi@ZbrBu8!kQtbDbe?(k!H&8p`F0EduzkH*N-nzGm0L+H`vYIuhr>lPDk|wM$NFS4jjfuo+#ycyr>?J_D59GLf z6N(>Om5Qc@9XqJ!>-bMLR2N+Od^GDSn-4Y3~l_Ng@H-l=CFRHeII5vAl^ zdi-9^nc#kf$U6@CJopQOQ(foHH~r&WceNg^?zN6C33$u#4&i@}aPi2DYH!ai8Z2qX z_>@@FkSx%L{)0H#5Li4C{rYI)FwGp}L^8e|NQXMQKUWckui8t zw!3t(2Y||WBuU~KLr%$=1a@)Dhx`0X@Q9U-v;pG347F~ZKKVGP{ZibeVE+6kdoVB% zNGfC9Aha}fs#^{bT3Wiq{w~}OY{>7PJ!;oXH(jk)UvnLg`|dqeT`D|Er0=yCROflu zn0={E#8D6a67v4$h+c}KUda;nOK_7l?)S(SVY}`cz4D@oJS@o719RyjT=W-l3G#N1 z z;EDOnvcN_l;DKsdI@`U3Xox&yfc?gp>U=Mxj5=~~7AUASg*xgaR1EeVqTFJojzyd) zK{H&FM><_<6wQ)`So1;c#}3_1mhvhSg}$as#X+w~3DN$844#^#p|n397;y8$&W1z0 zkHX9|A!m}XIQzT<^fN4ktQ}jFovkHHOk=s@7E9=c)%yGI9sQp+SqmsOGRbvye)!I7 z3(t)dm*0L9$yP!_ckNQ+`nvj8w)$E62&^L);l>J2Qs1g9J^x%FzX$b39o-ZJ+A3D? z1IdNIC0(0$+C)8iVJfai?kVoSM{8_9u=<rV8eoW9ml)D8bM-w2PU~wBh#F>`kc{t}~Fx*y&ZM-1hQhYHP#6Qw3$S?}AUMN{?M zqmk1u=zpxVDP(9b(K|2ex@#}!rG8<9BfrdwV+S;4qQh0j(8k6c;^P3KrD=#U5h)8_ zNS{$MkUM_U?r6o7aRYE$s%gM31dhpEg1&?xpzLj4>Cn}&Y&(4VMLYV%Mq?+GWp)^u z7rG*9B*rf*L+=z9#2^ZWwia#`%R5c_%i~%y#~GgM*68>_z4=BY1EE|w$Hk~mzIuf{ zPWYM*((-kss@HH@DGASi`%&M2ZK-LWU{mymZ%xd6C_s>Ft}>r%@htZO+mNNqzCmxY zfNh8TLMy=i-T}Gm>O+tkFoF3-EI8zvjtX2%+z(3iXjm9SO*5oh2dXSkxQkN!8|@sX zmL`@68V;keAaqZ3DF8gu7}UTzJE62PPPnppf+zVjFO$<+VU{wwU?FHV@p!4~2#tMs*a@?Wus>akk7_Ug#9wM&ZC zW{sUx=+A%tvz_^&o9O=P)?xno7ynolE7@dz@kRaS8#7GriT*T^Q7+7XB63C{ zM*k&`dP;sLxq%V#ix@J;$eF}O1}Xe>J&a$X(rcFJ z+oN8e$%@|(KXISY1gVUj8yhW@U;ecS z?jSIJjGBC^>!Tb5K10L}$E?e1tab2+6bo|2$v zyZTB!P(=%8nw&^@ao7NL3396t-drzi;kNF~JAn*##5QQB0`juTA!~@<_>l(sMbpi5 z+_v4Fp~zi9FFktDwfK-<*0;!jZI#x;UlzPZgemw51cSD$2CNLZMh-62yQfPG5x3e) z!4XJAHqMRL7=J(i+^+j8 zuJ9o?q?>ZPL>S+C&0>r5{F`q~kzf_2n!)dXuqnN5n;Qx7eW_l;u(h8HPrZQu@`K`z z!;4PBLxqZ`?)Cy+@)tEU@@xGW{GFtPMwY>55D;h`NRSu5D?Nz4ELJZKzL@mRSH*@Z!0VC2_ao*DME5Nx&lZt(tLQc89@ zE{yyFzPO#yX-U5v+{X_A+jb(@9n|{3cgM3D9PN9EL?bUCZ?{C}Y|NTs`9**J^kdi0 z47Y24rAHnz4~u07Za9gfVNw}iYV~q`b<#!++pRZy@j(^2f__7k4({LpaZG+uzschz zA&q>P^7nX=sr!j*@{pR#dV+m~7X8%IO6=fzvp6steCpFL=tjZ`+91h+>l9}R0!<{;6K0fwc zTC!9P>zQhrXQN6ONdmDA>lOX^OZ4Y}ZHK60`Ti<6jJ|Qp^{0e4c1pNIfa&@xBkvI% z4po%cXRy0(jwX=D-YoJRtf6jQT#K6oewN(JTY*o&_&eHGX@s4+y?Q$NkZ}@79efr5M z^784P0M2$a&+m>$vJG#)!_S}eDt`1!e0%ztNHN3bo-y0*@^-o>VEi2)#E;-aW5Cia zrMdIxK?G(FQ#vMYKyWB@?0^nolxH}8+P2oZae3ins9VosxNDo2eUu-zk3V#SX`+gl zlU?XANVp^#nF^KX5Q}kz_2_Qh3^Whfg&mqj@RvqiVf^THU!h3eCpbk67ta;`t1x~< z+Axa=SygC~h+Ef=8k}Zp#6b5z7?;eq&dkgByV*Ib zpC8p{`;D+@q>2MYpZD64D;D5s+W+A1nX&guT`qy&m^3PngZC_8CN`*R0{gmEqT=F3!(Y_(&-R)> zNManxJ?Zk`#g*lx;5Cr_yc+48cbvDF2q&OA&>e9uh@+U9okA-uF??{d% z`5W*D2{GeZ2Ym6%g)9T?dNf{e5I825l-kA5ry~k>knPMD;rRfdXwfhYp>%<{#HK_1 zg)MUOm`)t9Z@GD6kHcuOk#XRIu!DkUGMXffQGO=m$s~7*e3CTmG%nY|B|#R?a7=me z5|de|wsdCvy`WF5Xa~p7+^V_l7ruDa%4c7iiuUTi+|eTVd&u}pND=(ShYSefjPg$4 z(ZXL!7f})*@!?|>1E4rqfKJT7Vg1yD9wp7qE^O1#g+u@yGW>72A>tcpQcnlB7=KBf zA|HU-Q;_1(4-sLwPOJuzXAW3?+yf$t_(Zx z6#nMp4-J_l{%iY}Xm|{Nv48WO8yPuh=uqHMR@4aoPBi{v z|Gxj;FBpG`K$R-4cVAToak0*Jl@Rv2;upObos-lR-G`08<8A*=9xq(J*uSA2YCmve zTeZwjz_)okLy#JD!BMQ#@F>FAql;C?ZCjj*P_z1}-{PYWv?Z{AQ8F1BKa9@}?Bz3z z%ym09xBa{9BHF*{eYG+0KgaV25ghQBbY&D0>{fhD+%{hv*A`zS|52n5yO=N#WjAu! zzejaEC-6VhRz8kDcn%{+?O*)Q#DB4WDfj)0oATJXRVu4xJxv;F)sC=TOjRqoN&QbW zlJPeh|83kLfZ8Yr5X?nvF@XVG>|*wL2jkR#2K%w2DAm9*p~jPkTq!PoBaBPYfNiVH z9Hev%(a${Ro^IrZbshgD{V&EJj32hh_nAmIph&m=jBK$y{J}tA^8|f}$Q0P=54{&H zm+Es{Deb!_$iG_WL}>ialv4=fza66d!Eh-k{K)v9;X08XNlFs@!Rvof+9vVD8r7XP zHf4%kC_M1X+xb5MYfuV3c;=P>>o&mSaXDonbF zrE?Gw<{h37{;Swg0GcQ*fu{+>96yT0e}gJmCywaYKI3mfls}l~+`^1Z{C76--yISD z;9b9ja?SiuzrI;dJ*5HtL_u!?{jB!5H!p8R@&t^(x%q=QlhKEi>?+9_W;rSm%C`VX?!vA7w3hu9CWb60@B>$PRG4&|7L;r!=- zKgei#&Sf=VDDtAYO8%qa$ej~4V{*VB%re{Prb}K5N|(`_uiHPlV7@b3o_VZjf3(Y^ z+4{)CAH+CCW&uhB6RgC_3#Ap)m6bF9(dG~hIvKgZ1!!dq7{7h`krVi7@j&h_vd^%1 zv(Gv**MiJQy<+e;oS<(AM}%{C6w$ z$Dj~yGAD@qXZVB8e~$78?c0w(HxE%F&rwEB5b_Iu5DqW?tB}86v=5;ON29eCg%P^< zaJnhABA=%ez~#VD5kBAOP^aWKjz5UNf+L~0F(E_w4do6I&U2IqFCihog&F&Bz@v|j z?f)@j>6C~3GWRfb!QVoSOe$9+%Wr=EVEo`kxQ}&)MVYn0`ZITXTK-@jI$`cV@pQ33 zp+D1O)U8NX?&1ZM)?LJ@tqe zd46mDee+F6g)VOw?g=2j)}M3p2a!-982Ke725}4ZXZCrgX;k&~QOxAPK%O+*X~VN; z=U|5)u(b&((A1v|*a>W%YU(V72{;pf$Qubt^q0OEJaC3vE zLuokJTWbWZ(AJsu3;&T$B^y@;bpFk*pTn~)6qM&1nWv2og9!=#!e1b<{JKjiv7fdA ze0M4Wk;V7kyRJbEaq04Qp`U>9H$Q(cXrT+#qCDehMdGkniHzXUGP^MTD7_()v~ae| zO;aB)57CU9|Kvk$2Z`32n*h6?pE%UR&oVOoKrb$TkbpHTiSfgnEk@gm-o4Z*a66yb zEX{v3^k0F$WD~7ftF^0bQ?FQTMH)Q>{}m6jFs5|=k$G;R{tO#&!9u zx_~N<)~w~Gx8&a%eqsV3@gumLqz)24ij8*WkqJCqO#UEue%r0e?B|xOvt~HE41I&( zY<{;esw@JCeBpq~e>99Ak-xE(qWYV(Vz~?BFIwn_Kp_qoAEd9G?%cDEj7xmMByHND zWpnlRtN9=H#e3(PtMwxNG<&)&1=drYr(KHnGT>gkA0T=qyezvz>4-`@ECqx)+&0$elwH zPwC~-I+SoET8+yWB>@i}V&!rf&Fx1utpnWvA2Q7ou`-$lAvQ{5MMJtA<&@FsrV!$E zrIOF2ahfpB8Kf(-)VH7UH$LE7$dO5PgTDaPYxD@O25^*WM@z}&f94nTorh}%R7$wg z3xwxVLsb2D62_E3KK3G|CM2c_(s| z4+IU%h)B+z?Q&}M>qQ7hd9DT#Z0jmFHl>#80}PQL2f$^1bQmD#73coKSJSM}+l<&jOmzb0kBOK-VI{$xr z=kpRp7{>9Z0-+2Nx@JK{8F&?e}VWD9C-lDt)# z^)WthPXcWgwB72r2{T01 zIZGfl+oN{3(vPCru{FaVBC}t-0xDuv`Qd|_#1Uai$J%yBf%yzy(F}k5Kr7#fY^8kt znq)NYCPz7~>8cv!T{Y|6PIU43rO|O^{)-wwN2=wHdlJ%NsD^w>?%3uiz0eDzS<%v@ z>m{ccA^8M%AcsEK8?TFgl zhoG@~u~iZ;#V5c&n z{_Br_`Qy)D{&W2LAAc7An7{txkAMI3_0M1a?O*@+lH2g4m74C{Z;)Sq^{v-xqdc$-+pu2(a9uhE1TYaa}Ed{nIeSyO-A)lT)} zl)_Zu59>>}ToPAL#xbh259;xOXQ!p}+p9}ko)ot)I%q82%j_)yzbR(UJfh*x-(Sb? zdQ7>0)Fz>HX=zu9{55gu(j75>_|6vX5W+XB>(1&yPI8eDNd0k{1UOP0k9QDg4m?O6D1n!-;%XPA zb?uzt7MwY>e6WeHs7^n4ppG=p(VesP;Fo~a&+GN2bwg|jRl6q`pnf*s4_kEF{rchX zKYiWvA3WR0f60sx_Id1!$}oAa`QjBnadqz_Ygg%NZ47Hn3oXkgW`1G1Jb@H^;g+A3 zf&8#QR=O8(?u|+b-xY6ugi?63tK=PGZLfMiqSq(%>e3;-6+5m{yzhwHCznnLw=jgZ zk%2#{2@feXOKD5wO>rsMH^q%Fz#p=NhbZ6*^|$m9EGj2m7TwKTEv)O4W0gz>=W4{e$|_y+d3*p~^4mt6_ek9)FP1MHp3` zmR5gRTsoXTq=YSr`3%2CnSGzqff=OKFKzrmV&)^1&S8MOrnLH!*rdI*CB&N5@(jgc zQ!G10Nd8St{BcT`VpM5b+Iw7#qaI%u0<#REIBaHwQa>agZ%U-&WCkePeZkm8h@=!;srUZ>dQx+L3`gJJ_B#3{ygdgkH0>cVEnh+~36$vQ#7?von2iMO(&X zn40#AhS8@gLA<@!DJ?xB=5rod$3wzkq&@U9O_JY}F#$qNZ(Y@8R+Dz)+If;2kIR_M zrKJKaxr|sKx-gpTsV${C1D@)a!f5fS0Dz;{jT$KZ$as5CkA0@Yq~()@G~TY2JE+i$ zn|k%78V3N=OL+`d2QVZ2)W%+o`M0Ob%zOZh;yFVZqDVsM#Z8jDDZ?4E>E=@2E&+JU zP>QQvl-3;=sK>8ILTsy(XR(R)h}ZPfJU(#vniJMM{DwVbN^>XMj#mOmu}|X(Qz@&LMTzWb zCA)|xN1k6R{F$J`hxd>jucw*L4xIOj(rnjH(SSnh!y0(~C?teU@69@)eKa#Y?oS%l zJU`8D1bsfFhmc-xWI7~#$~3TK^kR(~wHJgP;|ialF>Ho*-weH3)7zz!SwMe!f#CU( zoKq_JoCe!A8cz1)`9nD&B?}fyDlC(!=y4(XWq~eNfRYs3??tWty~@m1Y|Zt z=(!98KgkuZ%kUL?%170%u;x)i84`4}MEjsv-%_giTMU*o8dvE_u6SK`=_rgXU5!z5 zS^|De%p4eM_(P1HG#XdwNv?QTR=Q}2`Luw{LxvJ?^r*!Anphvg*ZdWpx#RV;tix}4 zOPM7HeKP7kVJ-q3Ga`e1P-YGxpZp;nxa0LS(BT)oq6Epq5g#(N&n6EUO29Fr681Y{ za|Qn-PY8jecgR9J-{cp)qT~;mN!Wv%O{@@pm@ko0*)V*$W^gfSG9+F!z7;} zDr^E^sLz^!14jS*&soNNy$_OSBR+FR7=0cxlzQl7=@<> zReEOR5+oF7WY7;eVe<%Nk^#z(#vhBqJiVspXPpK=LoNH{t|ey(NYs!qG@#)Zi4xGv zNGyC|2;`IGFKHxa%9b=ED8WOq0W!~!gPRQ2YcNw!z1MfNepwGY{!1Otm(CKd1>!0d zny{=(=*)gE>WQX z0QD&JhE46lb!f*;4D?e>!&6TK9gM6EDNzP#gY~Z81h@1FfiXFV`Cr*88XZXr#$>gWf&DStJwg`jCis! z@=t!n^Gg1TP)P<3y|YOYrVMbhQHlSUI7^%L8^JP^>6ggHOFm009u|`)02vc_(>_-K zNH$`!y`{-AXZ>o)$Nu>paxPYr-%BOd;|GRvIxs|hoX@0ZBl z4mu_BTVjx(88NW|hp|r$fP^ES{FX9|4Vu-Q0HsGItTry|Ho0UB#UoqT_s!)MK;UU% zCnJR7u$d7+KjeI>3Bre?YWNTmHcRA?V45Z16dS^LHXy^IIV3?_O7$k6v`<+n*bwvZ zl9^Hez9d#Ex@t0lCJ@C2SR$mb}%C0LzY2!0)T{Yo~-S>>y%P&U)I&7OP~l& zk*gfhOA=p*W?6Xe=qz1R5PETQpG*=O33;-=k@xN^{dUl)t^+7PD#4At}hGf%Gv z9pjx(pf{t?9yW~;JVU!Qfzgk|g$r*4oe%}|U?eD@@gs5J!W)+z3^dav%?PI5G<#2z zBz%(O9j{&ya&%LRL9H!W4eVx=5lr8>z|$Dz2`u4Aj8cTMtSK%~WM0q*G(Q5It0SKz z?2s8k?`V>CFAITQmUTkAX=YyEH^%VkU7!;ZMiW@{D6{i~Ndp`i>Ag%XM!sOM$2DX; zaxb8fgivO%p(bn^WA+TaVKXC)eyGRIjD}rvnt5lRA!yB6+8|?KIMsQcslymqlZ>=! z$6E#*3-mNg;``dQtc`uC&jf~}pP5DXwLYx1n5jd^Y%+GO0Vq7uklQs*;-_RDZgH%QtK7n0Ep%FL5s|#%LQ|&F)9(Au%3O2-i5T!8 zP*~undV96@v`d|8u&L+606q`dQGx*BXlGZ|3;y^pvW@8y7@iO|m#E`{Fb2~+p2P#0 z7(nBJSqDJID07|a)OO6tw(I^rL1-9tV=Al3;zkC~B*QFao*Z^CC$t=F;_cb= zU;u#1w(CBykC9d`YmB-vT}IM^8v!&^?>bUzIIi(J>^(Kb8T9njM$Ex~qu=w^wwDb{lArlq zURYu~GlJ4b1buXo5__WDbi4*93!5Ji5C(91W;EnkrFM=h17 z&H;-~t@sWH9D8HLAKu>1uXtVAzA-c&JSXJq=D}U>qV!SE)a1SGFeLvAvi6Okar18h z%m)cqn5MD((5E@-_LKZd?HDBgBeM3Hq4D5RAwO&$T>1(sJnCMPzp;^lhkr!bxDi+m z{wV-#@uQD?%ytZa(Y+2IvYLS>e@aeML;Vg=dr#G2$ZC@hQzakQ z`=~oBJndkI55_O$nM3KZCA$`T)a+;tQ)isbKC>EV$nAje%qYxxWOYd1Z}QogT|8|n zJ+n#}dJpj(9_zhlJA4wYBr|Bs!!=HLDh%GznDW7va2_?49=K2N%-JcCGswYyDNpvf zOr8ewl*J_R&r^$p<5%=L0%VG81>^M^PxBhk@pjMwoNxqCJOA2=#)f-AQ+vZ2cpn&r zk#zG$2F-8Rd@#R)_ZsCs$`f$M1Yn*RxIbkwXbsq?Wu-b~mIzZEa!j*Rb^$fqE(JPj<;V<=AU})xvz2Vdl!e?ka(hS#;%_9LwNEnIqiY$aIn_}-3OMXvK z3Nu!e^gxW$0%JD9K$&Lt{l2Vd6#Ls5LKckiiY9|FeSx$KW=l!aPO@WMChWnNSP}I2 zq)WE&1xenNg?UQMkia)fyMUPAxKx5I_ePgeEwM&$@4!JeyRzri3>tnUKnCIaI?`s% zFU88u7*#tCBhxB&>c!3%y+yn$Ov2mum0Joy6|8n5B^@=9_$58P3bVZ5xj)N`tx-rkS6s>f0?w04ZUC5=rr~YOJk9?^p?Ks z()o94{)*+65Y=;qsLwW+H}ZnsjXXb8_Ljcu3J>Wu`9nfJV-JnK$)G-^@h8lV37N@! z-x!&vhg3Vvmal25Hv&C>nt|{}Q5u4OitOp%2J_Ex9iif5W8 z>N87!!4~t~dQb8@l;8}L1Y#5kVPtsGGt-gtnMJ=~3-dEwYWVN4M0tUSd(E=rA-c1) zmjs&pcm44%Q2NPcV*bXAaJx??+=)T1_*?d=FR=3y7cY5{=$|jhgi}_HSAu^~tnb~A zH);EvhY9*4lxjX_342z|ht$et1}*-fb#`O*9K)&FKcY8RFi$=?L%X5j6J|=2DwF-h zzB$c5@ljqc9c=vgRIb1Ue+A}To$?|7YRbPqJN}8A?}Nq5si8ggTn78g3a+ zJN)X`&fr;?kN4%At2t%MjpAzZ9}2(moiX!geW>h~8&_nzj`Yt4o{`QnU!fiOwmjsO z8+%Kcqk81b#cXVAvZZ8yxtHX8P_{hnpx}e&hmoo$hmdNsy0oOPhMD>YR`h}$bd_$@ zVx2+vvs&xFUuRc<{{B$_zBB3t>uv1qde>FD6i3Za*!96_cF3~7bITIm6Eq_A7EM=U z-Mbd@*lI|Pt$J_ht3Mr`zgqY5SGSP*Mi`RpWsO~5u=qoC=dpxy>DhJqkWuq+W9&Wo zbwk-(fnB8lQ;dOl+F17yOL*7A*-VE0?FKlWC8oDmJEe6)T;(tI)c~6rs_P_w)p%Sl zNk(xT&H!})T{B*<(F9X_G3Xd?^$Ez~2=hbBY-UDa2}c=+?1xOyG+3bg^&|5s{FC_t z-W7Hj)YOFbQj^~`l%8C&8$#7<>^=}CLR z%j>e8GppgNyD~oJWUlY`@m;5;y*_ljj%@XVj0#3#3}z*szO zFD)5y27X#vS`zaaLM6W|v`drc{Ai`ztBakBG>5NuHu7FRk5~S$YmE-Snpe6#g$BQ6 zC_`?E@N2~8Q|#PjP|R~@UCGOYX=_SJu=tq_;T9b1()0^SbcUTXHHWNs)>XY^q#ao` zlGnGldlcySEkJx@X$?8&`3=;M=ITVzd zns&A>#h79ppkX(VHbIO!kJK_H3o(+#B`mp}kueDw&d@L@qtRqDBA=QN*8YDk4`sMX zh7nmvlWD1#sFDSUO)#MJBjaVB9+Gt!+9gdEN%!$;t!&g2-Y^ae4n|J#?<0+1+1@s) zVZ@e^5DUySyJ*=r9PnJCE(t&+8D*bz6ehn88Gn1lnJT# zGWy#Zo##f~&X2=1uoKuYp0ePJnCVUuhQFy{;>{I|@&V1}z1Y5)|0;YlTf>geA*YSK zp@m#mm4&-L+pJzk>W|#Z>^idOF$iA}qW>Vr$4 zMDYhMl?P)lcNxLK)eLHEXJl24IjZ-pF3t4(_Ka|_Kf@dZdK7=}Qt9E<&T@qas^qp_ zHtM2H14hkn)PT&7n7ur0Q)$9%(w26!Zs)n&l?j-onfG`fhdI7(0`XEX-N^&6bF>3* zc;C&l+|CP1w=c0J+KzacLzl^KJUzsB7|ubB4}d!dS1(aG379U)Q?O4U7iBUKARA?9WjoP zO?Ngnyjcv;C$|8?7?F@o8P4FRo9jw;zuk05nsMPL$=sLW7+|`;xB7_;F$)H5c6b$f`hRG9ZP6gmOVGPh@$iO~E3?b7@ayB)69K%eF_nD{3 zpr1?tt;aP(JFCHY!YLnM+Ic-thDksZpk%aZ7tSa$l-7Vcv->`PTpjr&v%@USyuQ!S z&T4#yWrq)7P`uGA4Ql!H1mDRZUKw^WyY7cZ-_#aRd*hRxFc=dcH2Nlkx}ot&aEHtQ zASA)a0ML(&*FU{wcD&MeGOzD@Z`kq1uoHT5b8xVrH1(-SyEmE+$+;vmVZf6Q03b5r zX+tTlWx-%G$kLk`v;GoDp2l#D#zZpH#?t`DlZ1Gq?vRj7Ca6rX>Wh z<`Ss4>w0M%0xiXBIp$cOG1oGKS@F;)0|m{vSrhAvd$7U1(`kTpT#a| z?HHL6^p|0nFGfPN3`CkEE#_;DE&XR-+Nf)OwNYw_)J8)-#g2=!G_#9=8;f}|1g&Y< zjfH&brCE(pnG5tWP^N$oj@rgS6R#BE3Z^LpUodvB@f_druCU{cOeaK{rso*J?WYgG zbeL3t!`O`m(9FmfA9zZD_AViWMGqUIOp_!V7yl&rZ^`&WjFJg#Ec(gVjYiv-wef!Z zxjbhG8Yi5>GMr4)i2bA`i@oeKApwN38x5fOk@0@{>BEPe#t9+EG#RY1l%5R#ElueV zBW5xii+M5xtuc1|)W$E@_zFGkU7-nK&0s?#-(*%iui^81C7IS6b%%tAOnaGHj9)I8 zLx!e(!jjLBmk=yqRy?f1ftOPX8S+J$2@Ia?kbpTyBzeif0&>eUG8}a| zzf>%^;DJM_QQ-gGLd#10C&fA>s5c`4vW%D&BHk&OMN`9X;h96JvE*+*+A?Z# zopFID2^1MXg(ES3tq9Zl=1y!+3p?bB&|7UTcU6HyzhsJ_0XG&w;ljA^6Qj&jP~`8w z#$J8Ox~dWD1-mRT2TYe_5derDiGHWhKwr1X9_2f2xEMV%?1-K$LP*vmnOc^ia9-21<3@2<%nD%vL(<6#0Uyw;h%u%M?6+5JqLHR7uT3WPLHp^z%eC* zVcBwv2u^VX=nK5UPdx#2yxn(z9gjQ;bTBHL0-zsdkg)IVjZR3G<`;lr21&>iAz?Hb zFQdu$S)XBwCWA;{l#N0lOmUCjAP)hs&(R&8gO!@uu8*uZ0tru$ z-)zPdZ+USVCI?ME>Jf-uCqVsSr8x@I*IvHXKvVM&Mrq)UC*HyUF=0#@2%}jpdP~5B z*BU;jcIlcY7^Q|RYvXM^&58yATMWPP#QZT`GBIIkCk1%RyHoN6E#m`g*Q|N3QF;{a z7<>D<85{4#Cot1Z{-%9DArA1&l(|A{_*B|8Yu>Asp0n&|`)BLr6-xm=ZO6X!k^-FY z3sdqCk@18vB=@%Ugh8c^B}`5g;tRi~#VzGhzlSf@6c=evTpEiSR^M87YkotILSEz33p-goQ6heG6bU$?<~v|JdH7X0zx*@s7wR; z+PyB13wf0KQ7>!1}VPV8CKErskc`6l2 z14;a7nax{FXG!n^Ls&jNA?p}aCd>N9F3(I4`r_3E&}SoUmpT(S`jgo(dW*y}g;!qf znCj2soP}3(a$!sWYinUy2RfRlX)^3x!T)F<3X9vpgRW_?Vxm|tgiAi z&g@rd4LuH!O&g0EmTWuOCpUT;X*?zK0ZixAq8*NjgrEGPQyhL{sKhb+G=!XO`lXEy z6Uk#4*FlXBpgRW_wNW|`Q}c_KG#+(C`JFt=B#eOhCLxD09?^u`XY&Yu9|96)BYtT{ z(0!hEN~yO?eG1NSWa(zX>>8SI3+dgIy||i89wuBiN%)X0QB%MJk0>S85n2f%tB(}S z>TD6?-PGvSo2W~6osh5jFg$Z8dF)SAmOce3X1)VJG4|i80iT5#k)MS@X$^_}K{9>a z@tXM#cqv2pO&a_)_$m2Kc%V^|{LjkFIhUTy`OIpD^9wZ0ryw=t*C1(`jNI}mS$4~f zK65y~m!bVc4gUprCHWnAAW)LKUYCIrZj8u#8>>n3kB~LaXDsCH42sc^>)w(vCmh$1 z$F}#9{BO$IS2ITbWQMlX@atYtF7sa!kjL(9Cs%w&wsS1+n4E|ld{3&mEeRM zqX&YKD?TL)KQ);!^!g@An=)@Nb;wX+%uDtGS&uTB*6?*k8+{&f zR;eSE$lBPe$#p$=)wL6b^ky<2HB;)ockvy~!S#}f?Q^<>OaX(sp=oRHRC$QviT916+^SR zrC}$7y(??ncedMO?Kif;g}Lq2^Z7_6>?JXuRx4*1 I-D%bT4^!_m;Q#;t literal 0 HcmV?d00001 diff --git a/samples/nehe20_strided/romdisk/mask2.bmp b/samples/nehe20_strided/romdisk/mask2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9903d93cc902f5f5c65bfdba3c4543f43b1bdf4b GIT binary patch literal 196664 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 literal 0 HcmV?d00001 diff --git a/tests/test_glteximage2d.h b/tests/test_glteximage2d.h index 3349c42..393fd87 100644 --- a/tests/test_glteximage2d.h +++ b/tests/test_glteximage2d.h @@ -8,6 +8,7 @@ class TexImage2DTests : public test::TestCase { public: uint8_t image_data[8 * 8 * 4] = {0}; + uint8_t stride_image_data[96 * 48 * 4] = {0}; void set_up() { GLdcConfig config; @@ -74,4 +75,54 @@ public: assert_equal(internalFormat, GL_ARGB4444_TWID_KOS); } + + void test_npot_rejected_without_stride_parameter() { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_VALUE); + } + + void test_strided_npot_upload_allowed_after_opt_in() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 96); + assert_equal(glGetError(), GL_NO_ERROR); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_NO_ERROR); + + GLint internalFormat; + glGetIntegerv(GL_TEXTURE_INTERNAL_FORMAT_KOS, &internalFormat); + + assert_equal(internalFormat, GL_RGB565_KOS); + } + + void test_strided_texture_width_must_match_stride() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 64); + assert_equal(glGetError(), GL_NO_ERROR); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_VALUE); + } + + void test_strided_texture_rejects_invalid_stride_parameter() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 65); + assert_equal(glGetError(), GL_INVALID_VALUE); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 1024); + assert_equal(glGetError(), GL_INVALID_VALUE); + } + + void test_strided_texture_rejects_twiddled_storage() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 96); + assert_equal(glGetError(), GL_NO_ERROR); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB_TWID_KOS, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_OPERATION); + } + + void test_strided_texture_rejects_mipmap_level() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 96); + assert_equal(glGetError(), GL_NO_ERROR); + + glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_VALUE); + } }; From 7b48abc040e2e75a8d76f8568135d30d11f11536 Mon Sep 17 00:00:00 2001 From: GPF Date: Sat, 20 Jun 2026 14:34:27 -0700 Subject: [PATCH 2/4] Updated the MR based on the feedback: Replaced GL_KOS_texture_stride with GL_KOS_texture_non_power_of_two Removed the explicit texture parameter and made supported NPOT GL_TEXTURE_2D textures automatically use the PVR strided backend Added clamp-only validation and retained the existing restrictions around mipmaps, wrapping, and unsupported formats The underlying PVR strided implementation remains the same. GL_NV_texture_rectangle can be considered as a future follow-up. --- GL/state.c | 2 +- GL/texture.c | 146 ++++++++++++++++++++-------------- include/GL/glkos.h | 12 +-- samples/nehe06_strided/main.c | 3 +- samples/nehe20_strided/main.c | 5 +- tests/test_glteximage2d.h | 101 +++++++++++++++++------ 6 files changed, 175 insertions(+), 94 deletions(-) diff --git a/GL/state.c b/GL/state.c index 01ab3f9..2a85f68 100644 --- a/GL/state.c +++ b/GL/state.c @@ -1181,7 +1181,7 @@ const GLubyte *glGetString(GLenum name) { return (const GLubyte*) "1.2 (partial) - GLdc 1.1"; case GL_EXTENSIONS: - return (const GLubyte*)"GL_ARB_framebuffer_object, GL_ARB_multitexture, GL_ARB_texture_rg, GL_OES_compressed_paletted_texture, GL_EXT_paletted_texture, GL_EXT_shared_texture_palette, GL_KOS_multiple_shared_palette, GL_ARB_vertex_array_bgra, GL_ARB_vertex_type_2_10_10_10_rev, GL_KOS_texture_memory_management, GL_KOS_texture_stride, GL_ATI_meminfo"; + return (const GLubyte*)"GL_ARB_framebuffer_object, GL_ARB_multitexture, GL_ARB_texture_rg, GL_OES_compressed_paletted_texture, GL_EXT_paletted_texture, GL_EXT_shared_texture_palette, GL_KOS_multiple_shared_palette, GL_ARB_vertex_array_bgra, GL_ARB_vertex_type_2_10_10_10_rev, GL_KOS_texture_memory_management, GL_KOS_texture_non_power_of_two, GL_ATI_meminfo"; } return (const GLubyte*) "GL_KOS_ERROR: ENUM Unsupported\n"; diff --git a/GL/texture.c b/GL/texture.c index 8f95176..ca761da 100644 --- a/GL/texture.c +++ b/GL/texture.c @@ -936,11 +936,6 @@ void APIENTRY glCompressedTexImage2DARB(GLenum target, return; } - if(active->strideWidth) { - _glKosThrowError(GL_INVALID_OPERATION, __func__); - return; - } - GLuint original_id = active->index; /* Set the required mipmap count */ @@ -1133,8 +1128,8 @@ static GLint _cleanInternalFormat(GLint internalFormat) { } } -static GLint _cleanInternalFormatForTexture(const TextureObject* txr, GLint internalFormat) { - if(!txr || !txr->strideWidth) { +static GLint _cleanInternalFormatForTexture(GLint internalFormat, GLboolean forceNontwiddled) { + if(!forceNontwiddled) { return _cleanInternalFormat(internalFormat); } @@ -1534,6 +1529,19 @@ static bool _glValidTextureSize(GLuint size) { } } +static GLboolean _glTextureSizeIsNPOT(GLsizei width, GLsizei height) { + return (!_glValidTextureSize((GLuint) width) || !_glValidTextureSize((GLuint) height)) ? GL_TRUE : GL_FALSE; +} + +static GLboolean _glTextureWrapIsClamped(const TextureObject* txr) { + return ( + (txr->uv_wrap & CLAMP_U) && + (txr->uv_wrap & CLAMP_V) && + !(txr->uv_wrap & MIRROR_U) && + !(txr->uv_wrap & MIRROR_V) + ) ? GL_TRUE : GL_FALSE; +} + static bool _glTexImage2DValidate(const TextureObject* txr, GLenum target, GLint level, GLint internalFormat, GLint cleanInternalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type) { if(target != GL_TEXTURE_2D) { INFO_MSG("Target unsupported"); @@ -1585,47 +1593,47 @@ static bool _glTexImage2DValidate(const TextureObject* txr, GLenum target, GLint return false; } - GLboolean isStrided = (txr && txr->strideWidth) ? GL_TRUE : GL_FALSE; + GLboolean isStrided = _glTextureSizeIsNPOT(width, height); if(isStrided) { if(level != 0) { - INFO_MSG("Strided textures do not support mipmaps"); + INFO_MSG("GL_KOS_texture_non_power_of_two does not support mipmaps"); _glKosThrowError(GL_INVALID_VALUE, __func__); return false; } - if(width != txr->strideWidth) { - INFO_MSG("Strided texture width must match GL_TEXTURE_STRIDE_KOS"); - _glKosThrowError(GL_INVALID_VALUE, __func__); - return false; - } - - if((txr->strideWidth % 32) != 0 || txr->strideWidth > GL_KOS_MAX_STRIDE_WIDTH) { - INFO_MSG("Invalid strided texture width"); + if(width <= 0 || (width % 32) != 0 || width > GL_KOS_MAX_STRIDE_WIDTH) { + INFO_MSG("Invalid GL_KOS_texture_non_power_of_two width"); _glKosThrowError(GL_INVALID_VALUE, __func__); return false; } if(height <= 0) { - INFO_MSG("Invalid strided texture height"); + INFO_MSG("Invalid GL_KOS_texture_non_power_of_two height"); _glKosThrowError(GL_INVALID_VALUE, __func__); return false; } + if(!_glTextureWrapIsClamped(txr)) { + INFO_MSG("GL_KOS_texture_non_power_of_two textures require clamp wrap modes"); + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return false; + } + if(_glIsTwiddledFormat(cleanInternalFormat)) { - INFO_MSG("Strided textures must use non-twiddled storage"); + INFO_MSG("GL_KOS_texture_non_power_of_two textures must use non-twiddled storage"); _glKosThrowError(GL_INVALID_OPERATION, __func__); return false; } if(_glIsPalettedFormat(cleanInternalFormat)) { - INFO_MSG("Strided paletted textures are unsupported"); + INFO_MSG("GL_KOS_texture_non_power_of_two paletted textures are unsupported"); _glKosThrowError(GL_INVALID_OPERATION, __func__); return false; } if(_glIsCompressedFormat(cleanInternalFormat)) { - INFO_MSG("Strided compressed textures are unsupported"); + INFO_MSG("GL_KOS_texture_non_power_of_two compressed textures are unsupported"); _glKosThrowError(GL_INVALID_OPERATION, __func__); return false; } @@ -1780,7 +1788,8 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, return; } - GLenum cleanInternalFormat = _cleanInternalFormatForTexture(active, internalFormat); + GLboolean useStridedNpot = _glTextureSizeIsNPOT(width, height); + GLenum cleanInternalFormat = _cleanInternalFormatForTexture(internalFormat, useStridedNpot); if(!_glTexImage2DValidate(active, target, level, internalFormat, cleanInternalFormat, width, height, border, format, type)) { return; @@ -1795,8 +1804,8 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLuint pvrFormat = _determinePVRFormat(cleanInternalFormat); GLuint originalId = active->index; - GLboolean isStrided = active->strideWidth ? GL_TRUE : GL_FALSE; - GLuint texturePitch = isStrided ? active->strideWidth : (GLuint) width; + GLboolean isStrided = useStridedNpot; + GLuint texturePitch = isStrided ? (GLuint) width : (GLuint) width; GLuint pvrWidth = isStrided ? _glNextPowerOfTwo((GLuint) width) : (GLuint) width; GLuint pvrHeight = isStrided ? _glNextPowerOfTwo((GLuint) height) : (GLuint) height; @@ -1824,7 +1833,9 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, */ GLint destStride = _determineStrideInternal(cleanInternalFormat); GLint sourceStride = _determineStride(format, type); - GLuint srcBytes = ((GLuint)width * (GLuint)height * (GLuint)sourceStride); + GLuint sourceRowWidth = is4BPPFormat(format) ? (((GLuint) width + 1) / 2) : ((GLuint) width * (GLuint) sourceStride); + GLuint sourcePitch = _glGetUnpackRowPitch(width, sourceStride, format); + GLuint srcBytes = height ? (sourcePitch * ((GLuint) height - 1) + sourceRowWidth) : 0; GLuint texelCount = texturePitch * (GLuint)height; GLuint destBytes = texelCount * (GLuint)destStride; @@ -1858,9 +1869,7 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, active->pvrWidth = pvrWidth; active->pvrHeight = pvrHeight; active->isStrided = isStrided; - if(!isStrided) { - active->strideWidth = 0; - } + active->strideWidth = isStrided ? (GLushort) texturePitch : 0; active->color = pvrFormat; active->internalFormat = cleanInternalFormat; /* Set the required mipmap count */ @@ -1982,24 +1991,24 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, calc_twiddle_factors(width, height, &maskX, &maskY); } - for(uint32_t i = 0; i < (width * height); ++i) { - const GLubyte* src = data + (sourceStride * i); - GLubyte* dst; + for(uint32_t y = 0; y < (uint32_t) height; ++y) { + for(uint32_t x = 0; x < (uint32_t) width; ++x) { + const GLubyte* src = ((const GLubyte*) data) + (sourcePitch * y) + (sourceStride * x); + GLubyte* dst; - if(twiddle) { - uint32_t x = i % width; - uint32_t y = i / width; - uint32_t newLocation = twid_compute_index(x, y, maskX, maskY); - dst = targetData + (destStride * newLocation); - } else { - dst = targetData + (destStride * i); - } + if(twiddle) { + uint32_t newLocation = twid_compute_index(x, y, maskX, maskY); + dst = targetData + (destStride * newLocation); + } else { + dst = targetData + ((texturePitch * y + x) * destStride); + } - if(convert) { - conversion(src, dst); - } else { - for(int j = 0; j < destStride; ++j) { - dst[j] = src[j]; + if(convert) { + conversion(src, dst); + } else { + for(int j = 0; j < destStride; ++j) { + dst[j] = src[j]; + } } } } @@ -2009,8 +2018,16 @@ void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalFormat, gl_assert(targetData); gl_assert(destBytes); - /* No conversion? Just copy the data, and the pvr_format is correct */ - FASTCPY(targetData, data, destBytes); + if(sourcePitch == ((GLuint) width * (GLuint) destStride) && texturePitch == (GLuint) width) { + /* No conversion? Just copy the data, and the pvr_format is correct */ + FASTCPY(targetData, data, destBytes); + } else { + for(GLsizei y = 0; y < height; ++y) { + GLubyte* destRow = targetData + ((GLuint) y * texturePitch * (GLuint) destStride); + const GLubyte* srcRow = ((const GLubyte*) data) + ((GLuint) y * sourcePitch); + FASTCPY(destRow, srcRow, sourceRowWidth); + } + } gl_assert(active->index == originalId); } @@ -2062,13 +2079,24 @@ void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) { case GL_CLAMP_TO_EDGE: case GL_CLAMP: active->uv_wrap |= CLAMP_U; + active->uv_wrap &= ~MIRROR_U; break; case GL_REPEAT: + if(active->isStrided) { + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return; + } active->uv_wrap &= ~CLAMP_U; + active->uv_wrap &= ~MIRROR_U; break; case GL_MIRRORED_REPEAT: + if(active->isStrided) { + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return; + } + active->uv_wrap &= ~CLAMP_U; active->uv_wrap |= MIRROR_U; break; } @@ -2080,13 +2108,24 @@ void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) { case GL_CLAMP_TO_EDGE: case GL_CLAMP: active->uv_wrap |= CLAMP_V; + active->uv_wrap &= ~MIRROR_V; break; case GL_REPEAT: + if(active->isStrided) { + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return; + } active->uv_wrap &= ~CLAMP_V; + active->uv_wrap &= ~MIRROR_V; break; case GL_MIRRORED_REPEAT: + if(active->isStrided) { + _glKosThrowError(GL_INVALID_OPERATION, __func__); + return; + } + active->uv_wrap &= ~CLAMP_V; active->uv_wrap |= MIRROR_V; break; } @@ -2095,21 +2134,6 @@ void APIENTRY glTexParameteri(GLenum target, GLenum pname, GLint param) { case GL_SHARED_TEXTURE_BANK_KOS: active->shared_bank = param; break; - case GL_TEXTURE_STRIDE_KOS: - if(active->data) { - _glKosThrowError(GL_INVALID_OPERATION, __func__); - return; - } - - if(param < 0 || - (param != 0 && ((param % 32) != 0 || param > GL_KOS_MAX_STRIDE_WIDTH))) { - _glKosThrowError(GL_INVALID_VALUE, __func__); - return; - } - - active->strideWidth = (GLushort) param; - active->isStrided = (param != 0) ? GL_TRUE : GL_FALSE; - break; default: break; } diff --git a/include/GL/glkos.h b/include/GL/glkos.h index 11f8876..47f8f4c 100644 --- a/include/GL/glkos.h +++ b/include/GL/glkos.h @@ -215,12 +215,14 @@ GLAPI GLvoid APIENTRY glDefragmentTextureMemory_KOS(void); #define GL_TEXTURE_TWIDDLE_KOS 0xEF51 /* - * CUSTOM EXTENSION GL_KOS_texture_stride + * CUSTOM EXTENSION GL_KOS_texture_non_power_of_two * - * Allows explicitly opting a texture into the Dreamcast PVR's non-twiddled - * x32 strided texture mode. Pass GL_TEXTURE_STRIDE_KOS to glTexParameteri - * before glTexImage2D. The stride is specified in pixels. + * Exposes limited GL_TEXTURE_2D non-power-of-two texture support backed by + * the Dreamcast PVR's non-twiddled x32 strided texture mode. Texture + * coordinates remain normalized. This extension is clamp-only: PVR wrapping + * still works for normal POT textures, but strided NPOT textures upload only + * logical width * logical height data while the PVR header uses padded POT + * dimensions. */ -#define GL_TEXTURE_STRIDE_KOS 0xEF52 __END_DECLS diff --git a/samples/nehe06_strided/main.c b/samples/nehe06_strided/main.c index 495935c..1e992f9 100644 --- a/samples/nehe06_strided/main.c +++ b/samples/nehe06_strided/main.c @@ -52,7 +52,8 @@ void LoadGLTextures() { glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // scale linearly when image bigger than texture glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smaller than texture - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, image1->sizeX); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // 2d texture, level of detail 0 (normal), 3 components (red, green, blue), x size from image, y size from image, // border 0 (normal), rgb color data, unsigned byte data, and finally the data itself. diff --git a/samples/nehe20_strided/main.c b/samples/nehe20_strided/main.c index e274fa3..5a62468 100644 --- a/samples/nehe20_strided/main.c +++ b/samples/nehe20_strided/main.c @@ -108,9 +108,10 @@ int LoadGLTextures() // Load Bitmaps And Conv glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); if (loop == 0) { - printf("Uploading strided logo texture %dx%d\n", + printf("Uploading NPOT logo texture %dx%d\n", TextureImage[loop].sizeX, TextureImage[loop].sizeY); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, TextureImage[loop].sizeX); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); } glTexImage2D( GL_TEXTURE_2D, 0, 3, diff --git a/tests/test_glteximage2d.h b/tests/test_glteximage2d.h index 393fd87..0ce2429 100644 --- a/tests/test_glteximage2d.h +++ b/tests/test_glteximage2d.h @@ -1,7 +1,9 @@ #include "tools/test.h" +#include #include #include +#include #include @@ -9,6 +11,7 @@ class TexImage2DTests : public test::TestCase { public: uint8_t image_data[8 * 8 * 4] = {0}; uint8_t stride_image_data[96 * 48 * 4] = {0}; + uint8_t unpack_row_image_data[128 * 48 * 4] = {0}; void set_up() { GLdcConfig config; @@ -30,6 +33,13 @@ public: glKosShutdown(); } + void set_clamp_wrap() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + assert_equal(glGetError(), GL_NO_ERROR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + assert_equal(glGetError(), GL_NO_ERROR); + } + void test_rgb_to_rgb565() { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, GL_RGB, GL_UNSIGNED_BYTE, image_data); assert_equal(glGetError(), GL_NO_ERROR); @@ -76,14 +86,21 @@ public: assert_equal(internalFormat, GL_ARGB4444_TWID_KOS); } - void test_npot_rejected_without_stride_parameter() { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); - assert_equal(glGetError(), GL_INVALID_VALUE); + void test_extension_string_advertises_limited_kos_npot() { + const char* extensions = (const char*) glGetString(GL_EXTENSIONS); + + assert_true(std::strstr(extensions, "GL_KOS_texture_non_power_of_two") != nullptr); + assert_true(std::strstr(extensions, "GL_KOS_texture_stride") == nullptr); + assert_true(std::strstr(extensions, "GL_ARB_texture_non_power_of_two") == nullptr); } - void test_strided_npot_upload_allowed_after_opt_in() { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 96); - assert_equal(glGetError(), GL_NO_ERROR); + void test_npot_rejected_with_default_repeat_wrap() { + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_OPERATION); + } + + void test_npot_upload_allowed_with_clamp_wrap() { + set_clamp_wrap(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); assert_equal(glGetError(), GL_NO_ERROR); @@ -94,33 +111,69 @@ public: assert_equal(internalFormat, GL_RGB565_KOS); } - void test_strided_texture_width_must_match_stride() { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 64); + void test_npot_upload_honors_unpack_row_length_without_backend_opt_in() { + set_clamp_wrap(); + + glPixelStorei(GL_UNPACK_ROW_LENGTH, 128); assert_equal(glGetError(), GL_NO_ERROR); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, unpack_row_image_data); + assert_equal(glGetError(), GL_NO_ERROR); + + glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + assert_equal(glGetError(), GL_NO_ERROR); + } + + void test_npot_texture_width_must_be_multiple_of_32() { + set_clamp_wrap(); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 65, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_VALUE); + } + + void test_npot_texture_width_must_not_exceed_stride_limit() { + set_clamp_wrap(); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_VALUE); + } + + void test_npot_texture_rejects_repeat_after_upload() { + set_clamp_wrap(); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); - assert_equal(glGetError(), GL_INVALID_VALUE); - } - - void test_strided_texture_rejects_invalid_stride_parameter() { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 65); - assert_equal(glGetError(), GL_INVALID_VALUE); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 1024); - assert_equal(glGetError(), GL_INVALID_VALUE); - } - - void test_strided_texture_rejects_twiddled_storage() { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 96); assert_equal(glGetError(), GL_NO_ERROR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + assert_equal(glGetError(), GL_INVALID_OPERATION); + } + + void test_pot_texture_repeat_wrap_unchanged() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + assert_equal(glGetError(), GL_NO_ERROR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + assert_equal(glGetError(), GL_NO_ERROR); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, GL_RGB, GL_UNSIGNED_BYTE, image_data); + assert_equal(glGetError(), GL_NO_ERROR); + } + + void test_npot_texture_rejects_twiddled_storage() { + set_clamp_wrap(); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB_TWID_KOS, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); assert_equal(glGetError(), GL_INVALID_OPERATION); } - void test_strided_texture_rejects_mipmap_level() { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_STRIDE_KOS, 96); - assert_equal(glGetError(), GL_NO_ERROR); + void test_npot_texture_rejects_paletted_storage() { + set_clamp_wrap(); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, 96, 48, 0, GL_COLOR_INDEX, GL_UNSIGNED_BYTE, stride_image_data); + assert_equal(glGetError(), GL_INVALID_OPERATION); + } + + void test_npot_texture_rejects_mipmap_level() { + set_clamp_wrap(); glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB, 96, 48, 0, GL_RGB, GL_UNSIGNED_BYTE, stride_image_data); assert_equal(glGetError(), GL_INVALID_VALUE); From 9ee62ded905350d8c9bf7574fe79ff956294a6b7 Mon Sep 17 00:00:00 2001 From: Luke Benstead Date: Tue, 23 Jun 2026 05:32:40 +0000 Subject: [PATCH 3/4] Restore set_clamp_wrap --- tests/test_glteximage2d.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/test_glteximage2d.h b/tests/test_glteximage2d.h index 25eab87..439de8d 100644 --- a/tests/test_glteximage2d.h +++ b/tests/test_glteximage2d.h @@ -29,6 +29,13 @@ public: } } + void set_clamp_wrap() { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + assert_equal(glGetError(), GL_NO_ERROR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + assert_equal(glGetError(), GL_NO_ERROR); + } + void test_rgb_to_rgb565() { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, GL_RGB, GL_UNSIGNED_BYTE, image_data); assert_equal(glGetError(), GL_NO_ERROR); From 35b3946cc43293aaff01594f4c1161fc49a09eb6 Mon Sep 17 00:00:00 2001 From: GPF Date: Tue, 23 Jun 2026 10:10:58 -0700 Subject: [PATCH 4/4] Fix POT repeat wrap test to upload POT texture first The test could inherit a previously uploaded NPOT/strided texture from an earlier test, causing GL_REPEAT to be rejected before the POT upload occurred. Upload the POT texture before setting repeat wrap so the test verifies that POT textures still allow repeat wrapping. --- tests/test_glteximage2d.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/test_glteximage2d.h b/tests/test_glteximage2d.h index 439de8d..eff4e1b 100644 --- a/tests/test_glteximage2d.h +++ b/tests/test_glteximage2d.h @@ -145,12 +145,14 @@ public: } void test_pot_texture_repeat_wrap_unchanged() { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - assert_equal(glGetError(), GL_NO_ERROR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, + GL_RGB, GL_UNSIGNED_BYTE, image_data); assert_equal(glGetError(), GL_NO_ERROR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, GL_RGB, GL_UNSIGNED_BYTE, image_data); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + assert_equal(glGetError(), GL_NO_ERROR); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); assert_equal(glGetError(), GL_NO_ERROR); }