From 9fafab51454d58c081a647d947521db451630d9b Mon Sep 17 00:00:00 2001 From: Isuru Samarathunga Date: Sun, 2 Nov 2025 04:14:47 +0530 Subject: [PATCH] Batch Renderer 2/2 --- Resources/Shaders/Debug.frag | 2 +- Resources/Shaders/Debug.vert | 2 +- Src/IAEngine/imp/cpp/EmbeddedResources.cpp | 4 +-- Src/IAEngine/imp/cpp/IAEngine.cpp | 22 +++++++++++++ Src/IAEngine/imp/cpp/Renderer.cpp | 36 ++++++++++++--------- Src/IAEngine/imp/hpp/Vendor/stb/stb_image.h | 4 +-- 6 files changed, 49 insertions(+), 21 deletions(-) diff --git a/Resources/Shaders/Debug.frag b/Resources/Shaders/Debug.frag index fb57fef..07baa45 100644 --- a/Resources/Shaders/Debug.frag +++ b/Resources/Shaders/Debug.frag @@ -10,7 +10,7 @@ layout(set = 2, binding = 0) uniform sampler2D texSampler; void main() { - outColor = inVertexColor; + outColor = texture(texSampler, inTexCoord); if(outColor.w < 0.1) discard; } \ No newline at end of file diff --git a/Resources/Shaders/Debug.vert b/Resources/Shaders/Debug.vert index de0afaa..623ee70 100644 --- a/Resources/Shaders/Debug.vert +++ b/Resources/Shaders/Debug.vert @@ -29,6 +29,6 @@ void main() { SpriteInstanceData spriteData = sboSpriteData.data[gl_InstanceIndex]; gl_Position = uboPerScene.projection * uboPerFrame.view * spriteData.Transform * vec4(inPosition, 0.0f, 1.0f); - outTexCoord = inTexCoord; + outTexCoord = vec2(spriteData.TexCoords) + vec2(spriteData.TexCoords.z, spriteData.TexCoords.w) * inTexCoord; outVertexColor = spriteData.Color; } \ No newline at end of file diff --git a/Src/IAEngine/imp/cpp/EmbeddedResources.cpp b/Src/IAEngine/imp/cpp/EmbeddedResources.cpp index 33206d6..73cdce6 100644 --- a/Src/IAEngine/imp/cpp/EmbeddedResources.cpp +++ b/Src/IAEngine/imp/cpp/EmbeddedResources.cpp @@ -27,11 +27,11 @@ namespace ia::iae }; CONST Vector DATA_DEBUG_FRAG = { - 0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x6,0x0,0x1,0x0,0x0,0x0,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x0,0x0,0x0,0x0,0xe,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0x8,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x10,0x0,0x3,0x0,0x4,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x2,0x0,0x0,0x0,0xc2,0x1,0x0,0x0,0x4,0x0,0x9,0x0,0x47,0x4c,0x5f,0x41,0x52,0x42,0x5f,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x5f,0x73,0x68,0x61,0x64,0x65,0x72,0x5f,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x0,0x0,0x4,0x0,0xa,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x63,0x70,0x70,0x5f,0x73,0x74,0x79,0x6c,0x65,0x5f,0x6c,0x69,0x6e,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x0,0x4,0x0,0x8,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x5,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x6,0x0,0xb,0x0,0x0,0x0,0x69,0x6e,0x56,0x65,0x72,0x74,0x65,0x78,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x1a,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x74,0x65,0x78,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x0,0x0,0x47,0x0,0x4,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xb,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1a,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x13,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x21,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x3,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0xcd,0xcc,0xcc,0x3d,0x14,0x0,0x2,0x0,0x13,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x18,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x19,0x0,0x0,0x0,0x1a,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x19,0x0,0x9,0x0,0x1b,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1b,0x0,0x3,0x0,0x1c,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x1d,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x36,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x5,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x9,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0xf,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0xb8,0x0,0x5,0x0,0x13,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0xf7,0x0,0x3,0x0,0x16,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfa,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x16,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x15,0x0,0x0,0x0,0xfc,0x0,0x1,0x0,0xf8,0x0,0x2,0x0,0x16,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0, + 0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x6,0x0,0x1,0x0,0x0,0x0,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x0,0x0,0x0,0x0,0xe,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0x8,0x0,0x4,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x10,0x0,0x3,0x0,0x4,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x2,0x0,0x0,0x0,0xc2,0x1,0x0,0x0,0x4,0x0,0x9,0x0,0x47,0x4c,0x5f,0x41,0x52,0x42,0x5f,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x5f,0x73,0x68,0x61,0x64,0x65,0x72,0x5f,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x0,0x0,0x4,0x0,0xa,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x63,0x70,0x70,0x5f,0x73,0x74,0x79,0x6c,0x65,0x5f,0x6c,0x69,0x6e,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x0,0x4,0x0,0x8,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x5,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x6f,0x75,0x74,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0xd,0x0,0x0,0x0,0x74,0x65,0x78,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x0,0x0,0x5,0x0,0x5,0x0,0x11,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x6,0x0,0x20,0x0,0x0,0x0,0x69,0x6e,0x56,0x65,0x72,0x74,0x65,0x78,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x20,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x13,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x21,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x3,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x19,0x0,0x9,0x0,0xa,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1b,0x0,0x3,0x0,0xb,0x0,0x0,0x0,0xa,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x16,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0xcd,0xcc,0xcc,0x3d,0x14,0x0,0x2,0x0,0x1a,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x1f,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x36,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x5,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xb,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x57,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x9,0x0,0x0,0x0,0x13,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x16,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0xb8,0x0,0x5,0x0,0x1a,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0xf7,0x0,0x3,0x0,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfa,0x0,0x4,0x0,0x1b,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x1c,0x0,0x0,0x0,0xfc,0x0,0x1,0x0,0xf8,0x0,0x2,0x0,0x1d,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0, }; CONST Vector DATA_DEBUG_VERT = { - 0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x4b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x6,0x0,0x1,0x0,0x0,0x0,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x0,0x0,0x0,0x0,0xe,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x2,0x0,0x0,0x0,0xc2,0x1,0x0,0x0,0x4,0x0,0x9,0x0,0x47,0x4c,0x5f,0x41,0x52,0x42,0x5f,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x5f,0x73,0x68,0x61,0x64,0x65,0x72,0x5f,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x0,0x0,0x4,0x0,0xa,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x63,0x70,0x70,0x5f,0x73,0x74,0x79,0x6c,0x65,0x5f,0x6c,0x69,0x6e,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x0,0x4,0x0,0x8,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x5,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x9,0x0,0x0,0x0,0x53,0x70,0x72,0x69,0x74,0x65,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x6,0x0,0x6,0x0,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x54,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x73,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x73,0x70,0x72,0x69,0x74,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x5,0x0,0x7,0x0,0xc,0x0,0x0,0x0,0x53,0x70,0x72,0x69,0x74,0x65,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x6,0x0,0x6,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x54,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0xc,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x73,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x5,0x0,0x6,0x0,0xe,0x0,0x0,0x0,0x53,0x42,0x4f,0x5f,0x53,0x70,0x72,0x69,0x74,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x6,0x0,0x5,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x64,0x61,0x74,0x61,0x0,0x0,0x0,0x0,0x5,0x0,0x6,0x0,0x10,0x0,0x0,0x0,0x73,0x62,0x6f,0x53,0x70,0x72,0x69,0x74,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x14,0x0,0x0,0x0,0x67,0x6c,0x5f,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x6e,0x64,0x65,0x78,0x0,0x0,0x0,0x0,0x5,0x0,0x6,0x0,0x26,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x65,0x72,0x56,0x65,0x72,0x74,0x65,0x78,0x0,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x6,0x0,0x7,0x0,0x26,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x6f,0x69,0x6e,0x74,0x53,0x69,0x7a,0x65,0x0,0x0,0x0,0x0,0x6,0x0,0x7,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x67,0x6c,0x5f,0x43,0x6c,0x69,0x70,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x0,0x6,0x0,0x7,0x0,0x26,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x67,0x6c,0x5f,0x43,0x75,0x6c,0x6c,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x0,0x5,0x0,0x3,0x0,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x29,0x0,0x0,0x0,0x55,0x42,0x4f,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x5f,0x50,0x65,0x72,0x53,0x63,0x65,0x6e,0x65,0x0,0x6,0x0,0x6,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x69,0x6f,0x6e,0x0,0x0,0x5,0x0,0x5,0x0,0x2b,0x0,0x0,0x0,0x75,0x62,0x6f,0x50,0x65,0x72,0x53,0x63,0x65,0x6e,0x65,0x0,0x5,0x0,0x7,0x0,0x2f,0x0,0x0,0x0,0x55,0x42,0x4f,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x5f,0x50,0x65,0x72,0x46,0x72,0x61,0x6d,0x65,0x0,0x6,0x0,0x5,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x76,0x69,0x65,0x77,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x31,0x0,0x0,0x0,0x75,0x62,0x6f,0x50,0x65,0x72,0x46,0x72,0x61,0x6d,0x65,0x0,0x5,0x0,0x5,0x0,0x3a,0x0,0x0,0x0,0x69,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x0,0x5,0x0,0x5,0x0,0x45,0x0,0x0,0x0,0x6f,0x75,0x74,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x5,0x0,0x5,0x0,0x46,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x6,0x0,0x48,0x0,0x0,0x0,0x6f,0x75,0x74,0x56,0x65,0x72,0x74,0x65,0x78,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x48,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x50,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0xe,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x10,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x29,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x2b,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x2b,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x2f,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x3a,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x45,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x46,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x48,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x13,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x21,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x3,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1e,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x1d,0x0,0x3,0x0,0xd,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0xe,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x13,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x13,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x16,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1a,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1c,0x0,0x4,0x0,0x25,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x1e,0x0,0x6,0x0,0x26,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x27,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x27,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0x29,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x2c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0x2f,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x30,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x20,0x0,0x4,0x0,0x42,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x44,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x44,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x42,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x36,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x5,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x41,0x0,0x6,0x0,0x16,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x8,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1a,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x1b,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x1f,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x22,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x2c,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x2c,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x92,0x0,0x5,0x0,0x8,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1a,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x92,0x0,0x5,0x0,0x8,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x91,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x42,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x43,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x47,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x45,0x0,0x0,0x0,0x47,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x49,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x4a,0x0,0x0,0x0,0x49,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x48,0x0,0x0,0x0,0x4a,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0, + 0x3,0x2,0x23,0x7,0x0,0x0,0x1,0x0,0xb,0x0,0xd,0x0,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11,0x0,0x2,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x6,0x0,0x1,0x0,0x0,0x0,0x47,0x4c,0x53,0x4c,0x2e,0x73,0x74,0x64,0x2e,0x34,0x35,0x30,0x0,0x0,0x0,0x0,0xe,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xf,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x57,0x0,0x0,0x0,0x3,0x0,0x3,0x0,0x2,0x0,0x0,0x0,0xc2,0x1,0x0,0x0,0x4,0x0,0x9,0x0,0x47,0x4c,0x5f,0x41,0x52,0x42,0x5f,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x65,0x5f,0x73,0x68,0x61,0x64,0x65,0x72,0x5f,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x0,0x0,0x4,0x0,0xa,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x63,0x70,0x70,0x5f,0x73,0x74,0x79,0x6c,0x65,0x5f,0x6c,0x69,0x6e,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x0,0x4,0x0,0x8,0x0,0x47,0x4c,0x5f,0x47,0x4f,0x4f,0x47,0x4c,0x45,0x5f,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x5f,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x76,0x65,0x0,0x5,0x0,0x4,0x0,0x4,0x0,0x0,0x0,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x9,0x0,0x0,0x0,0x53,0x70,0x72,0x69,0x74,0x65,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x6,0x0,0x6,0x0,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x54,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0x9,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x73,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0xb,0x0,0x0,0x0,0x73,0x70,0x72,0x69,0x74,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x5,0x0,0x7,0x0,0xc,0x0,0x0,0x0,0x53,0x70,0x72,0x69,0x74,0x65,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x6,0x0,0x6,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x54,0x72,0x61,0x6e,0x73,0x66,0x6f,0x72,0x6d,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0xc,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x73,0x0,0x0,0x0,0x6,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x0,0x5,0x0,0x6,0x0,0xe,0x0,0x0,0x0,0x53,0x42,0x4f,0x5f,0x53,0x70,0x72,0x69,0x74,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x6,0x0,0x5,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x64,0x61,0x74,0x61,0x0,0x0,0x0,0x0,0x5,0x0,0x6,0x0,0x10,0x0,0x0,0x0,0x73,0x62,0x6f,0x53,0x70,0x72,0x69,0x74,0x65,0x44,0x61,0x74,0x61,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x14,0x0,0x0,0x0,0x67,0x6c,0x5f,0x49,0x6e,0x73,0x74,0x61,0x6e,0x63,0x65,0x49,0x6e,0x64,0x65,0x78,0x0,0x0,0x0,0x0,0x5,0x0,0x6,0x0,0x26,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x65,0x72,0x56,0x65,0x72,0x74,0x65,0x78,0x0,0x0,0x0,0x0,0x6,0x0,0x6,0x0,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x6,0x0,0x7,0x0,0x26,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x67,0x6c,0x5f,0x50,0x6f,0x69,0x6e,0x74,0x53,0x69,0x7a,0x65,0x0,0x0,0x0,0x0,0x6,0x0,0x7,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x67,0x6c,0x5f,0x43,0x6c,0x69,0x70,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x0,0x6,0x0,0x7,0x0,0x26,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x67,0x6c,0x5f,0x43,0x75,0x6c,0x6c,0x44,0x69,0x73,0x74,0x61,0x6e,0x63,0x65,0x0,0x5,0x0,0x3,0x0,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x7,0x0,0x29,0x0,0x0,0x0,0x55,0x42,0x4f,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x5f,0x50,0x65,0x72,0x53,0x63,0x65,0x6e,0x65,0x0,0x6,0x0,0x6,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x69,0x6f,0x6e,0x0,0x0,0x5,0x0,0x5,0x0,0x2b,0x0,0x0,0x0,0x75,0x62,0x6f,0x50,0x65,0x72,0x53,0x63,0x65,0x6e,0x65,0x0,0x5,0x0,0x7,0x0,0x2f,0x0,0x0,0x0,0x55,0x42,0x4f,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x5f,0x50,0x65,0x72,0x46,0x72,0x61,0x6d,0x65,0x0,0x6,0x0,0x5,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x76,0x69,0x65,0x77,0x0,0x0,0x0,0x0,0x5,0x0,0x5,0x0,0x31,0x0,0x0,0x0,0x75,0x62,0x6f,0x50,0x65,0x72,0x46,0x72,0x61,0x6d,0x65,0x0,0x5,0x0,0x5,0x0,0x3a,0x0,0x0,0x0,0x69,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x0,0x0,0x5,0x0,0x5,0x0,0x45,0x0,0x0,0x0,0x6f,0x75,0x74,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x5,0x0,0x5,0x0,0x53,0x0,0x0,0x0,0x69,0x6e,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x0,0x0,0x5,0x0,0x6,0x0,0x57,0x0,0x0,0x0,0x6f,0x75,0x74,0x56,0x65,0x72,0x74,0x65,0x78,0x43,0x6f,0x6c,0x6f,0x72,0x0,0x0,0x48,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x50,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0xd,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x60,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0xe,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x10,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x10,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x14,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x26,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x29,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x2b,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x2b,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x3,0x0,0x2f,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x48,0x0,0x4,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x48,0x0,0x5,0x0,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x31,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x3a,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x45,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x53,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x47,0x0,0x4,0x0,0x57,0x0,0x0,0x0,0x1e,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x13,0x0,0x2,0x0,0x2,0x0,0x0,0x0,0x21,0x0,0x3,0x0,0x3,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x16,0x0,0x3,0x0,0x6,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x18,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1e,0x0,0x5,0x0,0x9,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x9,0x0,0x0,0x0,0x1e,0x0,0x5,0x0,0xc,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x1d,0x0,0x3,0x0,0xd,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0xe,0x0,0x0,0x0,0xd,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xe,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xf,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x13,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x11,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x13,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x16,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0xc,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1a,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x1e,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x15,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1c,0x0,0x4,0x0,0x25,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x1e,0x0,0x6,0x0,0x26,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x25,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x27,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x26,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x27,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0x29,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x29,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x2a,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x2c,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x1e,0x0,0x3,0x0,0x2f,0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x30,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2f,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x30,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x17,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x0,0x0,0x80,0x3f,0x20,0x0,0x4,0x0,0x42,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x44,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x38,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x44,0x0,0x0,0x0,0x45,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x4b,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x20,0x0,0x4,0x0,0x4c,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x2b,0x0,0x4,0x0,0x23,0x0,0x0,0x0,0x4f,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x39,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0x42,0x0,0x0,0x0,0x57,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x36,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0xf8,0x0,0x2,0x0,0x5,0x0,0x0,0x0,0x3b,0x0,0x4,0x0,0xa,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x11,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x41,0x0,0x6,0x0,0x16,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x15,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0xc,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x17,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x8,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1a,0x0,0x0,0x0,0x1b,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x1b,0x0,0x0,0x0,0x19,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x1f,0x0,0x0,0x0,0x1c,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x18,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x22,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x22,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x2c,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x2d,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x2c,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x31,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x32,0x0,0x0,0x0,0x92,0x0,0x5,0x0,0x8,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x2e,0x0,0x0,0x0,0x33,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1a,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x8,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x35,0x0,0x0,0x0,0x92,0x0,0x5,0x0,0x8,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0x34,0x0,0x0,0x0,0x36,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x3a,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x3b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x50,0x0,0x7,0x0,0x7,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x3e,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x3c,0x0,0x0,0x0,0x3d,0x0,0x0,0x0,0x91,0x0,0x5,0x0,0x7,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x37,0x0,0x0,0x0,0x40,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x42,0x0,0x0,0x0,0x43,0x0,0x0,0x0,0x28,0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x43,0x0,0x0,0x0,0x41,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x47,0x0,0x0,0x0,0x46,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0x47,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x51,0x0,0x5,0x0,0x6,0x0,0x0,0x0,0x49,0x0,0x0,0x0,0x47,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x50,0x0,0x5,0x0,0x38,0x0,0x0,0x0,0x4a,0x0,0x0,0x0,0x48,0x0,0x0,0x0,0x49,0x0,0x0,0x0,0x41,0x0,0x6,0x0,0x4c,0x0,0x0,0x0,0x4d,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x4b,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x4e,0x0,0x0,0x0,0x4d,0x0,0x0,0x0,0x41,0x0,0x6,0x0,0x4c,0x0,0x0,0x0,0x50,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x1d,0x0,0x0,0x0,0x4f,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x6,0x0,0x0,0x0,0x51,0x0,0x0,0x0,0x50,0x0,0x0,0x0,0x50,0x0,0x5,0x0,0x38,0x0,0x0,0x0,0x52,0x0,0x0,0x0,0x4e,0x0,0x0,0x0,0x51,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x38,0x0,0x0,0x0,0x54,0x0,0x0,0x0,0x53,0x0,0x0,0x0,0x85,0x0,0x5,0x0,0x38,0x0,0x0,0x0,0x55,0x0,0x0,0x0,0x52,0x0,0x0,0x0,0x54,0x0,0x0,0x0,0x81,0x0,0x5,0x0,0x38,0x0,0x0,0x0,0x56,0x0,0x0,0x0,0x4a,0x0,0x0,0x0,0x55,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x45,0x0,0x0,0x0,0x56,0x0,0x0,0x0,0x41,0x0,0x5,0x0,0x1e,0x0,0x0,0x0,0x58,0x0,0x0,0x0,0xb,0x0,0x0,0x0,0x21,0x0,0x0,0x0,0x3d,0x0,0x4,0x0,0x7,0x0,0x0,0x0,0x59,0x0,0x0,0x0,0x58,0x0,0x0,0x0,0x3e,0x0,0x3,0x0,0x57,0x0,0x0,0x0,0x59,0x0,0x0,0x0,0xfd,0x0,0x1,0x0,0x38,0x0,0x1,0x0, }; CONST Vector DATA_GEOMETRY_FRAG = { diff --git a/Src/IAEngine/imp/cpp/IAEngine.cpp b/Src/IAEngine/imp/cpp/IAEngine.cpp index e86eb87..120f113 100644 --- a/Src/IAEngine/imp/cpp/IAEngine.cpp +++ b/Src/IAEngine/imp/cpp/IAEngine.cpp @@ -18,6 +18,8 @@ #include #include +#define STB_IMAGE_IMPLEMENTATION +#include namespace ia::iae { @@ -96,9 +98,25 @@ namespace ia::iae namespace ia::iae { + Handle CreateTexture(IN PCCHAR path, IN INT32 tileWidth = -1, IN INT32 tileHeight = -1) + { + INT32 w, h, n; + auto pixels = stbi_load(path, &w, &h, &n, STBI_rgb_alpha); + const auto t = Renderer::CreateTexture(pixels, w, h, tileWidth == -1 ? 1 : w/tileWidth, tileHeight == -1 ? 1 : h/tileHeight); + stbi_image_free(pixels); + return t; + } + + Handle textures[5]; + VOID IAEngine::Initialize() { Renderer::Initialize(IVec2{g_designViewport.x, g_designViewport.y}); + + textures[0] = CreateTexture("Resources/Cute_Fantasy_Free/Tiles/Beach_Tile.png", 16, 16); + textures[1] = CreateTexture("Resources/Cute_Fantasy_Free/Tiles/Cliff_Tile.png", 16, 16); + + Renderer::SetTextureAtlas({textures[0], textures[1]}); } VOID IAEngine::Terminate() @@ -108,6 +126,10 @@ namespace ia::iae VOID IAEngine::Update() { + Renderer::DrawStaticSpriteTopLeft(textures[1], 0, {0.0f, 0.0f}, {1.0f, 1.0f}, 0.0f); + Renderer::DrawStaticSpriteTopLeft(textures[1], 1, {16.0f, 0.0f}, {1.0f, 1.0f}, 0.0f); + Renderer::DrawStaticSpriteTopLeft(textures[1], 2, {32.0f, 0.0f}, {1.0f, 1.0f}, 0.0f); + Renderer::Update(); } diff --git a/Src/IAEngine/imp/cpp/Renderer.cpp b/Src/IAEngine/imp/cpp/Renderer.cpp index 066e294..8db7f16 100644 --- a/Src/IAEngine/imp/cpp/Renderer.cpp +++ b/Src/IAEngine/imp/cpp/Renderer.cpp @@ -74,9 +74,10 @@ namespace ia::iae SDL_GPUTransferBuffer *g_spriteDataStagingBuffer{}; SDL_GPUTexture *g_defaultTexture{}; - SDL_GPUTexture *g_activeTextureAtlas{}; - Map g_activeTextureAtlasUVMap; + Vec2 g_activeTextureAtlasInverseSize{}; + SDL_GPUTexture *g_activeTextureAtlas{}; + Map g_activeTextureAtlasUVMap; EXTERN BOOL g_isDebugMode; EXTERN Vec2 g_designViewport; @@ -104,8 +105,9 @@ namespace ia::iae delete g_debugPipeline; delete g_geometryPipeline; - if (g_defaultTexture) - DestroyTexture(g_defaultTexture); + for (SIZE_T i = 0; i < g_texureData.size(); i++) + DestroyTexture(i); + if (g_activeTextureAtlas && (g_activeTextureAtlas != g_defaultTexture)) DestroyTexture(g_activeTextureAtlas); @@ -125,8 +127,6 @@ namespace ia::iae VOID Renderer::Update() { - DrawStaticSpriteTopLeft(0, 0, {10.0f, 0.0f}, {100.0f, 100.0f}, 0.0f); - DrawStaticSpriteTopLeft(0, 0, {200.0f, 300.0f}, {100.0f, 100.0f}, 0.0f); Render(); } @@ -209,7 +209,7 @@ namespace ia::iae { Mat4 transform = glm::translate(glm::mat4(1.0f), glm::vec3{position.x, position.y, 0}); transform = glm::rotate(transform, rotation, glm::vec3(0.0f, 0.0f, 1.0f)); - transform = glm::scale(transform, glm::vec3{scale.x, scale.y, 1.0f}); + transform = glm::scale(transform, glm::vec3{scale.x * g_texureData[texture].TileWidth, scale.y * g_texureData[texture].TileHeight, 1.0f}); g_staticSprites.pushBack({.Transform = transform, .TexCoords = GetTextureAtlasCoordinates(texture, tileIndex), .Color = {1.0f, 1.0f, 1.0f, 1.0f}}); @@ -220,7 +220,7 @@ namespace ia::iae { Mat4 transform = glm::translate(glm::mat4(1.0f), glm::vec3{position.x, position.y, 0}); transform = glm::rotate(transform, rotation, glm::vec3(0.0f, 0.0f, 1.0f)); - transform = glm::scale(transform, glm::vec3{scale.x, scale.y, 1.0f}); + transform = glm::scale(transform, glm::vec3{scale.x * g_texureData[texture].TileWidth, scale.y * g_texureData[texture].TileHeight, 1.0f}); g_dynamicSprites.pushBack({.Transform = transform, .TexCoords = GetTextureAtlasCoordinates(texture, tileIndex), .Color = {1.0f, 1.0f, 1.0f, 1.0f}}); @@ -286,10 +286,11 @@ namespace ia::iae VOID Renderer::SetTextureAtlas(IN CONST Vector textures) { - g_activeTextureAtlasUVMap = Map(); - if (g_activeTextureAtlas) + if (g_activeTextureAtlas && (g_activeTextureAtlas != g_defaultTexture)) DestroyTexture(g_activeTextureAtlas); + g_activeTextureAtlasUVMap = Map(); + INT32 atlasWidth{0}, atlasHeight{0}; for (const auto &t : textures) { @@ -299,6 +300,8 @@ namespace ia::iae atlasHeight = d.Height; } + g_activeTextureAtlasInverseSize = {1.0f / ((FLOAT32) atlasWidth), 1.0f / ((FLOAT32) atlasHeight)}; + const auto pixels = new UINT8[atlasWidth * atlasHeight * 4]; INT32 atlasCursor{0}; @@ -306,10 +309,8 @@ namespace ia::iae { const auto &d = g_texureData[t]; for (INT32 y = 0; y < d.Height; y++) - ia_memcpy(&pixels[atlasCursor + (y * atlasWidth)], d.Pixels, d.Width * 4); - g_activeTextureAtlasUVMap[t] = - Vec4(((FLOAT32) atlasCursor) / ((FLOAT32) atlasWidth), 0.0f, - ((FLOAT32) d.Width) / ((FLOAT32) atlasWidth), ((FLOAT32) d.Height) / ((FLOAT32) atlasHeight)); + ia_memcpy(&pixels[(atlasCursor + (y * atlasWidth)) * 4], &d.Pixels[y * d.Width * 4], d.Width * 4); + g_activeTextureAtlasUVMap[t] = Vec2(((FLOAT32) atlasCursor) / ((FLOAT32) atlasWidth), 0.0f); atlasCursor += d.Width; } @@ -323,7 +324,12 @@ namespace ia::iae { const auto &d = g_texureData[texture]; const auto &t = g_activeTextureAtlasUVMap[texture]; - return t; + const auto pX = + ((INT32) (tileIndex % d.TileCountX) * ((FLOAT32) d.TileWidth)) * g_activeTextureAtlasInverseSize.x; + const auto pY = + ((INT32) (tileIndex / d.TileCountX) * ((FLOAT32) d.TileHeight)) * g_activeTextureAtlasInverseSize.y; + return Vec4(t.x + pX, t.y + pY, d.TileWidth * g_activeTextureAtlasInverseSize.x, + d.TileHeight * g_activeTextureAtlasInverseSize.y); } } // namespace ia::iae diff --git a/Src/IAEngine/imp/hpp/Vendor/stb/stb_image.h b/Src/IAEngine/imp/hpp/Vendor/stb/stb_image.h index d4b5c87..2bbe734 100644 --- a/Src/IAEngine/imp/hpp/Vendor/stb/stb_image.h +++ b/Src/IAEngine/imp/hpp/Vendor/stb/stb_image.h @@ -679,9 +679,9 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; #endif #ifndef STBI_MALLOC -#define STBI_MALLOC(sz) malloc(sz) +#define STBI_MALLOC(sz) ia_malloc(sz) #define STBI_REALLOC(p,newsz) realloc(p,newsz) -#define STBI_FREE(p) free(p) +#define STBI_FREE(p) ia_free(p) #endif #ifndef STBI_REALLOC_SIZED