From 88da989ad727ca54beb4beca35b6e188be497d70 Mon Sep 17 00:00:00 2001 From: Sven Balzer <4653051+Kyuusokuna@users.noreply.github.com> Date: Sat, 8 Mar 2025 19:39:40 +0100 Subject: [PATCH] major refactor and add a camera change asset loading of images to be sRGB use wayland by default on linux unless we are running under renderdoc changed shaders to be combined vertex and fragment in a single file require Vulkan 1.3 and enable shaderDrawParameters --- CMakeLists.txt | 20 +- assets/map/map.sv | Bin 3336 -> 3336 bytes assets/shader/basic.h | 168 +++ assets/shader/basic.slang | 82 ++ assets/shader/basic_pixel_shader.h | 226 --- assets/shader/basic_pixel_shader.slang | 26 - assets/shader/basic_vertex_shader.h | 803 ----------- assets/shader/basic_vertex_shader.slang | 66 - assets/shader/font_pixel_shader.hlsl | 24 - assets/shader/font_vertex_shader.hlsl | 63 - assets/shader/world.h | 256 ++++ assets/shader/world.slang | 113 ++ libs/SDL3/src/gpu/vulkan/SDL_gpu_vulkan.c | 10 +- src/main.cpp | 668 +++++---- src/math_graphics.h | 1571 +++++++++++---------- 15 files changed, 1843 insertions(+), 2253 deletions(-) create mode 100644 assets/shader/basic.h create mode 100644 assets/shader/basic.slang delete mode 100644 assets/shader/basic_pixel_shader.h delete mode 100644 assets/shader/basic_pixel_shader.slang delete mode 100644 assets/shader/basic_vertex_shader.h delete mode 100644 assets/shader/basic_vertex_shader.slang delete mode 100644 assets/shader/font_pixel_shader.hlsl delete mode 100644 assets/shader/font_vertex_shader.hlsl create mode 100644 assets/shader/world.h create mode 100644 assets/shader/world.slang diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f4ef2f..8c66825 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,20 +43,26 @@ function(add_shader name) set(OUTPUT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/assets/shader/${name}.h) if (SLANGC) + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(SLANG_FLAGS -g3 -O0) + else() + set(SLANG_FLAGS -O3) + endif() + add_custom_command( OUTPUT ${OUTPUT_FILE} - COMMAND ${SLANGC} ${INPUT_FILE} -g3 -O0 -emit-spirv-via-glsl -entry main -target spirv -profile glsl_330 -o ${OUTPUT_FILE} -source-embed-style u8 -source-embed-name SPIRV_${name} + COMMAND ${SLANGC} -target spirv -validate-uniformity -o ${OUTPUT_FILE} -source-embed-style u8 -source-embed-name SPIRV_${name} ${SLANG_FLAGS} -- ${INPUT_FILE} DEPENDS ${INPUT_FILE} ) endif() - add_custom_target(${name} + add_custom_target(SHADER_${name} DEPENDS ${OUTPUT_FILE} ) endfunction() -add_shader(basic_vertex_shader) -add_shader(basic_pixel_shader) +add_shader(basic) +add_shader(world) add_executable(mikemon src/log.cpp @@ -70,7 +76,7 @@ target_link_libraries(mikemon stb_image imgui ) -add_dependencies(mikemon - basic_vertex_shader - basic_pixel_shader +add_dependencies(mikemon + SHADER_basic + SHADER_world ) diff --git a/assets/map/map.sv b/assets/map/map.sv index 80eaa19b1abedf03cb6b64dc1a2b3b00a0c9d74e..c0aa8650d98a7cb5a180516190e08d17ac9837c2 100644 GIT binary patch delta 32 icmeB>>W~tWVqjoU0Aes;VP;@p*(li0xOpLCIyV47)C9Ev delta 22 dcmeB>>X2fUVqjoU*r?dRIMG06^FqdSZU8z-1$zJh diff --git a/assets/shader/basic.h b/assets/shader/basic.h new file mode 100644 index 0000000..d8d6511 --- /dev/null +++ b/assets/shader/basic.h @@ -0,0 +1,168 @@ +const unsigned char SPIRV_basic[] = +{ + 0x03, 0x02, 0x23, 0x07, 0x00, 0x05, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, + 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6d, + 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x00, 0x00, + 0x05, 0x00, 0x06, 0x00, 0x09, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x75, 0x76, 0x30, 0x75, 0x76, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, + 0x75, 0x76, 0x32, 0x75, 0x76, 0x33, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, + 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x73, 0x74, 0x64, 0x31, 0x34, 0x30, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x66, 0x6f, 0x76, 0x79, 0x5f, 0x64, 0x65, 0x67, 0x72, 0x65, 0x65, 0x73, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x06, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, + 0x78, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x61, + 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x79, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x70, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x2e, + 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, + 0x75, 0x76, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x31, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x00, + 0x05, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, + 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, + 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, + 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, + 0x03, 0x00, 0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x13, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x17, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, + 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x17, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1e, 0x00, + 0x08, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x13, + 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, + 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, + 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, + 0x16, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x23, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x2b, 0x00, 0x04, + 0x00, 0x13, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x6f, 0x12, 0x83, 0x3a, 0x2b, 0x00, 0x04, 0x00, 0x13, 0x00, + 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x2c, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x29, + 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x15, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x03, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x3b, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, + 0x04, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x15, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, + 0x00, 0x34, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x18, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x3d, + 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, + 0x00, 0x39, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x14, 0x00, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x3b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x3e, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3f, + 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x42, + 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x7f, 0x00, 0x04, 0x00, 0x13, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, + 0x14, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, + 0x00, 0x45, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x22, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x46, 0x00, + 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, + 0x00, 0x4c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x13, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x88, + 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, + 0x00, 0x50, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x51, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x22, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, + 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00, 0x22, 0x00, 0x00, 0x00, 0x53, 0x00, + 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x54, + 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x85, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, + 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x37, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x15, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0xf7, 0x00, + 0x03, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x36, 0x00, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, + 0x00, 0x5f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x5a, + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, + 0x61, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0xf9, 0x00, 0x02, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x4f, 0x00, + 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x15, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, + 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x5a, 0x00, + 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x02, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x15, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, + 0x00, 0x5d, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x5b, 0x00, + 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x05, + 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, 0x36, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, + 0x00, 0x65, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x0e, 0x00, + 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x57, + 0x00, 0x06, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, + 0x00, 0x38, 0x00, 0x01, 0x00, +}; + +const size_t SPIRV_basic_sizeInBytes = 3064; + diff --git a/assets/shader/basic.slang b/assets/shader/basic.slang new file mode 100644 index 0000000..b724cd5 --- /dev/null +++ b/assets/shader/basic.slang @@ -0,0 +1,82 @@ +struct VertexShaderInput { + // Per Vertex + uint vertex_id : SV_VertexID; + float3 pos; + + // Per Instance + float4 pos_size; + float4 uv0uv1; + float4 uv2uv3; +}; + +struct VertexShaderOutput { + float4 pos : SV_POSITION; + float2 uv; +}; + +struct PixelShaderOutput { + float4 color : SV_TARGET; +}; + +[[vk::binding(0, 1)]] +cbuffer constants { + float aspect_ratio; + float fovy_degrees; + float camera_x; + float camera_y; + float camera_z; + uint map_width; +}; + +float4x4 projection(float fovy, float aspect, float near) { + float g = 1.0 / tan(fovy * 0.5); + + return { + g / aspect, 0, 0, 0, + 0, g, 0, 0, + 0, 0, 0, near, + 0, 0, 1, 0, + }; +} + +float4x4 view(float3 pos) { + return { + 1, 0, 0, -pos.x, + 0, 1, 0, -pos.y, + 0, 0, 1, -pos.z, + 0, 0, 0, 1, + }; +} + +[shader("vertex")] +VertexShaderOutput main_vertex(VertexShaderInput input) { + VertexShaderOutput output; + + float fovy = radians(fovy_degrees); + float4x4 view_matrix = view(float3(camera_x, -camera_y, camera_z)); + float4x4 projection_matrix = projection(fovy, aspect_ratio, 0.001); + float4x4 view_projection_matrix = mul(projection_matrix, view_matrix); + + output.pos = mul(view_projection_matrix, float4(input.pos_size.xy * float2(1, -1) + input.pos.xy, 0, 1)); + + switch(input.vertex_id) { + case 0: output.uv = input.uv0uv1.xy; break; + case 1: output.uv = input.uv0uv1.zw; break; + case 2: output.uv = input.uv2uv3.xy; break; + case 3: output.uv = input.uv2uv3.zw; break; + } + + return output; +} + +[[vk::binding(0, 2)]] +Sampler2D tex1; + +[shader("pixel")] +PixelShaderOutput main_fragment(VertexShaderOutput input) { + PixelShaderOutput output; + + output.color = tex1.Sample(float2(input.uv)); + + return output; +} diff --git a/assets/shader/basic_pixel_shader.h b/assets/shader/basic_pixel_shader.h deleted file mode 100644 index 51ed2f0..0000000 --- a/assets/shader/basic_pixel_shader.h +++ /dev/null @@ -1,226 +0,0 @@ -const unsigned char SPIRV_basic_pixel_shader[] = -{ - 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x53, 0x50, 0x56, 0x5f, 0x4b, 0x48, - 0x52, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x6f, 0x6e, 0x53, 0x65, 0x6d, 0x61, 0x6e, - 0x74, 0x69, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, - 0x6f, 0x2e, 0x31, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x4c, - 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x69, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x13, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x73, 0x76, 0x65, 0x6e, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6d, 0x69, 0x6b, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x73, 0x2f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x70, 0x69, - 0x78, 0x65, 0x6c, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x73, 0x6c, 0x61, 0x6e, 0x67, 0x00, 0x00, 0x07, - 0x00, 0x04, 0x00, 0x11, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xec, 0x00, - 0x19, 0x00, 0x00, 0x00, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x75, 0x6c, 0x6b, 0x61, 0x6e, - 0x31, 0x30, 0x30, 0x0a, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2d, 0x65, 0x6e, 0x76, 0x20, 0x76, 0x75, - 0x6c, 0x6b, 0x61, 0x6e, 0x31, 0x2e, 0x30, 0x0a, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2d, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x0a, 0x23, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x35, 0x30, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x6f, - 0x77, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x3b, 0x0a, 0x6c, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x6f, 0x77, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x29, 0x20, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x31, 0x20, 0x22, 0x2f, 0x68, - 0x6f, 0x6d, 0x65, 0x2f, 0x73, 0x76, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6d, - 0x69, 0x6b, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x73, 0x68, 0x61, 0x64, 0x65, - 0x72, 0x2f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, - 0x72, 0x2e, 0x73, 0x6c, 0x61, 0x6e, 0x67, 0x22, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x32, 0x29, 0x0a, - 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x20, 0x74, - 0x65, 0x78, 0x31, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x32, 0x29, 0x0a, 0x75, - 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, - 0x69, 0x6e, 0x65, 0x20, 0x31, 0x37, 0x38, 0x30, 0x20, 0x22, 0x68, 0x6c, 0x73, 0x6c, 0x2e, 0x6d, 0x65, 0x74, 0x61, - 0x2e, 0x73, 0x6c, 0x61, 0x6e, 0x67, 0x22, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x6f, 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, - 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, - 0x31, 0x37, 0x38, 0x30, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x20, 0x22, - 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x73, 0x76, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x6d, 0x69, 0x6b, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x73, 0x68, 0x61, - 0x64, 0x65, 0x72, 0x2f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x5f, 0x73, 0x68, 0x61, - 0x64, 0x65, 0x72, 0x2e, 0x73, 0x6c, 0x61, 0x6e, 0x67, 0x22, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x0a, - 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x30, 0x3b, - 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x37, 0x0a, 0x76, 0x6f, 0x69, 0x64, - 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, 0x0a, 0x7b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x38, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x5f, 0x30, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x5f, 0x53, 0x31, 0x20, 0x3d, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x28, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x28, 0x74, 0x65, 0x78, 0x31, 0x5f, - 0x30, 0x2c, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x5f, 0x30, - 0x29, 0x2c, 0x20, 0x28, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x29, 0x29, 0x29, 0x3b, 0x0a, - 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x32, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x30, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x31, 0x3b, 0x0a, - 0x0a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x30, 0x20, 0x3d, 0x20, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, - 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0x00, 0x28, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x31, 0x00, 0x07, - 0x00, 0x06, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x32, 0x64, 0x2e, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x00, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x30, 0x00, 0x00, 0x00, 0x40, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x32, - 0x64, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x74, 0x65, - 0x78, 0x31, 0x5f, 0x30, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x74, 0x79, 0x70, 0x65, 0x2e, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x40, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, - 0x00, 0x41, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x72, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x45, 0x00, 0x00, 0x00, 0x74, 0x79, 0x70, 0x65, 0x2e, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x2e, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, - 0x46, 0x00, 0x00, 0x00, 0x40, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x64, 0x2e, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x00, 0x07, 0x00, 0x05, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, - 0x75, 0x76, 0x5f, 0x30, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x53, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x5f, 0x30, 0x00, 0x07, 0x00, 0x07, 0x00, 0x56, 0x00, 0x00, 0x00, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x53, 0x68, 0x61, - 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x00, 0x07, 0x00, 0x05, 0x00, 0x5b, 0x00, 0x00, - 0x00, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x03, 0x00, 0x5e, 0x00, - 0x00, 0x00, 0x69, 0x6e, 0x74, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x00, 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, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x6d, - 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x26, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x31, 0x00, - 0x05, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x31, 0x5f, 0x30, 0x00, 0x00, 0x05, 0x00, 0x07, - 0x00, 0x3f, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x72, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x51, 0x00, 0x00, 0x00, 0x50, 0x69, 0x78, 0x65, - 0x6c, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x00, 0x06, 0x00, 0x05, - 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x30, 0x00, 0x05, 0x00, - 0x05, 0x00, 0x59, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x0a, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x30, 0x00, 0x00, 0x00, - 0x00, 0x47, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, - 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x3f, - 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x11, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x1e, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x23, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, - 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x00, 0x17, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, - 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x32, - 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x37, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0x39, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, - 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, - 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x3d, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, - 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, - 0x00, 0x1b, 0x00, 0x03, 0x00, 0x43, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x48, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x49, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, - 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x4c, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x29, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, - 0x00, 0x37, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0x51, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2b, 0x00, - 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, - 0x22, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x58, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x5d, 0x00, - 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x68, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x66, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x65, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x23, - 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, - 0x59, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, - 0x00, 0x3d, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x3d, 0x00, - 0x04, 0x00, 0x39, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x43, - 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x21, 0x00, 0x00, - 0x00, 0x50, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x26, 0x00, - 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, - 0x00, 0x23, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3e, 0x00, - 0x03, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6a, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x23, 0x00, 0x00, - 0x00, 0x69, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6b, - 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, -}; - -const size_t SPIRV_basic_pixel_shader_sizeInBytes = 4172; - diff --git a/assets/shader/basic_pixel_shader.slang b/assets/shader/basic_pixel_shader.slang deleted file mode 100644 index 3864a0e..0000000 --- a/assets/shader/basic_pixel_shader.slang +++ /dev/null @@ -1,26 +0,0 @@ -struct PixelShaderInput { - float4 pos : SV_POSITION; - float2 uv : COORDINATES; -}; - -struct PixelShaderOutput { - float4 color : SV_TARGET; -}; - -[[vk::binding(0, 2)]] -Texture2D tex1 : register(t0, space2); - -[[vk::binding(0, 2)]] -SamplerState texture_sampler : register(s0, space2); - -[shader("pixel")] -PixelShaderOutput main(PixelShaderInput input) { - PixelShaderOutput output; - -#if 1 - output.color = tex1.Sample(texture_sampler, float2(input.uv)); -#else - output.color = float4(1, 0, 1, 1); -#endif - return output; -} \ No newline at end of file diff --git a/assets/shader/basic_vertex_shader.h b/assets/shader/basic_vertex_shader.h deleted file mode 100644 index 4720c53..0000000 --- a/assets/shader/basic_vertex_shader.h +++ /dev/null @@ -1,803 +0,0 @@ -const unsigned char SPIRV_basic_vertex_shader[] = -{ - 0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x53, 0x50, 0x56, 0x5f, 0x4b, 0x48, - 0x52, 0x5f, 0x6e, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x4e, 0x6f, 0x6e, 0x53, 0x65, 0x6d, 0x61, 0x6e, - 0x74, 0x69, 0x63, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, - 0x6f, 0x2e, 0x31, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, 0x4c, - 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, - 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, - 0x00, 0x65, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x7e, 0x01, - 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0x07, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x69, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x13, 0x00, - 0x10, 0x00, 0x00, 0x00, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x73, 0x76, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6d, 0x69, 0x6b, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, - 0x2f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, - 0x78, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x73, 0x6c, 0x61, 0x6e, 0x67, 0x00, 0x07, 0x00, 0x04, 0x00, - 0x11, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x69, 0x03, 0x19, 0x00, 0x00, - 0x00, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x20, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x75, 0x6c, 0x6b, 0x61, 0x6e, 0x31, 0x30, 0x30, - 0x0a, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x20, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x2d, 0x65, 0x6e, 0x76, 0x20, 0x76, 0x75, 0x6c, 0x6b, 0x61, - 0x6e, 0x31, 0x2e, 0x30, 0x0a, 0x2f, 0x2f, 0x20, 0x4f, 0x70, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2d, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, - 0x6d, 0x61, 0x69, 0x6e, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x0a, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x34, 0x35, 0x30, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x72, 0x6f, 0x77, 0x5f, 0x6d, - 0x61, 0x6a, 0x6f, 0x72, 0x29, 0x20, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x3b, 0x0a, 0x6c, 0x61, 0x79, 0x6f, - 0x75, 0x74, 0x28, 0x72, 0x6f, 0x77, 0x5f, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x29, 0x20, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x35, 0x20, 0x22, 0x2f, 0x68, 0x6f, 0x6d, 0x65, - 0x2f, 0x73, 0x76, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x6d, 0x69, 0x6b, 0x65, - 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2f, 0x62, - 0x61, 0x73, 0x69, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, - 0x73, 0x6c, 0x61, 0x6e, 0x67, 0x22, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x53, 0x4c, 0x41, 0x4e, 0x47, - 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x30, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x20, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x5f, 0x30, 0x3b, 0x0a, 0x7d, - 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x35, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, - 0x28, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x65, 0x74, 0x20, 0x3d, - 0x20, 0x31, 0x29, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x73, 0x74, 0x64, 0x31, 0x34, 0x30, 0x29, 0x20, - 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x53, 0x4c, 0x41, 0x4e, 0x47, - 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x30, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x20, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x5f, 0x30, 0x3b, 0x0a, 0x7d, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, - 0x20, 0x31, 0x39, 0x37, 0x34, 0x20, 0x22, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x2e, 0x73, 0x6c, - 0x61, 0x6e, 0x67, 0x22, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x29, 0x0a, 0x6f, 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x75, - 0x76, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x39, 0x37, 0x34, 0x0a, 0x6c, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x30, 0x29, - 0x0a, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x5f, - 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x39, 0x37, 0x34, 0x0a, 0x6c, 0x61, 0x79, - 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x29, 0x0a, 0x69, - 0x6e, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x3b, 0x0a, - 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x39, 0x37, 0x34, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, - 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x32, 0x29, 0x0a, 0x69, 0x6e, 0x20, 0x76, - 0x65, 0x63, 0x34, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, - 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x39, 0x37, 0x34, 0x0a, 0x6c, 0x61, 0x79, - 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x33, 0x29, 0x0a, 0x69, - 0x6e, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x39, 0x37, 0x34, - 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, - 0x34, 0x29, 0x0a, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, - 0x30, 0x75, 0x76, 0x31, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x39, 0x37, - 0x34, 0x0a, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, - 0x20, 0x35, 0x29, 0x0a, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, - 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x20, - 0x22, 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x73, 0x76, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x6d, 0x69, 0x6b, 0x65, 0x6d, 0x6f, 0x6e, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x73, 0x68, - 0x61, 0x64, 0x65, 0x72, 0x2f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x73, - 0x68, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x73, 0x6c, 0x61, 0x6e, 0x67, 0x22, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x20, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x5f, - 0x30, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x6f, 0x73, 0x5f, 0x30, 0x3b, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, 0x5f, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x5f, 0x30, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x20, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x5f, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x76, 0x30, 0x75, 0x76, - 0x31, 0x5f, 0x30, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x76, 0x32, 0x75, 0x76, - 0x33, 0x5f, 0x30, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x39, 0x0a, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x20, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x0a, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, - 0x20, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, - 0x5f, 0x31, 0x3b, 0x0a, 0x7d, 0x3b, 0x0a, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x29, - 0x0a, 0x7b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x75, 0x69, - 0x6e, 0x74, 0x20, 0x5f, 0x53, 0x31, 0x20, 0x3d, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x28, 0x67, 0x6c, 0x5f, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x29, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, - 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x20, 0x5f, 0x53, 0x32, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, - 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x30, 0x20, 0x3d, - 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x75, 0x76, 0x5f, 0x30, 0x20, 0x3d, - 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, - 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, - 0x69, 0x64, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x31, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, - 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, - 0x53, 0x32, 0x2e, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x23, - 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x75, 0x76, 0x30, - 0x75, 0x76, 0x31, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, 0x30, 0x75, 0x76, - 0x31, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x32, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x5f, 0x53, 0x32, 0x2e, 0x75, 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x5f, 0x75, 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x78, 0x33, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x5f, 0x73, - 0x79, 0x73, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x78, 0x33, 0x28, 0x32, 0x2e, 0x30, 0x2c, 0x20, - 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x2d, 0x32, 0x2e, - 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, - 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x33, 0x34, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x5f, 0x53, 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x2e, 0x78, 0x79, 0x20, 0x3d, - 0x20, 0x28, 0x28, 0x28, 0x76, 0x65, 0x63, 0x33, 0x28, 0x5f, 0x53, 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x5f, 0x30, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x63, - 0x6f, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x79, 0x73, 0x5f, 0x30, 0x29, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x78, 0x33, 0x20, 0x70, 0x6f, 0x73, 0x5f, 0x32, 0x20, 0x3d, 0x20, - 0x6d, 0x61, 0x74, 0x33, 0x78, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x5f, 0x53, - 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x2e, 0x78, 0x2c, 0x20, 0x30, 0x2e, 0x30, - 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x5f, 0x30, 0x2e, 0x79, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, - 0x29, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x34, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, - 0x74, 0x33, 0x78, 0x33, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x78, - 0x33, 0x28, 0x5f, 0x53, 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x2e, 0x7a, 0x2c, - 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x5f, 0x53, 0x32, - 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x2e, 0x77, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, - 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x23, - 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x32, 0x36, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, - 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x34, 0x38, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x2e, 0x78, 0x79, 0x20, 0x3d, - 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x5f, 0x53, 0x32, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x30, 0x2e, 0x78, 0x79, - 0x7a, 0x29, 0x20, 0x2a, 0x20, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x29, 0x29, 0x29, 0x29, 0x20, 0x2a, 0x20, - 0x28, 0x70, 0x6f, 0x73, 0x5f, 0x32, 0x29, 0x29, 0x29, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, - 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, - 0x30, 0x2e, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x5f, 0x30, 0x20, 0x2f, 0x20, - 0x31, 0x2e, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x39, 0x31, 0x30, 0x32, 0x33, 0x32, 0x35, 0x34, 0x33, 0x39, - 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x30, 0x20, 0x3c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x7b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x35, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x5f, 0x53, 0x33, 0x20, 0x3d, 0x20, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x5b, 0x31, 0x5d, 0x20, 0x2a, 0x20, 0x63, 0x6f, 0x72, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x30, 0x3b, 0x0a, 0x0a, - 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x35, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20, 0x5f, - 0x53, 0x33, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x35, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x5f, 0x53, 0x34, 0x20, 0x3d, 0x20, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x5b, 0x30, 0x5d, 0x20, 0x2f, 0x20, 0x63, - 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x30, 0x3b, - 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x35, 0x34, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x5b, 0x30, 0x5d, 0x20, 0x3d, - 0x20, 0x5f, 0x53, 0x34, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x35, 0x31, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x35, 0x36, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x2e, 0x7a, 0x77, 0x20, 0x3d, 0x20, 0x76, - 0x65, 0x63, 0x32, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0a, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x28, 0x5f, 0x53, 0x32, 0x2e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x5f, - 0x69, 0x64, 0x5f, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, - 0x65, 0x20, 0x30, 0x55, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x0a, 0x23, 0x6c, - 0x69, 0x6e, 0x65, 0x20, 0x35, 0x39, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x76, 0x65, 0x63, 0x32, 0x20, 0x5f, 0x53, 0x35, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x75, 0x76, 0x30, 0x75, - 0x76, 0x31, 0x5f, 0x30, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x35, 0x39, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x30, 0x2e, 0x75, 0x76, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x35, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, - 0x65, 0x20, 0x35, 0x39, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, - 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x61, 0x73, 0x65, 0x20, 0x31, 0x55, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, - 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x5f, 0x53, 0x36, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x75, - 0x76, 0x30, 0x75, 0x76, 0x31, 0x5f, 0x30, 0x2e, 0x7a, 0x77, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, - 0x36, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x75, 0x76, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x36, 0x3b, 0x0a, 0x0a, 0x23, - 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x30, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x32, 0x55, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x5f, 0x53, 0x37, 0x20, 0x3d, 0x20, 0x5f, 0x53, - 0x32, 0x2e, 0x75, 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x2e, 0x78, 0x79, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, - 0x6e, 0x65, 0x20, 0x36, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x75, 0x76, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x37, 0x3b, - 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x31, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x33, 0x55, 0x3a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x32, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x5f, 0x53, 0x38, 0x20, 0x3d, - 0x20, 0x5f, 0x53, 0x32, 0x2e, 0x75, 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x2e, 0x7a, 0x77, 0x3b, 0x0a, 0x0a, - 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x75, 0x76, 0x5f, 0x31, 0x20, 0x3d, 0x20, 0x5f, - 0x53, 0x38, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x3a, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x32, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x30, 0x20, 0x5f, 0x53, 0x39, 0x20, 0x3d, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x3b, 0x0a, - 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x2e, 0x70, - 0x6f, 0x73, 0x5f, 0x31, 0x3b, 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x35, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, - 0x69, 0x6e, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x20, 0x3d, 0x20, 0x5f, 0x53, 0x39, 0x2e, 0x75, 0x76, 0x5f, 0x31, 0x3b, - 0x0a, 0x0a, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x36, 0x35, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, - 0x72, 0x6e, 0x3b, 0x0a, 0x7d, 0x0a, 0x0a, 0x00, 0x07, 0x00, 0x03, 0x00, 0x23, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x31, - 0x00, 0x07, 0x00, 0x03, 0x00, 0x27, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x74, 0x00, 0x07, 0x00, 0x06, 0x00, 0x2d, 0x00, - 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, 0x07, - 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x00, - 0x3a, 0x00, 0x00, 0x00, 0x75, 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x04, - 0x00, 0x3e, 0x00, 0x00, 0x00, 0x75, 0x76, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x00, 0x40, 0x00, - 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x30, 0x00, 0x07, 0x00, 0x07, 0x00, 0x46, - 0x00, 0x00, 0x00, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, - 0x74, 0x5f, 0x30, 0x00, 0x07, 0x00, 0x03, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x32, 0x00, 0x07, 0x00, 0x05, - 0x00, 0x52, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x5f, 0x30, 0x00, 0x07, 0x00, - 0x05, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x00, 0x00, 0x07, - 0x00, 0x07, 0x00, 0x67, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, - 0x75, 0x74, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x06, 0x00, 0x75, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, 0x30, 0x75, 0x76, 0x31, 0x5f, - 0x30, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, - 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x62, 0x6f, 0x6f, - 0x6c, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x5f, 0x32, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x00, 0x00, 0x07, - 0x00, 0x04, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x5f, 0x31, 0x00, 0x00, 0x00, 0x07, 0x00, 0x04, 0x00, - 0xc2, 0x00, 0x00, 0x00, 0x75, 0x76, 0x5f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x08, 0x00, 0xc5, 0x00, 0x00, - 0x00, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x72, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x30, 0x00, 0x07, 0x00, 0x06, - 0x00, 0xe2, 0x00, 0x00, 0x00, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x5f, 0x30, - 0x00, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x53, 0x4c, 0x41, - 0x4e, 0x47, 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x30, 0x00, 0x00, 0x07, 0x00, 0x05, 0x00, 0xeb, 0x00, 0x00, - 0x00, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x30, 0x00, 0x07, 0x00, 0x03, 0x00, 0xfd, 0x00, - 0x00, 0x00, 0x5f, 0x53, 0x33, 0x00, 0x07, 0x00, 0x03, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x34, 0x00, 0x07, - 0x00, 0x03, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x35, 0x00, 0x07, 0x00, 0x03, 0x00, 0x3a, 0x01, 0x00, 0x00, - 0x5f, 0x53, 0x36, 0x00, 0x07, 0x00, 0x03, 0x00, 0x48, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x37, 0x00, 0x07, 0x00, 0x03, - 0x00, 0x56, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x38, 0x00, 0x07, 0x00, 0x03, 0x00, 0x68, 0x01, 0x00, 0x00, 0x5f, 0x53, - 0x39, 0x00, 0x07, 0x00, 0x05, 0x00, 0x72, 0x01, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x00, 0x07, 0x00, 0x06, 0x00, 0x75, 0x01, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x53, 0x69, 0x7a, 0x65, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x77, 0x01, 0x00, 0x00, 0x67, 0x6c, 0x5f, - 0x43, 0x75, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, 0x07, 0x00, 0x06, 0x00, 0x7b, 0x01, - 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x09, 0x00, 0x89, 0x01, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, - 0x00, 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, 0x00, 0x00, 0x05, - 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, - 0x21, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x31, 0x00, 0x05, 0x00, 0x06, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x5f, 0x30, 0x00, 0x06, 0x00, 0x05, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x5f, - 0x30, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x38, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x76, 0x5f, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x76, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x5f, 0x69, 0x64, 0x5f, 0x30, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x30, - 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x76, 0x30, 0x75, 0x76, 0x31, - 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x38, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x75, - 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x03, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x5f, 0x53, 0x32, 0x00, 0x05, 0x00, 0x05, 0x00, 0x50, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x70, - 0x6f, 0x73, 0x5f, 0x30, 0x00, 0x05, 0x00, 0x05, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, - 0x75, 0x76, 0x5f, 0x30, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x65, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x5f, 0x70, 0x6f, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, - 0x6d, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x30, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x73, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, - 0x75, 0x76, 0x30, 0x75, 0x76, 0x31, 0x5f, 0x30, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x79, 0x00, 0x00, 0x00, 0x69, - 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x75, 0x76, 0x32, 0x75, 0x76, 0x33, 0x5f, 0x30, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, - 0xa1, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x5f, 0x32, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0xaf, 0x00, 0x00, - 0x00, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x30, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x56, 0x65, - 0x72, 0x74, 0x65, 0x78, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x30, 0x00, - 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x5f, - 0x31, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x75, 0x76, 0x5f, - 0x31, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x30, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0xda, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x72, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x30, 0x00, 0x05, 0x00, 0x0c, 0x00, - 0xe0, 0x00, 0x00, 0x00, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x53, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x73, 0x5f, 0x30, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, - 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x5f, 0x30, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, - 0xe9, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x30, 0x00, 0x05, 0x00, 0x03, - 0x00, 0xfb, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x33, 0x00, 0x05, 0x00, 0x03, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x5f, 0x53, - 0x34, 0x00, 0x05, 0x00, 0x03, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x35, 0x00, 0x05, 0x00, 0x03, 0x00, 0x38, - 0x01, 0x00, 0x00, 0x5f, 0x53, 0x36, 0x00, 0x05, 0x00, 0x03, 0x00, 0x46, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x37, 0x00, - 0x05, 0x00, 0x03, 0x00, 0x54, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x38, 0x00, 0x05, 0x00, 0x03, 0x00, 0x66, 0x01, 0x00, - 0x00, 0x5f, 0x53, 0x39, 0x00, 0x05, 0x00, 0x06, 0x00, 0x70, 0x01, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x70, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x06, 0x00, 0x07, 0x00, - 0x70, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x69, 0x7a, - 0x65, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x70, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x6c, - 0x5f, 0x43, 0x6c, 0x69, 0x70, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x00, 0x06, 0x00, 0x07, 0x00, 0x70, - 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x5f, 0x43, 0x75, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x74, 0x61, - 0x6e, 0x63, 0x65, 0x00, 0x05, 0x00, 0x03, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x09, - 0x00, 0x87, 0x01, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x75, 0x76, 0x5f, 0x30, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x2b, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x47, - 0x00, 0x04, 0x00, 0x73, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, - 0x79, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0xe0, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x47, 0x00, 0x03, 0x00, 0x70, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x70, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x70, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x70, - 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, - 0x70, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, - 0x00, 0x87, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x18, 0x00, - 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x09, 0x00, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, - 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x2b, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x31, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, - 0x00, 0x31, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x35, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x17, - 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x36, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3a, 0x00, - 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, - 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3c, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x3b, - 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x15, 0x00, 0x04, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, - 0x00, 0x46, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x39, - 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, - 0x43, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x47, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, - 0x4b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x4d, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, - 0x00, 0x4e, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x35, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, - 0x52, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x54, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5a, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x5a, 0x00, - 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x36, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, - 0x00, 0x26, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, - 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x65, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, - 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x6b, 0x00, - 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6e, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, - 0x00, 0x6d, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x72, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x2e, 0x00, - 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3b, - 0x00, 0x04, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, - 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, - 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x17, 0x00, 0x04, 0x00, 0x84, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x89, - 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x8c, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x29, 0x00, - 0x03, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x8a, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, - 0x8e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x2b, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, - 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xbf, 0x2c, 0x00, 0x06, 0x00, 0x84, - 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, - 0x2b, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2c, 0x00, 0x06, - 0x00, 0x84, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x83, 0x00, - 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x84, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x89, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, - 0x92, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x99, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x9a, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x8a, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, - 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa2, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, - 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xb1, - 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x04, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, - 0x00, 0x36, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x15, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, - 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, - 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, - 0x00, 0x07, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, - 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x37, - 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc6, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xc7, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc8, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, - 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdb, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, - 0x00, 0x1e, 0x00, 0x03, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, - 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe4, - 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x00, 0xe3, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, - 0x00, 0xe1, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xe0, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0xe7, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, - 0x00, 0xea, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xe5, 0x00, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xeb, - 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0xec, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x39, 0x8e, 0xe3, 0x3f, 0x2b, - 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, - 0x07, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, - 0x00, 0xfa, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf8, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0xfa, - 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x00, 0xf9, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x00, - 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x09, 0x01, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x0b, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x33, 0x00, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x36, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x2b, 0x00, - 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x29, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x2b, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x37, 0x00, - 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3a, - 0x01, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x36, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, - 0x00, 0x3d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x12, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x52, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, - 0xc3, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x2b, - 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x09, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, - 0x00, 0x53, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x69, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x67, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x69, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, - 0x00, 0x1c, 0x00, 0x04, 0x00, 0x6e, 0x01, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x33, - 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0x70, 0x01, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x31, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x73, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x71, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x0b, 0x00, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x2b, - 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x77, 0x01, 0x00, - 0x00, 0x6f, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x79, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x6f, 0x01, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x12, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x7b, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x69, - 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x7b, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00, 0x79, 0x01, 0x00, - 0x00, 0x20, 0x00, 0x04, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x0c, 0x00, - 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x7a, - 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x7c, 0x01, 0x00, 0x00, - 0x7e, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x00, 0x69, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7e, - 0x01, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x82, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x04, 0x00, 0x85, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x85, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x69, - 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, - 0x2e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, 0x42, 0x00, 0x00, - 0x00, 0x36, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x21, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x47, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x3b, 0x00, 0x04, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, - 0x04, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x99, - 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x99, 0x00, 0x00, 0x00, - 0xfb, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x99, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, - 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0xc7, 0x00, 0x00, - 0x00, 0x66, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x12, 0x00, - 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x21, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, - 0x00, 0x54, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x3e, 0x00, - 0x03, 0x00, 0x56, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x5d, - 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, - 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x41, 0x00, - 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x3e, - 0x00, 0x03, 0x00, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x68, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x54, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, - 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x69, 0x00, 0x00, 0x00, 0x68, 0x00, - 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x41, - 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0x71, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, - 0x00, 0x76, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x54, 0x00, 0x00, 0x00, 0x77, 0x00, - 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x77, 0x00, 0x00, 0x00, 0x76, - 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x54, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x00, 0x3e, 0x00, 0x03, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, - 0x00, 0x34, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x36, 0x00, - 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x84, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x86, 0x00, - 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x84, 0x00, 0x00, 0x00, 0x97, - 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x36, 0x00, 0x00, 0x00, - 0x98, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x98, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, - 0x00, 0x16, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x98, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, - 0x13, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, - 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, - 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, - 0x00, 0x99, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x16, 0x00, - 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x50, - 0x00, 0x06, 0x00, 0x84, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, - 0xa8, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x84, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, - 0x00, 0x83, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x84, 0x00, 0x00, 0x00, 0xad, 0x00, - 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x89, - 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, - 0x3e, 0x00, 0x03, 0x00, 0xa1, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, - 0x00, 0xb4, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xb2, 0x00, - 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, - 0xaf, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, - 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, - 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0xb7, - 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x31, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x84, 0x00, 0x00, - 0x00, 0xb9, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x50, 0x00, - 0x06, 0x00, 0x84, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x90, - 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x84, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, - 0x90, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x89, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, - 0x00, 0xb9, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xaf, 0x00, - 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x25, 0x00, - 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x54, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x4d, - 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, - 0x4f, 0x00, 0x08, 0x00, 0x84, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x89, 0x00, - 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x84, 0x00, 0x00, 0x00, 0xd2, - 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x89, 0x00, 0x00, 0x00, - 0xd3, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00, 0x84, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, - 0x00, 0xd2, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x36, 0x00, 0x00, 0x00, 0xd5, 0x00, - 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x41, - 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x0c, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x41, 0x00, - 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x16, - 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, - 0x00, 0x04, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, - 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, - 0xdb, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0xec, 0x00, 0x00, - 0x00, 0xee, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, - 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0xf1, - 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xda, 0x00, 0x00, 0x00, - 0xf1, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0xda, - 0x00, 0x00, 0x00, 0xb8, 0x00, 0x05, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, - 0x00, 0xf5, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf6, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, - 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x25, - 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, - 0x4d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, - 0x00, 0x01, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xda, 0x00, - 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, - 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x31, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, - 0x00, 0x06, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x3e, 0x00, - 0x03, 0x00, 0x06, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf8, - 0x00, 0x02, 0x00, 0x07, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x0f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x09, 0x01, - 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x00, - 0x0a, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, - 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, - 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x12, - 0x01, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, - 0x11, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x13, 0x01, 0x00, - 0x00, 0x3d, 0x00, 0x04, 0x00, 0x31, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x41, 0x00, - 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x15, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, - 0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x18, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, - 0x00, 0x1a, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x16, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x17, 0x01, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x41, - 0x00, 0x06, 0x00, 0x99, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, - 0x0d, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x31, 0x00, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00, 0x0c, 0x00, - 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, - 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x41, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, - 0x00, 0x3d, 0x00, 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0xf7, 0x00, - 0x03, 0x00, 0x27, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x21, 0x01, 0x00, 0x00, 0x26, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, - 0x00, 0x26, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x63, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, - 0x53, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x27, 0x01, 0x00, - 0x00, 0xf8, 0x00, 0x02, 0x00, 0x22, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2e, 0x01, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x29, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, - 0x00, 0x04, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2b, 0x01, - 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x54, 0x00, 0x00, 0x00, 0x30, - 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, - 0x31, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x36, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, - 0x00, 0x31, 0x01, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, - 0x03, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x33, - 0x01, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, - 0xc9, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x34, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, - 0x00, 0xf9, 0x00, 0x02, 0x00, 0x27, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x23, 0x01, 0x00, 0x00, 0x0c, 0x00, - 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x36, - 0x01, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, - 0x00, 0x05, 0x00, 0x54, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x07, - 0x00, 0x36, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x38, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x3d, - 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x5e, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, - 0x00, 0x42, 0x01, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x27, 0x01, 0x00, 0x00, 0xf8, 0x00, - 0x02, 0x00, 0x24, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x4b, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, - 0x00, 0x45, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, 0x46, - 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00, - 0x49, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, - 0x00, 0x4c, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x4d, 0x01, - 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x46, - 0x01, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4f, 0x01, 0x00, 0x00, - 0x46, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, - 0x00, 0x57, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x50, 0x01, 0x00, 0x00, 0x4f, 0x01, 0x00, 0x00, 0xf9, 0x00, - 0x02, 0x00, 0x27, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x25, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, - 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x59, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, - 0x54, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, - 0x00, 0x34, 0x00, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x36, 0x00, - 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x54, 0x01, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, - 0x36, 0x00, 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5e, 0x00, 0x00, - 0x00, 0x5e, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x5e, 0x01, - 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x27, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x27, - 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6b, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x17, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6c, 0x01, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x69, 0x01, 0x00, 0x00, 0x69, 0x01, - 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6a, - 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x66, 0x01, 0x00, 0x00, - 0x25, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, - 0x00, 0x3e, 0x00, 0x03, 0x00, 0x66, 0x01, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x54, 0x00, - 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x82, 0x01, 0x00, 0x00, - 0x84, 0x01, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x84, 0x01, 0x00, - 0x00, 0x81, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, 0x66, 0x01, - 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x8b, 0x01, 0x00, 0x00, 0x8a, - 0x01, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x87, 0x01, 0x00, 0x00, 0x8b, 0x01, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, - 0x38, 0x00, 0x01, 0x00, -}; - -const size_t SPIRV_basic_vertex_shader_sizeInBytes = 15128; - diff --git a/assets/shader/basic_vertex_shader.slang b/assets/shader/basic_vertex_shader.slang deleted file mode 100644 index 76b75e1..0000000 --- a/assets/shader/basic_vertex_shader.slang +++ /dev/null @@ -1,66 +0,0 @@ -struct VertexShaderInput { - // Per Vertex - float4 pos : VERTEX_POSITION; - float2 uv : UV_VERTEX; - uint vertex_id : SV_VertexID; - - // Per Instance - float4 pos_size : INSTANCE_POSITION_SIZE; - uint tile_type : TILE_TYPE; - float4 uv0uv1 : UV_INSTANCE; - float4 uv2uv3 : UV_INSTANCE2; -}; - -[[vk::binding(0, 1)]] -cbuffer constants { - float aspect_ratio; -}; - -struct VertexShaderOutput { - float4 pos : SV_POSITION; - float2 uv : COORDINATES; -}; - -[shader("vertex")] -VertexShaderOutput main(VertexShaderInput input) { - VertexShaderOutput output; - - float3x3 coord_sys = { - 2, 0, -1, - 0, -2, 1, - 0, 0, 1 - }; - - input.pos_size.xy = mul(coord_sys, float3(input.pos_size.xy, 1)).xy; - - float3x3 pos = { - 1, 0, input.pos_size.x, - 0, 1, input.pos_size.y, - 0, 0, 1 - }; - - float3x3 size = { - input.pos_size.z, 0, 0, - 0, input.pos_size.w, 0, - 0, 0, 1 - }; - - output.pos.xy = mul(pos, mul(size, input.pos.xyz)).xy; - - float correction_factor = aspect_ratio / (16.0 / 9.0); - if(correction_factor < 1) - output.pos.y *= correction_factor; - else - output.pos.x /= correction_factor; - - output.pos.zw = float2(0, 1); - - switch(input.vertex_id) { - case 0: output.uv = input.uv0uv1.xy; break; - case 1: output.uv = input.uv0uv1.zw; break; - case 2: output.uv = input.uv2uv3.xy; break; - case 3: output.uv = input.uv2uv3.zw; break; - } - - return output; -} \ No newline at end of file diff --git a/assets/shader/font_pixel_shader.hlsl b/assets/shader/font_pixel_shader.hlsl deleted file mode 100644 index 5d9f767..0000000 --- a/assets/shader/font_pixel_shader.hlsl +++ /dev/null @@ -1,24 +0,0 @@ -struct PixelShaderInput { - float4 pos : SV_POSITION; - float4 uvst : COORDINATES; - uint tile_type : TILE_TYPE; -}; - -struct PixelShaderOutput { - float4 color : SV_TARGET; -}; - -Texture2D tex1 : register(t0); - -SamplerState texture_sampler : register(s0); - -PixelShaderOutput main(PixelShaderInput input) { - PixelShaderOutput output; - -#if 1 - output.color = float4(1, 1, 1, tex1.Sample(texture_sampler, float2(input.uvst.xy))); -#else - output.color = float4(1, 0, 1, 1); -#endif - return output; -} \ No newline at end of file diff --git a/assets/shader/font_vertex_shader.hlsl b/assets/shader/font_vertex_shader.hlsl deleted file mode 100644 index 6210b17..0000000 --- a/assets/shader/font_vertex_shader.hlsl +++ /dev/null @@ -1,63 +0,0 @@ -struct VertexShaderInput { - // Per Vertex - float4 pos : VERTEX_POSITION; - float2 uv : UV_VERTEX; - uint vid : SV_VertexID; - - // Per Instance - float4 pos_size : INSTANCE_POSITION_SIZE; - uint tile_type : TILE_TYPE; - float4 uv0uv1 : UV_INSTANCE; -}; - -struct VertexShaderOutput { - float4 pos : SV_POSITION; - float4 uv0uv1 : COORDINATES; - uint tile_type : TILE_TYPE; -}; - -cbuffer constants { - float aspect_ratio; -}; - - -VertexShaderOutput main(VertexShaderInput input) { - VertexShaderOutput output; - - float3x3 coord_sys = { - 2, 0, -1, - 0, -2, 1, - 0, 0, 1 - }; - - input.pos_size.xy = mul(coord_sys, float3(input.pos_size.xy, 1)).xy; - - float3x3 pos = { - 1, 0, input.pos_size.x, - 0, 1, input.pos_size.y, - 0, 0, 1 - }; - - float3x3 size = { - input.pos_size.z, 0, 0, - 0, input.pos_size.w, 0, - 0, 0, 1 - }; - - output.pos.xy = mul(pos, mul(size, input.pos.xyz)).xy; - - float correction_factor = aspect_ratio / (16.0 / 9.0); - if (correction_factor < 1) - output.pos.y *= correction_factor; - else - output.pos.x /= correction_factor; - - output.pos.zw = float2(0, 1); - - output.uv0uv1.zw = float2(0, 0); - - output.uv0uv1.xy = lerp(input.uv0uv1.xy, input.uv0uv1.zw, input.uv.xy); - output.tile_type = input.tile_type; - - return output; -} \ No newline at end of file diff --git a/assets/shader/world.h b/assets/shader/world.h new file mode 100644 index 0000000..aeaa9fa --- /dev/null +++ b/assets/shader/world.h @@ -0,0 +1,256 @@ +const unsigned char SPIRV_world[] = +{ + 0x03, 0x02, 0x23, 0x07, 0x00, 0x05, 0x01, 0x00, 0x28, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x11, 0x00, 0x02, 0x00, 0x4b, 0x11, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, + 0x0b, 0x00, 0x53, 0x50, 0x56, 0x5f, 0x4b, 0x48, 0x52, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x62, + 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, + 0x64, 0x2e, 0x34, 0x35, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x6d, 0x61, + 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x09, 0x00, + 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x2e, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x00, 0x05, + 0x00, 0x0c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x53, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x5f, + 0x73, 0x74, 0x64, 0x31, 0x34, 0x30, 0x00, 0x00, 0x00, 0x06, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x76, 0x79, 0x5f, 0x64, 0x65, 0x67, + 0x72, 0x65, 0x65, 0x73, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x78, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x79, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x7a, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x70, + 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x03, 0x00, 0x00, 0x00, 0x63, 0x6f, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x73, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x11, 0x00, 0x00, 0x00, 0x74, + 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x12, 0x00, 0x00, 0x00, + 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x13, 0x00, 0x00, + 0x00, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x14, 0x00, + 0x00, 0x00, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x74, 0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x73, 0x00, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x06, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, + 0x78, 0x2e, 0x75, 0x76, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, 0x02, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, 0x6e, 0x5f, + 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x05, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x69, 0x6e, 0x70, 0x75, + 0x74, 0x2e, 0x75, 0x76, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, + 0x31, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x00, 0x15, 0x00, 0x00, 0x00, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x64, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0x05, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x69, + 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x07, 0x00, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x49, 0x11, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x04, 0x00, 0x09, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, + 0x03, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x48, 0x00, 0x05, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x16, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x48, 0x00, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, + 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x03, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x47, 0x00, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, + 0x04, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x04, 0x00, 0x0e, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00, 0x17, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, + 0x00, 0x18, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x16, 0x00, 0x03, 0x00, 0x19, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x17, + 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, + 0x1c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x08, + 0x00, 0x10, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x19, 0x00, + 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, + 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x2b, 0x00, + 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1e, + 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, + 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, + 0x2d, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, + 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x2f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x2b, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x6f, 0x12, 0x83, 0x3a, 0x20, 0x00, 0x04, + 0x00, 0x33, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x03, 0x00, 0x16, 0x00, + 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, + 0x35, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x39, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, + 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1d, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x3b, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, + 0x04, 0x00, 0x22, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x34, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x35, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x37, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, + 0x00, 0x04, 0x00, 0x35, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2c, 0x00, + 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, + 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, + 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1c, 0x00, + 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x82, 0x00, 0x05, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x45, + 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x24, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x48, + 0x00, 0x00, 0x00, 0x89, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, + 0x49, 0x00, 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, + 0x00, 0x86, 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x49, 0x00, + 0x00, 0x00, 0x70, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x7f, + 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, + 0x1b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x05, + 0x00, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xc2, 0x00, + 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xc7, + 0x00, 0x05, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, + 0x00, 0x3d, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x06, 0x00, 0x19, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x51, + 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, + 0x00, 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, + 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x41, + 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, + 0x3d, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, + 0x00, 0x19, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x04, 0x00, 0x19, 0x00, + 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x5b, + 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, + 0x00, 0x2f, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x50, + 0x00, 0x07, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, + 0x5d, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x29, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x19, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x52, + 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x19, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x19, 0x00, 0x00, + 0x00, 0x63, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x19, 0x00, + 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1a, + 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, + 0x00, 0x63, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x2d, 0x00, + 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3e, + 0x00, 0x00, 0x00, 0x92, 0x00, 0x05, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x67, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, + 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x1a, + 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, + 0x90, 0x00, 0x05, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, + 0x00, 0x41, 0x00, 0x06, 0x00, 0x33, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6d, + 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x72, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x74, 0x00, + 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x74, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x41, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x77, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x4f, 0x00, + 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x75, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x79, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, + 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x75, 0x00, + 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x78, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x7d, + 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xf9, 0x00, 0x02, 0x00, 0x75, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x77, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, + 0x00, 0x1b, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x75, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x76, + 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x75, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x75, 0x00, 0x00, 0x00, + 0xf5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, + 0x00, 0x7c, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x7e, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x6f, + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x73, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x41, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x82, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x84, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x85, 0x00, 0x00, 0x00, 0x4f, + 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, + 0x00, 0x84, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x6e, 0x00, + 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x80, + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x83, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x88, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0xf9, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x82, 0x00, 0x00, 0x00, 0x4f, 0x00, + 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, + 0x81, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x85, 0x00, + 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x89, + 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x6f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x72, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x8b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x41, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x8f, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x90, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x6e, + 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, + 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, + 0x00, 0x93, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x4f, + 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, + 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8b, 0x00, + 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x90, + 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, + 0x94, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, + 0x00, 0x6f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x71, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x96, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x0b, 0x00, 0x41, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x9a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9b, 0x00, 0x00, + 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x96, 0x00, 0x00, 0x00, 0xf8, + 0x00, 0x02, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, + 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, + 0x00, 0x96, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x99, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, + 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x96, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x98, 0x00, 0x00, 0x00, + 0x4f, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x96, 0x00, 0x00, 0x00, 0xf8, 0x00, + 0x02, 0x00, 0x97, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x96, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x96, + 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, + 0x9b, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, + 0x00, 0x9f, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0xf9, 0x00, + 0x02, 0x00, 0x6f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x70, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x6f, + 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x6f, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0xa1, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x95, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x3e, + 0x00, 0x03, 0x00, 0x06, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, + 0x36, 0x00, 0x05, 0x00, 0x17, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x00, 0x00, 0xa3, 0x00, + 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x39, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x0d, + 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, + 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, + 0x00, 0xfd, 0x00, 0x01, 0x00, 0x38, 0x00, 0x01, 0x00, +}; + +const size_t SPIRV_world_sizeInBytes = 4740; + diff --git a/assets/shader/world.slang b/assets/shader/world.slang new file mode 100644 index 0000000..342548b --- /dev/null +++ b/assets/shader/world.slang @@ -0,0 +1,113 @@ +struct VertexShaderInput { + // Per Vertex + uint vertex_id : SV_VertexID; + float3 pos; + + // Per Instance + uint instance_id : SV_InstanceID; + uint tile_info; +}; + +struct VertexShaderOutput { + float4 pos : SV_POSITION; + float2 uv; +}; + +struct PixelShaderOutput { + float4 color : SV_TARGET; +}; + +[[vk::binding(0, 1)]] +cbuffer constants { + float aspect_ratio; + float fovy_degrees; + float camera_x; + float camera_y; + float camera_z; + uint map_width; +}; + +[[vk::binding(0, 0)]] +StructuredBuffer tile_infos; + +float4x4 projection(float fovy, float aspect, float near) { + float g = 1.0 / tan(fovy * 0.5); + + return { + g / aspect, 0, 0, 0, + 0, g, 0, 0, + 0, 0, 0, near, + 0, 0, 1, 0, + }; +} + +float4x4 view(float3 pos) { + return { + 1, 0, 0, -pos.x, + 0, 1, 0, -pos.y, + 0, 0, 1, -pos.z, + 0, 0, 0, 1, + }; +} + +[shader("vertex")] +VertexShaderOutput main_vertex(VertexShaderInput input) { + VertexShaderOutput output; + float2 tile_pos = float2(input.instance_id % map_width, -float(input.instance_id / map_width)); + + uint tile_type = input.tile_info & 0xffff; + uint rotation = (input.tile_info >> 16) & 0x3; + + float fovy = radians(fovy_degrees); + float4x4 view_matrix = view(float3(camera_x, -camera_y, camera_z)); + float4x4 projection_matrix = projection(fovy, aspect_ratio, 0.001); + float4x4 view_projection_matrix = mul(projection_matrix, view_matrix); + + output.pos = mul(view_projection_matrix, float4(tile_pos + input.pos.xy, 0, 1)); + + float4 uv_min_max = tile_infos.Load(tile_type); + + switch (rotation) { + case 0: switch (input.vertex_id) { + case 0: output.uv = uv_min_max.xy; break; + case 1: output.uv = uv_min_max.zy; break; + case 2: output.uv = uv_min_max.zw; break; + case 3: output.uv = uv_min_max.xw; break; + } break; + + case 1: switch (input.vertex_id) { + case 0: output.uv = uv_min_max.zy; break; + case 1: output.uv = uv_min_max.zw; break; + case 2: output.uv = uv_min_max.xw; break; + case 3: output.uv = uv_min_max.xy; break; + } break; + + case 2: switch (input.vertex_id) { + case 0: output.uv = uv_min_max.zw; break; + case 1: output.uv = uv_min_max.xw; break; + case 2: output.uv = uv_min_max.xy; break; + case 3: output.uv = uv_min_max.zy; break; + } break; + + case 3: switch (input.vertex_id) { + case 0: output.uv = uv_min_max.xw; break; + case 1: output.uv = uv_min_max.xy; break; + case 2: output.uv = uv_min_max.zy; break; + case 3: output.uv = uv_min_max.zw; break; + } break; + } + + return output; +} + +[[vk::binding(0, 2)]] +Sampler2D tex1; + +[shader("fragment")] +PixelShaderOutput main_fragment(VertexShaderOutput input) { + PixelShaderOutput output; + + output.color = tex1.Sample(float2(input.uv)); + + return output; +} diff --git a/libs/SDL3/src/gpu/vulkan/SDL_gpu_vulkan.c b/libs/SDL3/src/gpu/vulkan/SDL_gpu_vulkan.c index bad67db..52c44b0 100644 --- a/libs/SDL3/src/gpu/vulkan/SDL_gpu_vulkan.c +++ b/libs/SDL3/src/gpu/vulkan/SDL_gpu_vulkan.c @@ -11070,7 +11070,7 @@ static Uint8 VULKAN_INTERNAL_CreateInstance(VulkanRenderer *renderer) appInfo.applicationVersion = 0; appInfo.pEngineName = "SDLGPU"; appInfo.engineVersion = SDL_VERSION; - appInfo.apiVersion = VK_MAKE_VERSION(1, 0, 0); + appInfo.apiVersion = VK_MAKE_VERSION(1, 3, 0); createFlags = 0; @@ -11504,6 +11504,14 @@ static Uint8 VULKAN_INTERNAL_CreateLogicalDevice( deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions; deviceCreateInfo.pEnabledFeatures = &desiredDeviceFeatures; + VkPhysicalDeviceVulkan11Features device_features_vulkan11 = { + .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES, + .pNext = (void *)deviceCreateInfo.pNext, + .shaderDrawParameters = VK_TRUE, + }; + + deviceCreateInfo.pNext = &device_features_vulkan11; + vulkanResult = renderer->vkCreateDevice( renderer->physicalDevice, &deviceCreateInfo, diff --git a/src/main.cpp b/src/main.cpp index f43ac2e..a0e9092 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,24 +13,24 @@ #include "math_graphics.h" #include "load_entire_file.h" #include "stb_image.h" -#include "../assets/shader/basic_vertex_shader.h" -#include "../assets/shader/basic_pixel_shader.h" + +#include "../assets/shader/basic.h" +#include "../assets/shader/world.h" using namespace M; SDL_GPUDevice *device; SDL_Window *window; -SDL_GPUShader *basic_vertex_shader; -SDL_GPUShader *basic_pixel_shader; - SDL_GPUGraphicsPipeline *basic_graphics_pipeline; +SDL_GPUGraphicsPipeline *world_graphics_pipeline; SDL_GPUSampler *point_sampler; SDL_GPUBuffer *vertex_buffer; SDL_GPUBuffer *index_buffer; -SDL_GPUBuffer *tiles_instance_buffer; SDL_GPUBuffer *player_instance_buffer; +SDL_GPUBuffer *world_buffer; +SDL_GPUBuffer *tile_infos_buffer; Sint32 window_width; Sint32 window_height; @@ -40,16 +40,18 @@ bool Running = true; #define view_width 16 #define view_height 9 +M4x4 projection_matrix = projection (radians(45.0f), 1.0f, 0.001f); +M4x4 inverse_projection_matrix = inverse_projection(radians(45.0f), 1.0f, 0.001f); + struct Vertex { - V4 pos; - V2 uv0uv1; + V3 pos; }; Vertex vertices[] = { - {{ -1, 1, 1, 1 }, {0, 0}}, - {{ 1, 1, 1, 1 }, {1, 0}}, - {{ 1, -1, 1, 1 }, {1, 1}}, - {{ -1, -1, 1, 1 }, {0, 1}}, + {{ -0.5f, 0.5f, 0 }}, + {{ 0.5f, 0.5f, 0 }}, + {{ 0.5f, -0.5f, 0 }}, + {{ -0.5f, -0.5f, 0 }}, }; Uint16 indices[] = { @@ -58,45 +60,43 @@ Uint16 indices[] = { }; struct Instance { - V4 pos_size; - Uint32 tile_type; + V2 pos; V4 uv0uv1; V4 uv2uv3; }; -Instance tiles_instances[view_width * view_height] = { +Instance player_instance = { { 0.0f, 0.0f }, { 0, 0, 1, 0 }, { 1, 1, 0, 1 }}; -}; - -Instance player_instance = { { 0.5f + 0.5f / view_width, 0.5f, 1.0f / view_width, 1.0f / view_height }, 0, { 0, 0, 1, 0 }, { 1, 1, 0, 1 }}; - -Uint32 map_width = view_width; -Uint32 map_height = view_height; +Sint32 map_width; +Sint32 map_height; Uint32* map_tiles; struct Player { - Sint64 pos_x; - Sint64 pos_y; + Sint32 pos_x; + Sint32 pos_y; }; -Player player = { - .pos_x = 8, - .pos_y = 6, -}; +Player player; struct PerFrame { - float aspect_ratio; - float empty[3]; + float aspect_ratio; + float fovy_degrees; + float camera_x; + float camera_y; + float camera_z; + Uint32 map_width; }; -PerFrame per_frame = {1}; +PerFrame per_frame = { 1.0f, 45.0f, 0, 0, -10 }; typedef struct { - Uint32 type; + Uint16 type; const char *asset_path; smol_atlas_item_t *atlas_item; + V2 uv_min; + V2 uv_max; } TileInfo; TileInfo tile_infos[] = { @@ -114,6 +114,8 @@ TileInfo tile_infos[] = { int tile_atlas_size = 256; smol_atlas_t *tile_atlas; +V4 cpu_tile_infos_buffer[SDL_arraysize(tile_infos)]; + Sint32 selected_tile = -1; Sint32 selected_rotation = 0; @@ -190,75 +192,6 @@ void load_map() { log("Loading map was successful."); } -void change_map_size(char direction, int amount) { - Uint32* old_map = map_tiles; - auto old_map_width = map_width; - auto old_map_height = map_height; - - Sint32 new_x_offset = 0; - Sint32 new_y_offset = 0; - Sint32 old_x_offset = 0; - Sint32 old_y_offset = 0; - - Sint32 to_fill_width = map_width; - Sint32 to_fill_height = map_height; - Sint32 to_fill_x_offset = 0; - Sint32 to_fill_y_offset = 0; - - if (direction == 'W') { - player.pos_x = player.pos_x + amount; - map_width += amount; - to_fill_width = amount; - - if (amount < 0) - old_x_offset = -amount; - else - new_x_offset = amount; - } - - if (direction == 'N') { - player.pos_y = player.pos_y + amount; - map_height += amount; - to_fill_height = amount; - - if (amount < 0) - old_y_offset = -amount; - else - new_y_offset = amount; - } - - if (direction == 'E') { - map_width += amount; - to_fill_width = amount; - to_fill_x_offset = old_map_width; - } - - if (direction == 'S') { - map_height += amount; - to_fill_height = amount; - to_fill_y_offset = old_map_height; - } - - map_tiles = (Uint32*)malloc(map_width * map_height * sizeof(Uint32)); - - for (int y = 0; y < min(old_map_height, map_height); y++) { - for (int x = 0; x < min(old_map_width, map_width); x++) { - map_tiles[(y + new_y_offset) * map_width + (x + new_x_offset)] = old_map[(y + old_y_offset) * old_map_width + (x + old_x_offset)]; - } - } - - for (int y = 0; y < to_fill_height; y++) { - for (int x = 0; x < to_fill_width; x++) { - map_tiles[(y + to_fill_y_offset) * map_width + (x + to_fill_x_offset)] = 1; - } - } - - player.pos_x = clamp(0, player.pos_x, map_width - 1); - player.pos_y = clamp(0, player.pos_y, map_height - 1); - - free(old_map); -} - bool update_buffer(SDL_GPUBuffer *buffer, Uint32 offset, Uint32 num_bytes, void *data) { SDL_GPUTransferBufferCreateInfo transfer_buffer_info = { .usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD, @@ -341,6 +274,83 @@ SDL_GPUBuffer *create_buffer(SDL_GPUBufferUsageFlags usage, Uint32 num_bytes, vo return buffer; } +void change_map_size(char direction, int amount) { + SDL_GPUBuffer *old_world_buffer = world_buffer; + Uint32* old_map = map_tiles; + auto old_map_width = map_width; + auto old_map_height = map_height; + + Sint32 new_x_offset = 0; + Sint32 new_y_offset = 0; + Sint32 old_x_offset = 0; + Sint32 old_y_offset = 0; + + Sint32 to_fill_width = map_width; + Sint32 to_fill_height = map_height; + Sint32 to_fill_x_offset = 0; + Sint32 to_fill_y_offset = 0; + + if (direction == 'W') { + player.pos_x = player.pos_x + amount; + map_width += amount; + to_fill_width = amount; + + if (amount < 0) + old_x_offset = -amount; + else + new_x_offset = amount; + } + + if (direction == 'N') { + player.pos_y = player.pos_y + amount; + map_height += amount; + to_fill_height = amount; + + if (amount < 0) + old_y_offset = -amount; + else + new_y_offset = amount; + } + + if (direction == 'E') { + map_width += amount; + to_fill_width = amount; + to_fill_x_offset = old_map_width; + } + + if (direction == 'S') { + map_height += amount; + to_fill_height = amount; + to_fill_y_offset = old_map_height; + } + + map_tiles = (Uint32*)malloc(map_width * map_height * sizeof(Uint32)); + + for (int y = 0; y < min(old_map_height, map_height); y++) { + for (int x = 0; x < min(old_map_width, map_width); x++) { + map_tiles[(y + new_y_offset) * map_width + (x + new_x_offset)] = old_map[(y + old_y_offset) * old_map_width + (x + old_x_offset)]; + } + } + + for (int y = 0; y < to_fill_height; y++) { + for (int x = 0; x < to_fill_width; x++) { + map_tiles[(y + to_fill_y_offset) * map_width + (x + to_fill_x_offset)] = 1; + } + } + + player.pos_x = clamp(0, player.pos_x, map_width - 1); + player.pos_y = clamp(0, player.pos_y, map_height - 1); + + world_buffer = create_buffer(SDL_GPU_BUFFERUSAGE_VERTEX, map_width * map_height * 4, map_tiles, "world_buffer"); + if (!world_buffer) { + log_error("Failed to create buffer. Exiting."); + exit(1); + } + + free(old_map); + SDL_ReleaseGPUBuffer(device, old_world_buffer); +} + SDL_GPUTexture *create_shader_texture(const char *path) { int width = 0, height = 0, channels = 0; stbi_uc *data = stbi_load(path, &width, &height, &channels, 0); @@ -351,7 +361,7 @@ SDL_GPUTexture *create_shader_texture(const char *path) { SDL_GPUTextureFormat format = SDL_GPU_TEXTUREFORMAT_INVALID; if (channels == 1) format = SDL_GPU_TEXTUREFORMAT_A8_UNORM; - if (channels == 4) format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; + if (channels == 4) format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB; if (format == SDL_GPU_TEXTUREFORMAT_INVALID) { log_error("Failed to find texture format for texture (\"%s\").", path); @@ -448,7 +458,7 @@ SDL_GPUTexture *create_shader_texture(const char *path) { SDL_GPUTexture *create_shader_texture(const char *name, const char *data, int width, int height, int channels) { SDL_GPUTextureFormat format = SDL_GPU_TEXTUREFORMAT_INVALID; if (channels == 1) format = SDL_GPU_TEXTUREFORMAT_A8_UNORM; - if (channels == 4) format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; + if (channels == 4) format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM_SRGB; if (format == SDL_GPU_TEXTUREFORMAT_INVALID) { log_error("Failed to find texture format for texture."); @@ -537,9 +547,9 @@ SDL_GPUTexture *create_shader_texture(const char *name, const char *data, int wi return texture; } -void blit(char *dst, Sint32 dst_width, Sint32 dst_x, Sint32 dst_y, char *src, Sint32 width, Sint32 height, int components = 4) { +void blit(char *dst, Sint32 dst_pitch, Sint32 dst_x, Sint32 dst_y, char *src, Sint32 src_pitch, Sint32 width, Sint32 height, int components = 4) { for (Sint32 y = 0; y < height; y++) - memmove(&dst[((dst_y + y) * dst_width + dst_x) * components], &src[y * width * components], width * components); + memmove(&dst[((dst_y + y) * dst_pitch + dst_x) * components], &src[y * src_pitch * components], width * components); } bool SelectableImage(const char *label, bool selected, SDL_GPUTextureSamplerBinding *image, const ImVec2& image_size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1, 1), Uint8 orientation = 0) { @@ -564,7 +574,30 @@ bool SelectableImage(const char *label, bool selected, SDL_GPUTextureSamplerBind return pressed; } +ImVec4 linear_to_sRGB(ImVec4 linear) { + float red = linear.x <= 0.0031308f ? 12.92f * linear.x : 1.055f * powf(linear.x, 1.0f / 2.4f) - 0.055; + float green = linear.y <= 0.0031308f ? 12.92f * linear.y : 1.055f * powf(linear.y, 1.0f / 2.4f) - 0.055; + float blue = linear.z <= 0.0031308f ? 12.92f * linear.z : 1.055f * powf(linear.z, 1.0f / 2.4f) - 0.055; + + return ImVec4(red, green, blue, linear.w); +} + +ImVec4 sRGB_to_linear(ImVec4 linear) { + float red = linear.x <= 0.0031308f ? linear.x / 12.92f : powf((linear.x + 0.055) / 1.055, 2.4f); + float green = linear.y <= 0.0031308f ? linear.y / 12.92f : powf((linear.y + 0.055) / 1.055, 2.4f); + float blue = linear.z <= 0.0031308f ? linear.z / 12.92f : powf((linear.z + 0.055) / 1.055, 2.4f); + + return ImVec4(red, green, blue, linear.w); +} + int main(int argc, char **argv) { + load_map(); + + #ifdef SDL_PLATFORM_LINUX + if (!getenv("ENABLE_VULKAN_RENDERDOC_CAPTURE")) + SDL_SetHint(SDL_HINT_VIDEO_DRIVER, "wayland,x11"); + #endif + if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS)) { log_error("Failed to initialize SDL (%s). Exiting.", SDL_GetError()); return 1; @@ -587,93 +620,73 @@ int main(int argc, char **argv) { log_error("Failed to claim window for gpu device (%s). Exiting.", SDL_GetError()); return 1; } - SDL_SetGPUSwapchainParameters(device, window, SDL_GPU_SWAPCHAINCOMPOSITION_SDR, SDL_GPU_PRESENTMODE_VSYNC); + SDL_SetGPUSwapchainParameters(device, window, SDL_GPU_SWAPCHAINCOMPOSITION_SDR_LINEAR, SDL_GPU_PRESENTMODE_VSYNC); SDL_GPUShaderCreateInfo basic_vertex_shader_info = { - .code_size = SDL_arraysize(SPIRV_basic_vertex_shader), - .code = SPIRV_basic_vertex_shader, - .entrypoint = "main", + .code_size = SDL_arraysize(SPIRV_basic), + .code = SPIRV_basic, + .entrypoint = "main_vertex", .format = SDL_GPU_SHADERFORMAT_SPIRV, .stage = SDL_GPU_SHADERSTAGE_VERTEX, .num_uniform_buffers = 1, }; - basic_vertex_shader = SDL_CreateGPUShader(device, &basic_vertex_shader_info); + SDL_GPUShader *basic_vertex_shader = SDL_CreateGPUShader(device, &basic_vertex_shader_info); if (!basic_vertex_shader) { log_error("Failed to create basic vertex shader. Exiting."); return 1; } SDL_GPUShaderCreateInfo basic_pixel_shader_info = { - .code_size = SDL_arraysize(SPIRV_basic_pixel_shader), - .code = SPIRV_basic_pixel_shader, - .entrypoint = "main", + .code_size = SDL_arraysize(SPIRV_basic), + .code = SPIRV_basic, + .entrypoint = "main_fragment", .format = SDL_GPU_SHADERFORMAT_SPIRV, .stage = SDL_GPU_SHADERSTAGE_FRAGMENT, .num_samplers = 1, }; - basic_pixel_shader = SDL_CreateGPUShader(device, &basic_pixel_shader_info); + SDL_GPUShader *basic_pixel_shader = SDL_CreateGPUShader(device, &basic_pixel_shader_info); if (!basic_pixel_shader) { log_error("Failed to create basic pixel shader. Exiting."); return 1; } - SDL_GPUVertexBufferDescription vertex_buffer_descriptions[] = { - { - .slot = 0, - .pitch = sizeof(Vertex), - .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX, - }, - { - .slot = 1, - .pitch = sizeof(Instance), - .input_rate = SDL_GPU_VERTEXINPUTRATE_INSTANCE, - .instance_step_rate = 1, - }, + SDL_GPUShaderCreateInfo world_vertex_shader_info = { + .code_size = SDL_arraysize(SPIRV_world), + .code = SPIRV_world, + .entrypoint = "main_vertex", + .format = SDL_GPU_SHADERFORMAT_SPIRV, + .stage = SDL_GPU_SHADERSTAGE_VERTEX, + + .num_storage_buffers = 1, + .num_uniform_buffers = 1, }; - SDL_GPUVertexAttribute vertex_attributes[] = { - { - .location = 0, - .buffer_slot = 0, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4, - .offset = 0, - }, - { - .location = 1, - .buffer_slot = 0, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, - .offset = 16, - }, - { - .location = 2, - .buffer_slot = 1, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4, - .offset = 0, - }, - { - .location = 3, - .buffer_slot = 1, - .format = SDL_GPU_VERTEXELEMENTFORMAT_UINT, - .offset = 16, - }, - { - .location = 4, - .buffer_slot = 1, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4, - .offset = 20, - }, - { - .location = 5, - .buffer_slot = 1, - .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4, - .offset = 36, - }, + SDL_GPUShader *world_vertex_shader = SDL_CreateGPUShader(device, &world_vertex_shader_info); + if (!world_vertex_shader) { + log_error("Failed to create world vertex shader. Exiting."); + return 1; + } + + SDL_GPUShaderCreateInfo world_pixel_shader_info = { + .code_size = SDL_arraysize(SPIRV_world), + .code = SPIRV_world, + .entrypoint = "main_fragment", + .format = SDL_GPU_SHADERFORMAT_SPIRV, + .stage = SDL_GPU_SHADERSTAGE_FRAGMENT, + + .num_samplers = 1, }; + SDL_GPUShader *world_pixel_shader = SDL_CreateGPUShader(device, &world_pixel_shader_info); + if (!world_pixel_shader) { + log_error("Failed to create world pixel shader. Exiting."); + return 1; + } + SDL_GPUColorTargetDescription color_target_descriptions[] = { { .format = SDL_GetGPUSwapchainTextureFormat(device, window), @@ -691,40 +704,140 @@ int main(int argc, char **argv) { }, }; - SDL_GPUGraphicsPipelineCreateInfo basic_graphics_pipeline_info = { - .vertex_shader = basic_vertex_shader, - .fragment_shader = basic_pixel_shader, - .vertex_input_state = { - .vertex_buffer_descriptions = vertex_buffer_descriptions, - .num_vertex_buffers = SDL_arraysize(vertex_buffer_descriptions), - .vertex_attributes = vertex_attributes, - .num_vertex_attributes = SDL_arraysize(vertex_attributes), - }, - .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, - .rasterizer_state = { - .fill_mode = SDL_GPU_FILLMODE_FILL, - .cull_mode = SDL_GPU_CULLMODE_BACK, - .front_face = SDL_GPU_FRONTFACE_CLOCKWISE, - }, - .target_info = { - .color_target_descriptions = color_target_descriptions, - .num_color_targets = SDL_arraysize(color_target_descriptions), - }, - }; + { + SDL_GPUVertexBufferDescription vertex_buffer_descriptions[] = { + { + .slot = 0, + .pitch = sizeof(Vertex), + .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX, + }, + { + .slot = 1, + .pitch = sizeof(Instance), + .input_rate = SDL_GPU_VERTEXINPUTRATE_INSTANCE, + .instance_step_rate = 1, + }, + }; - basic_graphics_pipeline = SDL_CreateGPUGraphicsPipeline(device, &basic_graphics_pipeline_info); - if (!basic_graphics_pipeline) { - log_error("Failed to create basic graphics pipeline. Exiting."); - return 1; + SDL_GPUVertexAttribute vertex_attributes[] = { + { + .location = 0, + .buffer_slot = 0, + .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3, + .offset = offsetof(Vertex, pos), + }, + { + .location = 1, + .buffer_slot = 1, + .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT2, + .offset = offsetof(Instance, pos), + }, + { + .location = 2, + .buffer_slot = 1, + .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4, + .offset = offsetof(Instance, uv0uv1), + }, + { + .location = 3, + .buffer_slot = 1, + .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT4, + .offset = offsetof(Instance, uv2uv3), + }, + }; + + SDL_GPUGraphicsPipelineCreateInfo basic_graphics_pipeline_info = { + .vertex_shader = basic_vertex_shader, + .fragment_shader = basic_pixel_shader, + .vertex_input_state = { + .vertex_buffer_descriptions = vertex_buffer_descriptions, + .num_vertex_buffers = SDL_arraysize(vertex_buffer_descriptions), + .vertex_attributes = vertex_attributes, + .num_vertex_attributes = SDL_arraysize(vertex_attributes), + }, + .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, + .rasterizer_state = { + .fill_mode = SDL_GPU_FILLMODE_FILL, + .cull_mode = SDL_GPU_CULLMODE_BACK, + .front_face = SDL_GPU_FRONTFACE_CLOCKWISE, + .enable_depth_clip = true, + }, + .target_info = { + .color_target_descriptions = color_target_descriptions, + .num_color_targets = SDL_arraysize(color_target_descriptions), + }, + }; + + basic_graphics_pipeline = SDL_CreateGPUGraphicsPipeline(device, &basic_graphics_pipeline_info); + if (!basic_graphics_pipeline) { + log_error("Failed to create basic graphics pipeline. Exiting."); + return 1; + } + + SDL_ReleaseGPUShader(device, basic_vertex_shader); + SDL_ReleaseGPUShader(device, basic_pixel_shader); } - for (int y = 0; y < view_height; y++) { - for (int x = 0; x < view_width; x++) { - tiles_instances[x + y * view_width].pos_size.zw = { 1.0f / view_width, 1.0f / view_height }; - tiles_instances[x + y * view_width].pos_size.xy = { (float)x / view_width, (float)y / (float)view_height }; - tiles_instances[x + y * view_width].pos_size.xy += tiles_instances[x + y * view_width].pos_size.zw * 0.5f; - tiles_instances[x + y * view_width].uv0uv1 = { 0, 0, 1, 1 }; + { + SDL_GPUVertexBufferDescription vertex_buffer_descriptions[] = { + { + .slot = 0, + .pitch = sizeof(Vertex), + .input_rate = SDL_GPU_VERTEXINPUTRATE_VERTEX, + }, + { + .slot = 1, + .pitch = sizeof(Uint32), + .input_rate = SDL_GPU_VERTEXINPUTRATE_INSTANCE, + .instance_step_rate = 1, + }, + }; + + SDL_GPUVertexAttribute vertex_attributes[] = { + { + .location = 0, + .buffer_slot = 0, + .format = SDL_GPU_VERTEXELEMENTFORMAT_FLOAT3, + .offset = offsetof(Vertex, pos), + }, + { + .location = 1, + .buffer_slot = 1, + .format = SDL_GPU_VERTEXELEMENTFORMAT_UINT, + .offset = 0, + }, + }; + + SDL_GPUGraphicsPipelineCreateInfo world_graphics_pipeline_info = { + .vertex_shader = world_vertex_shader, + .fragment_shader = world_pixel_shader, + .vertex_input_state = { + .vertex_buffer_descriptions = vertex_buffer_descriptions, + .num_vertex_buffers = SDL_arraysize(vertex_buffer_descriptions), + .vertex_attributes = vertex_attributes, + .num_vertex_attributes = SDL_arraysize(vertex_attributes), + }, + .primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST, + .rasterizer_state = { + .fill_mode = SDL_GPU_FILLMODE_FILL, + .cull_mode = SDL_GPU_CULLMODE_BACK, + .front_face = SDL_GPU_FRONTFACE_CLOCKWISE, + .enable_depth_clip = true, + }, + .target_info = { + .color_target_descriptions = color_target_descriptions, + .num_color_targets = SDL_arraysize(color_target_descriptions), + }, + }; + + world_graphics_pipeline = SDL_CreateGPUGraphicsPipeline(device, &world_graphics_pipeline_info); + if (!world_graphics_pipeline) { + log_error("Failed to create world graphics pipeline. Exiting."); + return 1; } + + SDL_ReleaseGPUShader(device, world_vertex_shader); + SDL_ReleaseGPUShader(device, world_pixel_shader); } SDL_GPUTexture *player_texture = create_shader_texture("../assets/decorations/strawberry.png"); @@ -733,6 +846,7 @@ int main(int argc, char **argv) { return 1; } + int tile_border_size = 1; tile_atlas = sma_atlas_create(tile_atlas_size, tile_atlas_size); char *tile_atlas_texture_cpu = (char *)calloc(1, tile_atlas_size * tile_atlas_size * 4); for (int i = 0; i < SDL_arraysize(tile_infos); i++) { @@ -743,15 +857,40 @@ int main(int argc, char **argv) { return 1; } - tile_infos[i].atlas_item = sma_item_add(tile_atlas, width, height); + tile_infos[i].atlas_item = sma_item_add(tile_atlas, width + 2 * tile_border_size, height + 2 * tile_border_size); if (!tile_infos[i].atlas_item) { log_error("Failed to add tile texture to atlas. Exiting."); return 1; } + int item_x = sma_item_x(tile_infos[i].atlas_item); + int item_y = sma_item_y(tile_infos[i].atlas_item); + + tile_infos[i].uv_min = { .x = (item_x + tile_border_size) / (float)tile_atlas_size, .y = (item_y + tile_border_size) / (float)tile_atlas_size }; + tile_infos[i].uv_max = { .x = (item_x + tile_border_size + width) / (float)tile_atlas_size, .y = (item_y + tile_border_size + height) / (float)tile_atlas_size }; + + cpu_tile_infos_buffer[i] = V4{ tile_infos[i].uv_min, tile_infos[i].uv_max }; + + blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + tile_border_size, item_y + tile_border_size, (char *)data, width, width, height); + + // EDGES + + /* TOP */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + 1, item_y + 0, (char *)data, width, width, 1); + /* BOTTOM */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + 1, item_y + height + 1, (char *)data + width * (height - 1) * 4, width, width, 1); + + /* LEFT */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + 0, item_y + 1, (char *)data, width, 1, height); + /* RIGHT */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + width + 1, item_y + 1, (char *)data + (width - 1) * 4, width, 1, height); + + // CORNERS + + /* TOP-LEFT */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x, item_y, (char *)data, width, 1, 1); + /* TOP-RIGHT */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + width + 1, item_y, (char *)data + (width - 1) * 4, width, 1, 1); + + /* BOTTOM-LEFT */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x, item_y + height + 1, (char *)data + (height - 1) * width * 4, width, 1, 1); + /* BOTTOM-RIGHT */ blit(tile_atlas_texture_cpu, tile_atlas_size, item_x + width + 1, item_y + height + 1, (char *)data + (height - 1) * width * 4 + (width -1 ) * 4, width, 1, 1); - blit(tile_atlas_texture_cpu, tile_atlas_size, sma_item_x(tile_infos[i].atlas_item), sma_item_y(tile_infos[i].atlas_item), (char *)data, width, height); stbi_image_free(data); } + SDL_GPUTexture *tile_atlas_texture = create_shader_texture("tile_atlas", tile_atlas_texture_cpu, tile_atlas_size, tile_atlas_size, 4); free(tile_atlas_texture_cpu); if (!tile_atlas_texture) { @@ -767,9 +906,13 @@ int main(int argc, char **argv) { .address_mode_u = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE, .address_mode_v = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE, .address_mode_w = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE, + + .max_anisotropy = 16.0f, + .enable_anisotropy = true, }; point_sampler = SDL_CreateGPUSampler(device, &point_sampler_info); + SDL_GPUTextureSamplerBinding tile_atlas_texture_binding = { .texture = tile_atlas_texture, .sampler = point_sampler }; vertex_buffer = create_buffer(SDL_GPU_BUFFERUSAGE_VERTEX, sizeof(vertices), vertices, "vertex_buffer"); if (!vertex_buffer) { @@ -783,28 +926,39 @@ int main(int argc, char **argv) { return 1; } - tiles_instance_buffer = create_buffer(SDL_GPU_BUFFERUSAGE_VERTEX, sizeof(tiles_instances), tiles_instances, "tiles_instance_buffer"); - if (!tiles_instance_buffer) { - log_error("Failed to create buffer. Exiting."); - return 1; - } - player_instance_buffer = create_buffer(SDL_GPU_BUFFERUSAGE_VERTEX, sizeof(player_instance), &player_instance, "player_instance_buffer"); if (!player_instance_buffer) { log_error("Failed to create buffer. Exiting."); return 1; } - load_map(); + world_buffer = create_buffer(SDL_GPU_BUFFERUSAGE_VERTEX, map_width * map_height * 4, map_tiles, "world_buffer"); + if (!world_buffer) { + log_error("Failed to create buffer. Exiting."); + return 1; + } + + tile_infos_buffer = create_buffer(SDL_GPU_BUFFERUSAGE_GRAPHICS_STORAGE_READ, SDL_arraysize(cpu_tile_infos_buffer) * sizeof(*cpu_tile_infos_buffer), cpu_tile_infos_buffer, "tile_infos_buffer"); + if (!tile_infos_buffer) { + log_error("Failed to create buffer. Exiting."); + return 1; + } IMGUI_CHECKVERSION(); - ImGui::CreateContext(); + ImGuiContext *imgui_context = ImGui::CreateContext(); ImGuiIO &io = ImGui::GetIO(); io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; + io.ConfigFlags |= ImGuiConfigFlags_IsSRGB; ImGui::StyleColorsDark(); + if (io.ConfigFlags & ImGuiConfigFlags_IsSRGB){ + for (int i = 0; i < IM_ARRAYSIZE(imgui_context->Style.Colors); i++) { + imgui_context->Style.Colors[i] = sRGB_to_linear(imgui_context->Style.Colors[i]); + } + } + ImGui_ImplSDL3_InitForSDLGPU(window); ImGui_ImplSDLGPU3_InitInfo imgui_init_info = { .Device = device, @@ -816,7 +970,6 @@ int main(int argc, char **argv) { bool show_demo_window = true; bool first_frame = true; - SDL_GetWindowSizeInPixels(window, &window_width, &window_height); // MSG Message; @@ -833,7 +986,6 @@ int main(int argc, char **argv) { selected_tile = -1; } - SDL_GPUTextureSamplerBinding texture_binding = { .texture = tile_atlas_texture, .sampler = point_sampler }; for (int i = 0; i < SDL_arraysize(tile_infos); i++) { ImGui::PushID(i); @@ -844,7 +996,7 @@ int main(int argc, char **argv) { if (available >= 32) ImGui::SameLine(); - if (SelectableImage("##tile", selected_tile == i, &texture_binding, ImVec2(32, 32), uv0, uv1, SDL_max(selected_rotation, 0))) + if (SelectableImage("##tile", selected_tile == i, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, SDL_max(selected_rotation, 0))) selected_tile = i; ImGui::PopID(); @@ -856,30 +1008,33 @@ int main(int argc, char **argv) { ImVec2 uv0 = ImVec2(sma_item_x(tile_infos[selected_tile].atlas_item) / (float)tile_atlas_size, sma_item_y(tile_infos[selected_tile].atlas_item) / (float)tile_atlas_size); ImVec2 uv1 = ImVec2(uv0.x + sma_item_width(tile_infos[selected_tile].atlas_item) / (float)tile_atlas_size, uv0.y + sma_item_height(tile_infos[selected_tile].atlas_item) / (float)tile_atlas_size); - if (SelectableImage("##None", selected_rotation == 0, &texture_binding, ImVec2(32, 32), uv0, uv1, 0)) + if (SelectableImage("##None", selected_rotation == 0, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 0)) selected_rotation = 0; if (ImGui::GetContentRegionAvail().x - ImGui::GetItemRectMax().x >= 32) ImGui::SameLine(); - if (SelectableImage("##90", selected_rotation == 1, &texture_binding, ImVec2(32, 32), uv0, uv1, 1)) + if (SelectableImage("##90", selected_rotation == 1, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 1)) selected_rotation = 1; if (ImGui::GetContentRegionAvail().x - ImGui::GetItemRectMax().x >= 32) ImGui::SameLine(); - if (SelectableImage("##180", selected_rotation == 2, &texture_binding, ImVec2(32, 32), uv0, uv1, 2)) + if (SelectableImage("##180", selected_rotation == 2, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 2)) selected_rotation = 2; if (ImGui::GetContentRegionAvail().x - ImGui::GetItemRectMax().x >= 32) ImGui::SameLine(); - if (SelectableImage("##270", selected_rotation == 3, &texture_binding, ImVec2(32, 32), uv0, uv1, 3)) + if (SelectableImage("##270", selected_rotation == 3, &tile_atlas_texture_binding, ImVec2(32, 32), uv0, uv1, 3)) selected_rotation = 3; if (ImGui::Selectable("Random", selected_rotation == -1)) selected_rotation = -1; } + + ImGui::DragFloat("fovy", &per_frame.fovy_degrees); + ImGui::DragFloat("camera_z", &per_frame.camera_z); } ImGui::End(); @@ -955,31 +1110,12 @@ int main(int argc, char **argv) { float mouse_x = event.button.x; float mouse_y = event.button.y; - V2 X = V2{ -1, 1 }; - V2 Y = V2{ -1, 1 }; + V2 mouse = remap(V2{ 0, 0 }, V2{ (float)window_width, (float)window_height }, V2{ -1, -1 }, V2{ 1, 1 }, V2{ mouse_x, mouse_y }); + V4 mouse_world = inverse_projection_matrix * V4{ mouse.x, mouse.y, 10 * 0.001, 1 }; + mouse_world.xy *= mouse_world.w; - float correction_factor = (window_width / (float)window_height) / (16.0 / 9.0); - if (correction_factor < 1) - Y *= correction_factor; - else - X /= correction_factor; - - float m_x = remap(0, window_width, -1, 1, mouse_x); - float m_y = remap(0, window_height, -1, 1, mouse_y); - - mouse_x = remap(X.x, X.y, 0, window_width, m_x); - mouse_y = remap(Y.x, Y.y, 0, window_height, m_y); - - float tile_width = window_width / (float) view_width; - float tile_height = window_height / (float) view_height; - - int tile_x = (int)(mouse_x / tile_width) + player.pos_x - (view_width / 2); - int tile_y = (int)(mouse_y / tile_height) + player.pos_y - (view_height / 2); - - if (mouse_x < 0) - tile_x = -1; - if (mouse_y< 0) - tile_y = -1; + Sint32 tile_x = roundf(mouse_world.x) + player.pos_x; + Sint32 tile_y = roundf(mouse_world.y) + player.pos_y; if (selected_tile != -1) { if(0 <= tile_x && tile_x < map_width && @@ -990,11 +1126,13 @@ int main(int argc, char **argv) { } else { map_tiles[tile_x + map_width * tile_y] = ((selected_rotation & 3) << 16) | selected_tile; } + + update_buffer(world_buffer, (tile_x + map_width * tile_y) * sizeof(Uint32), sizeof(Uint32), &map_tiles[tile_x + map_width * tile_y]); } } SDL_Keymod modifiers = SDL_GetModState(); - if (modifiers & SDL_KMOD_SHIFT && tile_x == -1) { + if (modifiers & SDL_KMOD_SHIFT && tile_x <= -1) { if(modifiers & SDL_KMOD_CTRL) change_map_size('W', -1); else @@ -1008,7 +1146,7 @@ int main(int argc, char **argv) { change_map_size('E', 1); } - if (modifiers & SDL_KMOD_SHIFT && tile_y == -1) { + if (modifiers & SDL_KMOD_SHIFT && tile_y <= -1) { if (modifiers & SDL_KMOD_CTRL) change_map_size('N', -1); else @@ -1025,54 +1163,27 @@ int main(int argc, char **argv) { } } - //Tiles updaten - for (int y = 0; y < view_height; y++) { - for (int x = 0; x < view_width; x++) { - Uint8 orientation = 0; - - if (x + player.pos_x - view_width / 2 >= 0 && x + player.pos_x - view_width / 2 < map_width && - y + player.pos_y - view_height / 2 >= 0 && y + player.pos_y - view_height / 2 < map_height) { - tiles_instances[x + y * view_width].tile_type = map_tiles[(x + player.pos_x - view_width / 2) + (y + player.pos_y - view_height / 2) * map_width] & 0xffff; - orientation = (map_tiles[(x + player.pos_x - view_width / 2) + (y + player.pos_y - view_height / 2) * map_width] & 0x00030000) >> 16; - } else { - tiles_instances[x + y * view_width].tile_type = 0; - } - - Uint32 type = tiles_instances[x + y * view_width].tile_type; - - float x0 = sma_item_x(tile_infos[type].atlas_item); - float y0 = sma_item_y(tile_infos[type].atlas_item); - float x1 = x0 + sma_item_width(tile_infos[type].atlas_item); - float y1 = y0 + sma_item_height(tile_infos[type].atlas_item); - - x0 /= tile_atlas_size; - y0 /= tile_atlas_size; - x1 /= tile_atlas_size; - y1 /= tile_atlas_size; - - switch (orientation) { - case 0: tiles_instances[x + y * view_width].uv0uv1 = { x0 , y0, x1, y0 }; tiles_instances[x + y * view_width].uv2uv3 = { x1 , y1, x0, y1 }; break; - case 1: tiles_instances[x + y * view_width].uv0uv1 = { x1 , y0, x1, y1 }; tiles_instances[x + y * view_width].uv2uv3 = { x0 , y1, x0, y0 }; break; - case 2: tiles_instances[x + y * view_width].uv0uv1 = { x1 , y1, x0, y1 }; tiles_instances[x + y * view_width].uv2uv3 = { x0 , y0, x1, y0 }; break; - case 3: tiles_instances[x + y * view_width].uv0uv1 = { x0 , y1, x0, y0 }; tiles_instances[x + y * view_width].uv2uv3 = { x1 , y0, x1, y1 }; break; - } - } - } - if (!swapchain_texture) { SDL_CancelGPUCommandBuffer(command_buffer); ImGui::Render(); ImDrawData *draw_data = ImGui::GetDrawData(); continue; } + + player_instance.pos.x = player.pos_x; + player_instance.pos.y = player.pos_y; + + update_buffer(player_instance_buffer, 0, sizeof(player_instance), &player_instance); + + per_frame.aspect_ratio = ((float) window_width / (float) window_height); + per_frame.map_width = map_width; + per_frame.camera_x = player.pos_x; + per_frame.camera_y = player.pos_y; - per_frame.aspect_ratio = (float) window_width / (float) window_height; SDL_PushGPUVertexUniformData(command_buffer, 0, &per_frame, sizeof(per_frame)); - if (!update_buffer(tiles_instance_buffer, 0, sizeof(tiles_instances), tiles_instances)) { - log_error("Failed to update buffer. Exiting."); - return 1; - } + projection_matrix = projection (radians(per_frame.fovy_degrees), per_frame.aspect_ratio, 0.001f); + inverse_projection_matrix = inverse_projection(radians(per_frame.fovy_degrees), per_frame.aspect_ratio, 0.001f); SDL_GPUColorTargetInfo color_target_info = { .texture = swapchain_texture, @@ -1090,18 +1201,19 @@ int main(int argc, char **argv) { { // Draw Map SDL_GPUBufferBinding index_buffer_binding = { .buffer = index_buffer, .offset = 0 }; SDL_GPUBufferBinding vertex_buffers[] = { - { .buffer = vertex_buffer, .offset = 0 }, - { .buffer = tiles_instance_buffer, .offset = 0 }, + { .buffer = vertex_buffer, .offset = 0 }, + { .buffer = world_buffer, .offset = 0 }, }; SDL_GPUTextureSamplerBinding texture_bindings[] = { { .texture = tile_atlas_texture, .sampler = point_sampler }, }; - SDL_BindGPUGraphicsPipeline(render_pass, basic_graphics_pipeline); + SDL_BindGPUGraphicsPipeline(render_pass, world_graphics_pipeline); SDL_BindGPUIndexBuffer(render_pass, &index_buffer_binding, SDL_GPU_INDEXELEMENTSIZE_16BIT); SDL_BindGPUVertexBuffers(render_pass, 0, vertex_buffers, SDL_arraysize(vertex_buffers)); + SDL_BindGPUVertexStorageBuffers(render_pass, 0, &tile_infos_buffer, 1); SDL_BindGPUFragmentSamplers(render_pass, 0, texture_bindings, SDL_arraysize(texture_bindings)); - SDL_DrawGPUIndexedPrimitives(render_pass, 6, view_width * view_height, 0, 0, 0); + SDL_DrawGPUIndexedPrimitives(render_pass, 6, map_height * map_width, 0, 0, 0); } { // Draw Player diff --git a/src/math_graphics.h b/src/math_graphics.h index 9d3b5f8..5ce4e62 100644 --- a/src/math_graphics.h +++ b/src/math_graphics.h @@ -7,768 +7,821 @@ #include #include #include +#include #undef min #undef max namespace M { - //clamp - constexpr inline float clamp(float min, float a, float max) { - float result = a; - if (a < min) - result = min; - if (a > max) - result = max; - return result; - } - - //clamp für 0-1 Bereich (Grafik) - constexpr inline float clamp01(float a) { - return clamp(0, a, 1); - } - - //clamp für Integer - constexpr inline int64_t clamp(int64_t min, int64_t a, int64_t max) { - int64_t result = a; - if (a < min) - result = min; - if (a > max) - result = max; - return result; - } - - //wurzelberechnung - inline float square_root(float a) { - return _mm_cvtss_f32(_mm_sqrt_ss(_mm_set_ss(a))); - } - - inline float reciprocal_square_root(float a) { - return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(a))); - } - - constexpr inline float min(float a, float b) { - return a < b ? a : b; - } - - constexpr inline float max(float a, float b) { - return a > b ? a : b; - } - - constexpr inline double min(double a, double b) { - return a < b ? a : b; - } - - constexpr inline double max(double a, double b) { - return a > b ? a : b; - } - - constexpr inline int64_t min(int64_t a, int64_t b) { - return a < b ? a : b; - } - - template - constexpr inline T min(T a, T b) { - return a < b ? a : b; - } - - constexpr float lerp(float a, float b, float t) { - return (1.0f - t) * a + t * b; - } - - inline float ilerp(float a, float b, float v) { - return (v - a) / (b - a); - } - - inline float remap(float in_a, float in_b, float out_a, float out_b, float v) { - float t = ilerp(in_a, in_b, v); - return lerp(out_a, out_b, t); - } - - - //----------------------------------------------- - //Vektorberechnung 2-dim - union V2 { - struct { - float x; - float y; - }; - - struct { - float u; - float v; - }; - - struct { - float width; - float height; - }; - - struct { - float E[2]; - }; - - float operator [](size_t index) { - assert(index < 2); - return E[index]; - } - }; - - //Negation von 2-dim Vektor - inline V2 operator -(V2 a) { - return { - -a.x, - -a.y - }; - } - - //Addition 2er 2-dim Vektoren - inline V2 operator +(V2 a, V2 b) { - return { - a.x + b.x, - a.y + b.y - }; - } - - //Vektor Addition - inline V2 operator +=(V2& a, V2 b) { - return a = a + b; - } - - //Subtraktion 2er 2-dim Vektoren - inline V2 operator -(V2 a, V2 b) { - return { - a.x - b.x, - a.y - b.y - }; - } - - //Vektor Subtraktion - inline V2 operator -=(V2& a, V2 b) { - return a = a - b; - } - - //Skalarmultiplikation -> erst Skalar, dann Vektor - inline V2 operator *(float a, V2 b) { - return { - a * b.x, - a * b.y - }; - } - - //Skalarmultiplikation -> erst Vektor, dann Skalar - inline V2 operator *(V2 a, float b) { - return { - a.x * b, - a.y * b - }; - } - - //Skalarmultiplikation -> mit V2 Pointer - inline V2 &operator *= (V2 &a, float b) { - a = a * b; - return a; - } - - //Division mit einem Skalar Oo -> Skalar geteilt durch Vektor - inline V2 operator /(float a, V2 b) { - return { - a / b.x, - a / b.y - }; - } - - //Division mit einem Skalar Oo -> Vektor geteilt durch Skalar - inline V2 operator /(V2 a, float b) { - return { - a.x / b, - a.y / b - }; - } - - //Division mit einem Skalar -> 2 Vektoren - inline V2 operator /(V2 a, V2 b) { - return { - a.x / b.x, - a.y / b.y - }; - } - - //Division mit einem Skalar -> mit V2 Pointer - inline V2 &operator /= (V2 &a, float b) { - a = a / b; - return a; - } - - //Skalarprodukt - inline float dot(V2 a, V2 b) { - return a.x * b.x + a.y * b.y; - } - - //Hadamard-Produkt - inline V2 hadamard(V2 a, V2 b) { - return { - a.x * b.x, - a.y * b.y - }; - } - - //Betrag des Vektors quadrieren - inline float length_squared(V2 a) { - return dot(a, a); - } - - //Betrag eines Vektors - inline float length(V2 a) { - return square_root(length_squared(a)); - } - - //Reziproke der Länge - inline float reciprocal_length(V2 a) { - return reciprocal_square_root(length_squared(a)); - } - - //Einheitsvektor - inline V2 normalize(V2 a) { - return a * reciprocal_length(a); - } - - //Vektor der 90 - inline V2 perp(V2 a) { - return { - -a.y, - a.x - }; - } - - //clamp für 2-dim Vektor - inline V2 clamp01(V2 a) { - return { - clamp01(a.x), - clamp01(a.y) - }; - } - - //Vektor mit den kleinsten Werten 2er Vektoren - inline V2 min(V2 a, V2 b) { - return { - min(a.x, b.x), - min(a.y, b.y), - }; - } - - //Vektor mit den groessten Werten 2er Vektoren - inline V2 max(V2 a, V2 b) { - return { - max(a.x, b.x), - max(a.y, b.y), - }; - } - - //kleinster Vektor Wert - inline float min(V2 a) { - return min(a.x, a.y); - } - - //groesster Vektor Wert - inline float max(V2 a) { - return max(a.x, a.y); - } - - //Lerp mit 2 Vektoren - inline V2 lerp(V2 a, V2 b, V2 t) { - return V2{ - lerp(a.x, b.x, t.x), - lerp(a.y, b.y, t.y), - }; - } - - // - inline V2 ilerp(V2 a, V2 b, V2 v) { - return (v - a) / (b - a); - } - - // - inline V2 remap(V2 in_a, V2 in_b, V2 out_a, V2 out_b, V2 v) { - V2 t = ilerp(in_a, in_b, v); - return lerp(out_a, out_b, t); - } - - //----------------------------------------------- - //Vektorberechnung 3-dim - union V3 { - struct { - float x; - float y; - float z; - }; - - //farbvektor - struct { - float r; - float g; - float b; - }; - - //texturvektor - struct { - float u; - float v; - float s; - }; - - //von V3 zu V2 ohne z - struct { - V2 xy; - float _z; - }; - - //von V3 zu V2 ohne x - struct { - float _x; - V2 yz; - }; - - struct { - float E[3]; - }; - - float operator [](size_t index) { - assert(index < 3); - return E[index]; - } - }; - - //Negation von 2-dim Vektor - inline V3 operator -(V3 a) { - return { - -a.x, - -a.y, - -a.z - }; - } - - //Addition 2er 2-dim Vektoren - inline V3 operator +(V3 a, V3 b) { - return { - a.x + b.x, - a.y + b.y, - a.z + b.z - }; - } - - //Subtraktion 2er 2-dim Vektoren - inline V3 operator -(V3 a, V3 b) { - return { - a.x - b.x, - a.y - b.y, - a.z - b.z - }; - } - - //Skalarmultiplikation -> erst Skalar, dann Vektor - inline V3 operator *(float a, V3 b) { - return { - a * b.x, - a * b.y, - a * b.z - }; - - } - - //Skalarmultiplikation -> erst Vektor, dann Skalar - inline V3 operator *(V3 a, float b) { - return { - a.x * b, - a.y * b, - a.z * b - }; - - } - - //Division mit nem Skalar Oo -> Skalar geteilt durch Vektor - inline V3 operator /(float a, V3 b) { - return { - a / b.x, - a / b.y, - a / b.z - }; - } - - //Division mit nem Skalar Oo -> Vektor geteilt durch Skalar - inline V3 operator /(V3 a, float b) { - return { - a.x / b, - a.y / b, - a.z / b - }; - } - - //Skalarprodukt - inline float dot(V3 a, V3 b) { - return a.x * b.x + a.y * b.y + a.z * b.z; - } - - //Hadamard-Produkt - inline V3 hadamard(V3 a, V3 b) { - return { - a.x * b.x, - a.y * b.y, - a.z * b.z - }; - } - - //Kreuzprodukt - inline V3 cross(V3 a, V3 b) { - return { - a.y * b.z - a.z * b.y, - a.z * b.x - a.x * b.z, - a.x * b.y - a.y * b.x - }; - } - - //Betrag des Vektors quadrieren - inline float length_squared(V3 a) { - return dot(a, a); - } - - //Betrag eines Vektors - inline float length(V3 a) { - return square_root(length_squared(a)); - } - - //Reziproke der Länge - inline float reciprocal_length(V3 a) { - return reciprocal_square_root(length_squared(a)); - } - - //Einheitsvektor - inline V3 normalize(V3 a) { - return a * reciprocal_length(a); - } - - union V4 { - struct { - float x; - float y; - float z; - float w; - }; - - //farbvektor - struct { - float r; - float g; - float b; - float a; - }; - - //texturvektor - struct { - float u; - float v; - float s; - float t; - }; - - //von V4 zu V2 ohne z - struct { - V2 xy; - V2 zw; - }; - - //V2 fuer Teiltexturenausgabe - struct { - V2 uv0; - V2 uv1; - }; - - //von V4 zu V2 ohne x - struct { - float _x; - V2 yz; - float _w; - }; - - struct { - float E[4]; - }; - - V4(V2 a, V2 b) { xy = a; zw = b; } - V4(float a, float b, float c, float d) { x = a; y = b; z = c; w = d; } - V4(float a, float b, float c) { x = a; y = b; z = c; w = 1; } - V4() {} - - float operator [](size_t index) { - assert(index < 4); - return E[index]; - } - }; - - - //----------------------------------------------- - //2x2 Matrix - - //M2x2 m; - //m.E[0][1] - //m.V[1] - - //m[1][0] - union M2x2 { - struct { - float x1; float x2; - float y1; float y2; - }; - - struct { - float E[2][2]; - }; - - struct { - V2 V[2]; - }; - - V2 &operator [](size_t index) { - assert(index < 2); - return V[index]; - } - }; - - //Matrix negieren - inline M2x2 operator -(M2x2 a){ - return { - -a[0][0], -a[0][1], - -a[1][0], -a[1][1] - }; - } - - //Matrix Addition - inline M2x2 operator +(M2x2 a, M2x2 b) { - return { - a[0][0] + b[0][0], a[0][1] + b[0][1], - a[1][0] + b[1][0], a[1][1] + b[1][1] - }; - } - - //Matrix Subtraktion - inline M2x2 operator -(M2x2 a, M2x2 b) { - return { - a[0][0] - b[0][0], a[0][1] - b[0][1], - a[1][0] - b[1][0], a[1][1] - b[1][1] - }; - } - - //Matrix Skalarmultiplikation - inline M2x2 operator *(M2x2 a, float b) { - return { - a[0][0] * b, a[0][1] * b, - a[1][0] * b, a[1][1] * b - }; - } - - //Matrix Skalarmultiplikation - inline M2x2 operator *(float a, M2x2 b) { - return { - a * b[0][0], a * b[0][1], - a * b[1][0], a * b[1][1] - }; - } - - //Matrix Multiplikation - inline M2x2 operator *(M2x2 a, M2x2 b) { - return { - a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1], - a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1] - }; - } - - //Matrix * Vektor - inline V2 operator *(M2x2 a, V2 b) { - return { - a[0][0] * b[0] + a[0][1] * b[1], - a[1][0] * b[0] + a[1][1] * b[1], - }; - } - - //Matrix Transponieren - inline M2x2 transpose(M2x2 a) { - return { - a[0][0], a[1][0], - a[0][1], a[1][1] - }; - } - - //Einheitsmatrix (oder Identitätsmatrix) - constexpr inline M2x2 identityM2x2() { - return { - 1.0f, 0.0f, - 0.0f, 1.0f - }; - } - - - //----------------------------------------------- - //3x3 Matrix - union M3x3 { - struct { - float x1; float x2; float x3; - float y1; float y2; float y3; - float z1; float z2; float z3; - }; - - struct { - float E[3][3]; - }; - - struct { - V3 V[3]; - }; - - - V3& operator [](size_t index) { - assert(index < 3); - return V[index]; - } - - }; - - //Matrix negieren - inline M3x3 operator -(M3x3 a) { - return { - -a[0][0], -a[0][1], -a[0][1], - -a[1][0], -a[1][1], -a[1][2], - -a[2][0], -a[2][1], -a[2][2] - }; - } - - //Matrix Addition - inline M3x3 operator +(M3x3 a, M3x3 b) { - return { - a[0][0] + b[0][0], a[0][1] + b[0][1], a[0][2] + b[0][2], - a[1][0] + b[1][0], a[1][1] + b[1][1], a[1][2] + b[1][2], - a[2][0] + b[2][0], a[2][1] + b[2][1], a[2][2] + b[2][2] - }; - } - - //Matrix Subtraktion - inline M3x3 operator -(M3x3 a, M3x3 b) { - return { - a[0][0] - b[0][0], a[0][1] - b[0][1], a[0][2] - b[0][2], - a[1][0] - b[1][0], a[1][1] - b[1][1], a[1][2] - b[1][2], - a[2][0] - b[2][0], a[2][1] - b[2][1], a[2][2] - b[2][2] - }; - } - - //Matrix Skalarmultiplikation - inline M3x3 operator *(M3x3 a, float b) { - return { - a[0][0] * b, a[0][1] * b, a[0][2] * b, - a[1][0] * b, a[1][1] * b, a[1][2] * b, - a[2][0] * b, a[2][1] * b, a[2][2] * b - }; - } - - //Matrix Skalarmultiplikation - inline M3x3 operator *(float a, M3x3 b) { - return { - a * b[0][0], a * b[0][1], a * b[0][2], - a * b[1][0], a * b[1][1], a * b[1][2], - a * b[2][0], a * b[2][1], a * b[2][2] - }; - } - - //Matrix Multiplikation - inline M3x3 operator *(M3x3 a, M3x3 b) { - return { - a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0], a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1], a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2], - a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0], a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1], a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[0][2] * b[2][2], - a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0], a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1], a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[0][2] * b[2][2] - }; - } - - //Matrix * V2 - inline V2 operator *(M3x3 a, V2 b) { - return { - b.x * a[0][0] + b.y * a[0][1] + 1.0f * a[0][2], - b.x * a[1][0] + b.y * a[1][1] + 1.0f * a[1][2], - }; - } - - //Matrix * V3 - inline V3 operator *(M3x3 a, V3 b) { - return { - b.x * a[0][0] + b.y * a[0][1] + b.z * a[0][2], - b.x * a[1][0] + b.y * a[1][1] + b.z * a[1][2], - b.x * a[2][0] + b.y * a[2][1] + b.z * a[2][2] - }; - } - - - //Matrix transponieren - inline M3x3 transpose(M3x3 a) { - return { - a[0][0], a[1][0], a[2][0], - a[0][1], a[1][1], a[2][1], - a[0][2], a[1][2], a[2][2] - }; - } - - //Einheitsmatrix (oder Identitätsmatrix) - inline M3x3 identityM3x3() { - return { - 1.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 1.0f - }; - } - - - - //----------------------------------------------- - //m128i - struct m128i { - __m128i val; - }; - - inline __m128i operator &(m128i a, m128i b) { - return _mm_and_si128(a.val, b.val); - } - - inline __m128i operator |(m128i a, m128i b) { - return _mm_or_si128(a.val, b.val); - } - - inline __m128i operator >>(m128i a, int b) { - return _mm_srli_epi32(a.val, b); - } - - inline __m128i operator <<(m128i a, int b) { - return _mm_slli_epi32(a.val, b); - } - - - //----------------------------------------------- - //m128 - struct m128 { - __m128 val; - }; - - inline __m128 operator +(m128 a, m128 b) { - return _mm_mul_ps(a.val, b.val); - } - - inline __m128 operator *(m128 a, m128 b) { - return _mm_mul_ps(a.val, b.val); - } - - inline __m128 operator *(float a, m128 b) { - return _mm_mul_ps(_mm_set1_ps(a), b.val); - } - - inline __m128 square_root(__m128 a) { - return _mm_sqrt_ps(a); - } - - inline __m128 operator /(m128 a, m128 b) { - return _mm_div_ps(a.val, b.val); - } + template + constexpr inline T min(T a, T b) { + return a < b ? a : b; + } + + template + constexpr inline T max(T a, T b) { + return a > b ? a : b; + } + + template + constexpr inline T clamp(T min, T a, T max) { + return M::min(M::max(min, a), max); + } + + template + constexpr inline T clamp01(T a) { + return clamp((T)0, a, (T)1); + } + + inline float square_root(float a) { + return sqrtf(a); + } + + inline float square_root(double a) { + return sqrt(a); + } + + inline float reciprocal_square_root(float a) { + return 1.0f / square_root(a); + } + + inline double reciprocal_square_root(double a) { + return 1.0 / square_root(a); + } + + constexpr float lerp(float a, float b, float t) { + return (1.0f - t) * a + t * b; + } + + inline float ilerp(float a, float b, float v) { + return (v - a) / (b - a); + } + + inline float remap(float in_a, float in_b, float out_a, float out_b, float v) { + float t = ilerp(in_a, in_b, v); + return lerp(out_a, out_b, t); + } + + inline float radians(float degrees) { + return degrees * (M_PIf / 180.0f); + } + + + //----------------------------------------------- + //Vektorberechnung 2-dim + union V2 { + struct { + float x; + float y; + }; + + struct { + float u; + float v; + }; + + struct { + float width; + float height; + }; + + struct { + float E[2]; + }; + + float operator [](size_t index) { + assert(index < 2); + return E[index]; + } + }; + + //Negation von 2-dim Vektor + inline V2 operator -(V2 a) { + return { + -a.x, + -a.y + }; + } + + //Addition 2er 2-dim Vektoren + inline V2 operator +(V2 a, V2 b) { + return { + a.x + b.x, + a.y + b.y + }; + } + + //Vektor Addition + inline V2 operator +=(V2& a, V2 b) { + return a = a + b; + } + + //Subtraktion 2er 2-dim Vektoren + inline V2 operator -(V2 a, V2 b) { + return { + a.x - b.x, + a.y - b.y + }; + } + + //Vektor Subtraktion + inline V2 operator -=(V2& a, V2 b) { + return a = a - b; + } + + //Skalarmultiplikation -> erst Skalar, dann Vektor + inline V2 operator *(float a, V2 b) { + return { + a * b.x, + a * b.y + }; + } + + //Skalarmultiplikation -> erst Vektor, dann Skalar + inline V2 operator *(V2 a, float b) { + return { + a.x * b, + a.y * b + }; + } + + //Skalarmultiplikation -> mit V2 Pointer + inline V2 &operator *= (V2 &a, float b) { + a = a * b; + return a; + } + + //Division mit einem Skalar Oo -> Skalar geteilt durch Vektor + inline V2 operator /(float a, V2 b) { + return { + a / b.x, + a / b.y + }; + } + + //Division mit einem Skalar Oo -> Vektor geteilt durch Skalar + inline V2 operator /(V2 a, float b) { + return { + a.x / b, + a.y / b + }; + } + + //Division mit einem Skalar -> 2 Vektoren + inline V2 operator /(V2 a, V2 b) { + return { + a.x / b.x, + a.y / b.y + }; + } + + //Division mit einem Skalar -> mit V2 Pointer + inline V2 &operator /= (V2 &a, float b) { + a = a / b; + return a; + } + + //Skalarprodukt + inline float dot(V2 a, V2 b) { + return a.x * b.x + a.y * b.y; + } + + //Hadamard-Produkt + inline V2 hadamard(V2 a, V2 b) { + return { + a.x * b.x, + a.y * b.y + }; + } + + //Betrag des Vektors quadrieren + inline float length_squared(V2 a) { + return dot(a, a); + } + + //Betrag eines Vektors + inline float length(V2 a) { + return square_root(length_squared(a)); + } + + //Reziproke der Länge + inline float reciprocal_length(V2 a) { + return reciprocal_square_root(length_squared(a)); + } + + //Einheitsvektor + inline V2 normalize(V2 a) { + return a * reciprocal_length(a); + } + + //Vektor der 90 + inline V2 perp(V2 a) { + return { + -a.y, + a.x + }; + } + + //clamp für 2-dim Vektor + inline V2 clamp01(V2 a) { + return { + clamp01(a.x), + clamp01(a.y) + }; + } + + //Vektor mit den kleinsten Werten 2er Vektoren + inline V2 min(V2 a, V2 b) { + return { + min(a.x, b.x), + min(a.y, b.y), + }; + } + + //Vektor mit den groessten Werten 2er Vektoren + inline V2 max(V2 a, V2 b) { + return { + max(a.x, b.x), + max(a.y, b.y), + }; + } + + //kleinster Vektor Wert + inline float min(V2 a) { + return min(a.x, a.y); + } + + //groesster Vektor Wert + inline float max(V2 a) { + return max(a.x, a.y); + } + + //Lerp mit 2 Vektoren + inline V2 lerp(V2 a, V2 b, V2 t) { + return V2{ + lerp(a.x, b.x, t.x), + lerp(a.y, b.y, t.y), + }; + } + + // + inline V2 ilerp(V2 a, V2 b, V2 v) { + return (v - a) / (b - a); + } + + // + inline V2 remap(V2 in_a, V2 in_b, V2 out_a, V2 out_b, V2 v) { + V2 t = ilerp(in_a, in_b, v); + return lerp(out_a, out_b, t); + } + + //----------------------------------------------- + //Vektorberechnung 3-dim + union V3 { + struct { + float x; + float y; + float z; + }; + + //farbvektor + struct { + float r; + float g; + float b; + }; + + //texturvektor + struct { + float u; + float v; + float s; + }; + + //von V3 zu V2 ohne z + struct { + V2 xy; + float _z; + }; + + //von V3 zu V2 ohne x + struct { + float _x; + V2 yz; + }; + + struct { + float E[3]; + }; + + float operator [](size_t index) { + assert(index < 3); + return E[index]; + } + }; + + //Negation von 2-dim Vektor + inline V3 operator -(V3 a) { + return { + -a.x, + -a.y, + -a.z + }; + } + + //Addition 2er 2-dim Vektoren + inline V3 operator +(V3 a, V3 b) { + return { + a.x + b.x, + a.y + b.y, + a.z + b.z + }; + } + + //Subtraktion 2er 2-dim Vektoren + inline V3 operator -(V3 a, V3 b) { + return { + a.x - b.x, + a.y - b.y, + a.z - b.z + }; + } + + //Skalarmultiplikation -> erst Skalar, dann Vektor + inline V3 operator *(float a, V3 b) { + return { + a * b.x, + a * b.y, + a * b.z + }; + + } + + //Skalarmultiplikation -> erst Vektor, dann Skalar + inline V3 operator *(V3 a, float b) { + return { + a.x * b, + a.y * b, + a.z * b + }; + + } + + //Division mit nem Skalar Oo -> Skalar geteilt durch Vektor + inline V3 operator /(float a, V3 b) { + return { + a / b.x, + a / b.y, + a / b.z + }; + } + + //Division mit nem Skalar Oo -> Vektor geteilt durch Skalar + inline V3 operator /(V3 a, float b) { + return { + a.x / b, + a.y / b, + a.z / b + }; + } + + //Skalarprodukt + inline float dot(V3 a, V3 b) { + return a.x * b.x + a.y * b.y + a.z * b.z; + } + + //Hadamard-Produkt + inline V3 hadamard(V3 a, V3 b) { + return { + a.x * b.x, + a.y * b.y, + a.z * b.z + }; + } + + //Kreuzprodukt + inline V3 cross(V3 a, V3 b) { + return { + a.y * b.z - a.z * b.y, + a.z * b.x - a.x * b.z, + a.x * b.y - a.y * b.x + }; + } + + //Betrag des Vektors quadrieren + inline float length_squared(V3 a) { + return dot(a, a); + } + + //Betrag eines Vektors + inline float length(V3 a) { + return square_root(length_squared(a)); + } + + //Reziproke der Länge + inline float reciprocal_length(V3 a) { + return reciprocal_square_root(length_squared(a)); + } + + //Einheitsvektor + inline V3 normalize(V3 a) { + return a * reciprocal_length(a); + } + + union V4 { + struct { + float x; + float y; + float z; + float w; + }; + + //farbvektor + struct { + float r; + float g; + float b; + float a; + }; + + //texturvektor + struct { + float u; + float v; + float s; + float t; + }; + + //von V4 zu V2 ohne z + struct { + V2 xy; + V2 zw; + }; + + //V2 fuer Teiltexturenausgabe + struct { + V2 uv0; + V2 uv1; + }; + + //von V4 zu V2 ohne x + struct { + float _x; + V2 yz; + float _w; + }; + + struct { + float E[4]; + }; + + V4(V2 a, V2 b) { xy = a; zw = b; } + V4(float a, float b, float c, float d) { x = a; y = b; z = c; w = d; } + V4() {} + + float &operator [](size_t index) { + assert(index < 4); + return E[index]; + } + }; + + + //----------------------------------------------- + //2x2 Matrix + + //M2x2 m; + //m.E[0][1] + //m.V[1] + + //m[1][0] + union M2x2 { + struct { + float x1; float x2; + float y1; float y2; + }; + + struct { + float E[2][2]; + }; + + struct { + V2 V[2]; + }; + + V2 &operator [](size_t index) { + assert(index < 2); + return V[index]; + } + }; + + //Matrix negieren + inline M2x2 operator -(M2x2 a){ + return { + -a[0][0], -a[0][1], + -a[1][0], -a[1][1] + }; + } + + //Matrix Addition + inline M2x2 operator +(M2x2 a, M2x2 b) { + return { + a[0][0] + b[0][0], a[0][1] + b[0][1], + a[1][0] + b[1][0], a[1][1] + b[1][1] + }; + } + + //Matrix Subtraktion + inline M2x2 operator -(M2x2 a, M2x2 b) { + return { + a[0][0] - b[0][0], a[0][1] - b[0][1], + a[1][0] - b[1][0], a[1][1] - b[1][1] + }; + } + + //Matrix Skalarmultiplikation + inline M2x2 operator *(M2x2 a, float b) { + return { + a[0][0] * b, a[0][1] * b, + a[1][0] * b, a[1][1] * b + }; + } + + //Matrix Skalarmultiplikation + inline M2x2 operator *(float a, M2x2 b) { + return { + a * b[0][0], a * b[0][1], + a * b[1][0], a * b[1][1] + }; + } + + //Matrix Multiplikation + inline M2x2 operator *(M2x2 a, M2x2 b) { + return { + a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1], + a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1] + }; + } + + //Matrix * Vektor + inline V2 operator *(M2x2 a, V2 b) { + return { + a[0][0] * b[0] + a[0][1] * b[1], + a[1][0] * b[0] + a[1][1] * b[1], + }; + } + + //Matrix Transponieren + inline M2x2 transpose(M2x2 a) { + return { + a[0][0], a[1][0], + a[0][1], a[1][1] + }; + } + + //Einheitsmatrix (oder Identitätsmatrix) + constexpr inline M2x2 identityM2x2() { + return { + 1.0f, 0.0f, + 0.0f, 1.0f + }; + } + + + //----------------------------------------------- + //3x3 Matrix + union M3x3 { + struct { + float x1; float x2; float x3; + float y1; float y2; float y3; + float z1; float z2; float z3; + }; + + struct { + float E[3][3]; + }; + + struct { + V3 V[3]; + }; + + + V3& operator [](size_t index) { + assert(index < 3); + return V[index]; + } + + }; + + //Matrix negieren + inline M3x3 operator -(M3x3 a) { + return { + -a[0][0], -a[0][1], -a[0][1], + -a[1][0], -a[1][1], -a[1][2], + -a[2][0], -a[2][1], -a[2][2] + }; + } + + //Matrix Addition + inline M3x3 operator +(M3x3 a, M3x3 b) { + return { + a[0][0] + b[0][0], a[0][1] + b[0][1], a[0][2] + b[0][2], + a[1][0] + b[1][0], a[1][1] + b[1][1], a[1][2] + b[1][2], + a[2][0] + b[2][0], a[2][1] + b[2][1], a[2][2] + b[2][2] + }; + } + + //Matrix Subtraktion + inline M3x3 operator -(M3x3 a, M3x3 b) { + return { + a[0][0] - b[0][0], a[0][1] - b[0][1], a[0][2] - b[0][2], + a[1][0] - b[1][0], a[1][1] - b[1][1], a[1][2] - b[1][2], + a[2][0] - b[2][0], a[2][1] - b[2][1], a[2][2] - b[2][2] + }; + } + + //Matrix Skalarmultiplikation + inline M3x3 operator *(M3x3 a, float b) { + return { + a[0][0] * b, a[0][1] * b, a[0][2] * b, + a[1][0] * b, a[1][1] * b, a[1][2] * b, + a[2][0] * b, a[2][1] * b, a[2][2] * b + }; + } + + //Matrix Skalarmultiplikation + inline M3x3 operator *(float a, M3x3 b) { + return { + a * b[0][0], a * b[0][1], a * b[0][2], + a * b[1][0], a * b[1][1], a * b[1][2], + a * b[2][0], a * b[2][1], a * b[2][2] + }; + } + + //Matrix Multiplikation + inline M3x3 operator *(M3x3 a, M3x3 b) { + return { + a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0], a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1], a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2], + a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0], a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1], a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[0][2] * b[2][2], + a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0], a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1], a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[0][2] * b[2][2] + }; + } + + //Matrix * V2 + inline V2 operator *(M3x3 a, V2 b) { + return { + b.x * a[0][0] + b.y * a[0][1] + 1.0f * a[0][2], + b.x * a[1][0] + b.y * a[1][1] + 1.0f * a[1][2], + }; + } + + //Matrix * V3 + inline V3 operator *(M3x3 a, V3 b) { + return { + b.x * a[0][0] + b.y * a[0][1] + b.z * a[0][2], + b.x * a[1][0] + b.y * a[1][1] + b.z * a[1][2], + b.x * a[2][0] + b.y * a[2][1] + b.z * a[2][2] + }; + } + + + //Matrix transponieren + inline M3x3 transpose(M3x3 a) { + return { + a[0][0], a[1][0], a[2][0], + a[0][1], a[1][1], a[2][1], + a[0][2], a[1][2], a[2][2] + }; + } + + //Einheitsmatrix (oder Identitätsmatrix) + inline M3x3 identityM3x3() { + return { + 1.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 1.0f + }; + } + + + + //----------------------------------------------- + //m128i + struct m128i { + __m128i val; + }; + + inline __m128i operator &(m128i a, m128i b) { + return _mm_and_si128(a.val, b.val); + } + + inline __m128i operator |(m128i a, m128i b) { + return _mm_or_si128(a.val, b.val); + } + + inline __m128i operator >>(m128i a, int b) { + return _mm_srli_epi32(a.val, b); + } + + inline __m128i operator <<(m128i a, int b) { + return _mm_slli_epi32(a.val, b); + } + + + //----------------------------------------------- + //m128 + struct m128 { + __m128 val; + }; + + inline __m128 operator +(m128 a, m128 b) { + return _mm_mul_ps(a.val, b.val); + } + + inline __m128 operator *(m128 a, m128 b) { + return _mm_mul_ps(a.val, b.val); + } + + inline __m128 operator *(float a, m128 b) { + return _mm_mul_ps(_mm_set1_ps(a), b.val); + } + + inline __m128 square_root(__m128 a) { + return _mm_sqrt_ps(a); + } + + inline __m128 operator /(m128 a, m128 b) { + return _mm_div_ps(a.val, b.val); + } + + union M4x4 { + struct { + float x1; float x2; float x3; float x4; + float y1; float y2; float y3; float y4; + float z1; float z2; float z3; float z4; + float w1; float w2; float w3; float w4; + }; + + struct { + float E[4][4]; + }; + + struct { + V4 V[4]; + }; + + V4& operator [](size_t index) { + assert(index < 4); + return V[index]; + } + }; + + inline V4 operator*(M4x4 a, V4 b) { + return { + b.x * a[0][0] + b.y * a[0][1] + b.z * a[0][2] + b.w * a[0][3], + b.x * a[1][0] + b.y * a[1][1] + b.z * a[1][2] + b.w * a[1][3], + b.x * a[2][0] + b.y * a[2][1] + b.z * a[2][2] + b.w * a[2][3], + b.x * a[3][0] + b.y * a[3][1] + b.z * a[3][2] + b.w * a[3][3], + }; + } + + inline M4x4 operator*(M4x4 a, M4x4 b) { + return { + a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0] + a[0][3] * b[3][0], a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1] + a[0][3] * b[3][1], a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2] + a[0][3] * b[3][2], a[0][0] * b[0][3] + a[0][1] * b[1][3] + a[0][2] * b[2][3] + a[0][3] * b[3][3], + a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0] + a[1][3] * b[3][0], a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1] + a[1][3] * b[3][1], a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2] + a[1][3] * b[3][2], a[1][0] * b[0][3] + a[1][1] * b[1][3] + a[1][2] * b[2][3] + a[1][3] * b[3][3], + a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0] + a[2][3] * b[3][0], a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1] + a[2][3] * b[3][1], a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2] + a[2][3] * b[3][2], a[2][0] * b[0][3] + a[2][1] * b[1][3] + a[2][2] * b[2][3] + a[2][3] * b[3][3], + a[3][0] * b[0][0] + a[3][1] * b[1][0] + a[3][2] * b[2][0] + a[3][3] * b[3][0], a[3][0] * b[0][1] + a[3][1] * b[1][1] + a[3][2] * b[2][1] + a[3][3] * b[3][1], a[3][0] * b[0][2] + a[3][1] * b[1][2] + a[3][2] * b[2][2] + a[3][3] * b[3][2], a[3][0] * b[0][3] + a[3][1] * b[1][3] + a[3][2] * b[2][3] + a[3][3] * b[3][3], + }; + } + + inline M4x4 transpose(M4x4 a) { + return { + a[0][0], a[1][0], a[2][0], a[3][0], + a[0][1], a[1][1], a[2][1], a[3][1], + a[0][2], a[1][2], a[2][2], a[3][2], + a[0][3], a[1][3], a[2][3], a[3][3], + }; + } + + inline M4x4 projection(float fovy, float aspect, float near) { + float g = 1.0 / tanf(fovy * 0.5); + + return { + g / aspect, 0, 0, 0, + 0, g, 0, 0, + 0, 0, 0, near, + 0, 0, 1, 0, + }; + } + + inline M4x4 inverse_projection(float fovy, float aspect, float near) { + float g = 1.0 / tanf(fovy * 0.5); + + return { + aspect / g, 0, 0, 0, + 0, 1 / g, 0, 0, + 0, 0, 0, 1, + 0, 0, 1 / near, 0, + }; + } + }