diff --git a/CMakeLists.txt b/CMakeLists.txt index fc0593f..bb55a5b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,9 @@ set(APP_SOURCES source/core/rendering/screen.cpp source/core/rendering/text.cpp + # Core - SDL3 GPU shader backend + source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp + # Core - Input global (nueva) source/core/input/global_inputs.cpp @@ -48,9 +51,66 @@ set(APP_SOURCES find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3) message(STATUS "SDL3 encontrado: ${SDL3_INCLUDE_DIRS}") +# --- COMPILACIÓ SHADERS SPIR-V (Linux/Windows — macOS usa Metal) --- +if(NOT APPLE) + find_program(GLSLC_EXE NAMES glslc) + + set(SHADERS_DIR "${CMAKE_SOURCE_DIR}/data/shaders") + set(HEADERS_DIR "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu") + + set(ALL_SHADER_HEADERS + "${HEADERS_DIR}/postfx_vert_spv.h" + "${HEADERS_DIR}/postfx_frag_spv.h" + "${HEADERS_DIR}/upscale_frag_spv.h" + "${HEADERS_DIR}/downscale_frag_spv.h" + "${HEADERS_DIR}/crtpi_frag_spv.h" + ) + set(ALL_SHADER_SOURCES + "${SHADERS_DIR}/postfx.vert" + "${SHADERS_DIR}/postfx.frag" + "${SHADERS_DIR}/upscale.frag" + "${SHADERS_DIR}/downscale.frag" + "${SHADERS_DIR}/crtpi_frag.glsl" + ) + + if(GLSLC_EXE) + add_custom_command( + OUTPUT ${ALL_SHADER_HEADERS} + COMMAND ${CMAKE_COMMAND} + -D GLSLC=${GLSLC_EXE} + -D SHADERS_DIR=${SHADERS_DIR} + -D HEADERS_DIR=${HEADERS_DIR} + -P ${CMAKE_SOURCE_DIR}/tools/shaders/compile_spirv.cmake + DEPENDS ${ALL_SHADER_SOURCES} + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + COMMENT "Compilant shaders SPIR-V..." + ) + add_custom_target(shaders DEPENDS ${ALL_SHADER_HEADERS}) + message(STATUS "glslc trobat: shaders es compilaran automàticament") + else() + foreach(HDR ${ALL_SHADER_HEADERS}) + if(NOT EXISTS "${HDR}") + message(FATAL_ERROR + "glslc no trobat i header SPIR-V no existeix: ${HDR}\n" + " Instal·la glslc: sudo apt install glslang-tools (Linux)\n" + " choco install vulkan-sdk (Windows)" + ) + endif() + endforeach() + message(STATUS "glslc no trobat — usant headers SPIR-V precompilats") + endif() +else() + message(STATUS "macOS: shaders SPIR-V omesos (usa Metal)") +endif() + # --- EJECUTABLE --- add_executable(${PROJECT_NAME} ${APP_SOURCES}) +# Shaders han de compilar-se abans que l'executable (Linux/Windows amb glslc) +if(NOT APPLE AND GLSLC_EXE) + add_dependencies(${PROJECT_NAME} shaders) +endif() + # --- DIRECTORIOS DE INCLUSIÓN --- target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_SOURCE_DIR}/source" diff --git a/data/shaders/crtpi_frag.glsl b/data/shaders/crtpi_frag.glsl new file mode 100644 index 0000000..48f0fa3 --- /dev/null +++ b/data/shaders/crtpi_frag.glsl @@ -0,0 +1,152 @@ +#version 450 + +// Vulkan GLSL fragment shader — CRT-Pi PostFX +// Algoritmo de scanlines continuas con pesos gaussianos, bloom y máscara de fósforo. +// Basado en el shader CRT-Pi original (GLSL 3.3), portado a GLSL 4.50 con parámetros uniformes. +// +// Compile: glslc -fshader-stage=frag --target-env=vulkan1.0 crtpi_frag.glsl -o crtpi_frag.spv +// xxd -i crtpi_frag.spv > ../../source/core/rendering/sdl3gpu/crtpi_frag_spv.h + +layout(location = 0) in vec2 v_uv; +layout(location = 0) out vec4 out_color; + +layout(set = 2, binding = 0) uniform sampler2D Texture; + +layout(set = 3, binding = 0) uniform CrtPiBlock { + // vec4 #0 + float scanline_weight; // Ajuste gaussiano de scanlines (default 6.0) + float scanline_gap_brightness; // Brillo mínimo entre scanlines (default 0.12) + float bloom_factor; // Factor de brillo en zonas iluminadas (default 3.5) + float input_gamma; // Gamma de entrada — linealización (default 2.4) + // vec4 #1 + float output_gamma; // Gamma de salida — codificación (default 2.2) + float mask_brightness; // Brillo sub-píxeles de la máscara (default 0.80) + float curvature_x; // Distorsión barrel eje X (default 0.05) + float curvature_y; // Distorsión barrel eje Y (default 0.10) + // vec4 #2 + int mask_type; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo + int enable_scanlines; // 0 = off, 1 = on + int enable_multisample; // 0 = off, 1 = on (antialiasing analítico de scanlines) + int enable_gamma; // 0 = off, 1 = on + // vec4 #3 + int enable_curvature; // 0 = off, 1 = on + int enable_sharper; // 0 = off, 1 = on + float texture_width; // Ancho del canvas lógico en píxeles + float texture_height; // Alto del canvas lógico en píxeles +} u; + +// Distorsión barrel CRT +vec2 distort(vec2 coord, vec2 screen_scale) { + vec2 curvature = vec2(u.curvature_x, u.curvature_y); + vec2 barrel_scale = 1.0 - (0.23 * curvature); + coord *= screen_scale; + coord -= vec2(0.5); + float rsq = coord.x * coord.x + coord.y * coord.y; + coord += coord * (curvature * rsq); + coord *= barrel_scale; + if (abs(coord.x) >= 0.5 || abs(coord.y) >= 0.5) { + return vec2(-1.0); // fuera de pantalla + } + coord += vec2(0.5); + coord /= screen_scale; + return coord; +} + +float calcScanLineWeight(float dist) { + return max(1.0 - dist * dist * u.scanline_weight, u.scanline_gap_brightness); +} + +float calcScanLine(float dy, float filter_width) { + float weight = calcScanLineWeight(dy); + if (u.enable_multisample != 0) { + weight += calcScanLineWeight(dy - filter_width); + weight += calcScanLineWeight(dy + filter_width); + weight *= 0.3333333; + } + return weight; +} + +void main() { + vec2 tex_size = vec2(u.texture_width, u.texture_height); + + // filterWidth: equivalente al original (768.0 / TextureSize.y) / 3.0 + float filter_width = (768.0 / u.texture_height) / 3.0; + + vec2 texcoord = v_uv; + + // Curvatura barrel opcional + if (u.enable_curvature != 0) { + texcoord = distort(texcoord, vec2(1.0, 1.0)); + if (texcoord.x < 0.0) { + out_color = vec4(0.0, 0.0, 0.0, 1.0); + return; + } + } + + vec2 texcoord_in_pixels = texcoord * tex_size; + vec2 tc; + float scan_line_weight; + + if (u.enable_sharper != 0) { + // Modo SHARPER: filtrado bicúbico-like con subpixel sharpen + vec2 temp_coord = floor(texcoord_in_pixels) + 0.5; + tc = temp_coord / tex_size; + vec2 deltas = texcoord_in_pixels - temp_coord; + scan_line_weight = calcScanLine(deltas.y, filter_width); + vec2 signs = sign(deltas); + deltas.x *= 2.0; + deltas = deltas * deltas; + deltas.y = deltas.y * deltas.y; + deltas.x *= 0.5; + deltas.y *= 8.0; + deltas /= tex_size; + deltas *= signs; + tc = tc + deltas; + } else { + // Modo estándar + float temp_y = floor(texcoord_in_pixels.y) + 0.5; + float y_coord = temp_y / tex_size.y; + float dy = texcoord_in_pixels.y - temp_y; + scan_line_weight = calcScanLine(dy, filter_width); + float sign_y = sign(dy); + dy = dy * dy; + dy = dy * dy; + dy *= 8.0; + dy /= tex_size.y; + dy *= sign_y; + tc = vec2(texcoord.x, y_coord + dy); + } + + vec3 colour = texture(Texture, tc).rgb; + + if (u.enable_scanlines != 0) { + if (u.enable_gamma != 0) { + colour = pow(colour, vec3(u.input_gamma)); + } + colour *= scan_line_weight * u.bloom_factor; + if (u.enable_gamma != 0) { + colour = pow(colour, vec3(1.0 / u.output_gamma)); + } + } + + // Máscara de fósforo + if (u.mask_type == 1) { + float which_mask = fract(gl_FragCoord.x * 0.5); + vec3 mask = (which_mask < 0.5) + ? vec3(u.mask_brightness, 1.0, u.mask_brightness) + : vec3(1.0, u.mask_brightness, 1.0); + colour *= mask; + } else if (u.mask_type == 2) { + float which_mask = fract(gl_FragCoord.x * 0.3333333); + vec3 mask = vec3(u.mask_brightness); + if (which_mask < 0.3333333) + mask.x = 1.0; + else if (which_mask < 0.6666666) + mask.y = 1.0; + else + mask.z = 1.0; + colour *= mask; + } + + out_color = vec4(colour, 1.0); +} diff --git a/data/shaders/downscale.frag b/data/shaders/downscale.frag new file mode 100644 index 0000000..fe5b9b5 --- /dev/null +++ b/data/shaders/downscale.frag @@ -0,0 +1,48 @@ +#version 450 +layout(location = 0) in vec2 v_uv; +layout(location = 0) out vec4 out_color; + +layout(set = 2, binding = 0) uniform sampler2D source; + +layout(set = 3, binding = 0) uniform DownscaleUniforms { + int algorithm; // 0 = Lanczos2 (ventana 2, ±2 taps), 1 = Lanczos3 (ventana 3, ±3 taps) + float pad0; + float pad1; + float pad2; +} u; + +// Kernel Lanczos normalizado: sinc(t) * sinc(t/a) para |t| < a, 0 fuera. +float lanczos(float t, float a) { + t = abs(t); + if (t < 0.0001) { return 1.0; } + if (t >= a) { return 0.0; } + const float PI = 3.14159265358979; + float pt = PI * t; + return (a * sin(pt) * sin(pt / a)) / (pt * pt); +} + +void main() { + vec2 src_size = vec2(textureSize(source, 0)); + // Posición en coordenadas de texel (centros de texel en N+0.5) + vec2 p = v_uv * src_size; + vec2 p_floor = floor(p); + + float a = (u.algorithm == 0) ? 2.0 : 3.0; + int win = int(a); + + vec4 color = vec4(0.0); + float weight_sum = 0.0; + + for (int j = -win; j <= win; j++) { + for (int i = -win; i <= win; i++) { + // Centro del texel (i,j) relativo a p_floor + vec2 tap_center = p_floor + vec2(float(i), float(j)) + 0.5; + vec2 offset = tap_center - p; + float w = lanczos(offset.x, a) * lanczos(offset.y, a); + color += texture(source, tap_center / src_size) * w; + weight_sum += w; + } + } + + out_color = (weight_sum > 0.0) ? (color / weight_sum) : vec4(0.0, 0.0, 0.0, 1.0); +} diff --git a/data/shaders/postfx.frag b/data/shaders/postfx.frag new file mode 100644 index 0000000..2a9788d --- /dev/null +++ b/data/shaders/postfx.frag @@ -0,0 +1,149 @@ +#version 450 + +// Vulkan GLSL fragment shader — PostFX effects +// Used for SDL3 GPU API (SPIR-V path, Win/Linux). +// Compile: glslc postfx.frag -o postfx.frag.spv +// xxd -i postfx.frag.spv > ../../source/core/rendering/sdl3gpu/postfx_frag_spv.h +// +// PostFXUniforms must match exactly the C++ struct in sdl3gpu_shader.hpp +// (8 floats, 32 bytes, std140/scalar layout). + +layout(location = 0) in vec2 v_uv; +layout(location = 0) out vec4 out_color; + +layout(set = 2, binding = 0) uniform sampler2D scene; + +layout(set = 3, binding = 0) uniform PostFXUniforms { + float vignette_strength; + float chroma_strength; + float scanline_strength; + float screen_height; + float mask_strength; + float gamma_strength; + float curvature; + float bleeding; + float pixel_scale; // physical pixels per logical pixel (vh / tex_height_) + float time; // seconds since SDL init + float oversample; // supersampling factor (1.0 = off, 3.0 = 3×SS) + float flicker; // 0 = off, 1 = phosphor flicker ~50 Hz — 48 bytes total (3 × 16) +} u; + +// YCbCr helpers for NTSC bleeding +vec3 rgb_to_ycc(vec3 rgb) { + return vec3( + 0.299*rgb.r + 0.587*rgb.g + 0.114*rgb.b, + -0.169*rgb.r - 0.331*rgb.g + 0.500*rgb.b + 0.5, + 0.500*rgb.r - 0.419*rgb.g - 0.081*rgb.b + 0.5 + ); +} +vec3 ycc_to_rgb(vec3 ycc) { + float y = ycc.x; + float cb = ycc.y - 0.5; + float cr = ycc.z - 0.5; + return clamp(vec3( + y + 1.402*cr, + y - 0.344*cb - 0.714*cr, + y + 1.772*cb + ), 0.0, 1.0); +} + +void main() { + vec2 uv = v_uv; + + // Curvatura barrel CRT + if (u.curvature > 0.0) { + vec2 c = uv - 0.5; + float rsq = dot(c, c); + vec2 dist = vec2(0.05, 0.1) * u.curvature; + vec2 barrelScale = vec2(1.0) - 0.23 * dist; + c += c * (dist * rsq); + c *= barrelScale; + if (abs(c.x) >= 0.5 || abs(c.y) >= 0.5) { + out_color = vec4(0.0, 0.0, 0.0, 1.0); + return; + } + uv = c + 0.5; + } + + // Muestra base + vec3 base = texture(scene, uv).rgb; + + // Sangrado NTSC — difuminado horizontal de crominancia. + // step = 1 pixel lógico de juego en UV (corrige SS: textureSize.x = game_w * oversample). + vec3 colour; + if (u.bleeding > 0.0) { + float tw = float(textureSize(scene, 0).x); + float step = u.oversample / tw; // 1 pixel lógico en UV + vec3 ycc = rgb_to_ycc(base); + vec3 ycc_l2 = rgb_to_ycc(texture(scene, uv - vec2(2.0*step, 0.0)).rgb); + vec3 ycc_l1 = rgb_to_ycc(texture(scene, uv - vec2(1.0*step, 0.0)).rgb); + vec3 ycc_r1 = rgb_to_ycc(texture(scene, uv + vec2(1.0*step, 0.0)).rgb); + vec3 ycc_r2 = rgb_to_ycc(texture(scene, uv + vec2(2.0*step, 0.0)).rgb); + ycc.yz = (ycc_l2.yz + ycc_l1.yz*2.0 + ycc.yz*2.0 + ycc_r1.yz*2.0 + ycc_r2.yz) / 8.0; + colour = mix(base, ycc_to_rgb(ycc), u.bleeding); + } else { + colour = base; + } + + // Aberración cromática (drift animado con time para efecto NTSC real) + float ca = u.chroma_strength * 0.005 * (1.0 + 0.15 * sin(u.time * 7.3)); + colour.r = texture(scene, uv + vec2(ca, 0.0)).r; + colour.b = texture(scene, uv - vec2(ca, 0.0)).b; + + // Corrección gamma (linealizar antes de scanlines, codificar después) + if (u.gamma_strength > 0.0) { + vec3 lin = pow(colour, vec3(2.4)); + colour = mix(colour, lin, u.gamma_strength); + } + + // Scanlines — proporción 2/3 brillantes + 1/3 oscuras por fila lógica. + // Casos especiales: 1 subfila → sin efecto; 2 subfilas → 1+1 (50/50). + // Constantes ajustables: + const float SCAN_DARK_RATIO = 0.333; // fracción de subfilas oscuras (ps >= 3) + const float SCAN_DARK_FLOOR = 0.42; // multiplicador de brillo de subfilas oscuras + if (u.scanline_strength > 0.0) { + float ps = max(1.0, round(u.pixel_scale)); + float frac_in_row = fract(uv.y * u.screen_height); + float row_pos = floor(frac_in_row * ps); + // bright_rows: cuántas subfilas son brillantes + // ps==1 → ps (todo brillante → is_dark nunca se activa) + // ps==2 → 1 brillante + 1 oscura + // ps>=3 → floor(ps * (1 - DARK_RATIO)) brillantes + float bright_rows = (ps < 2.0) ? ps : ((ps < 3.0) ? 1.0 : floor(ps * (1.0 - SCAN_DARK_RATIO))); + float is_dark = step(bright_rows, row_pos); + float scan = mix(1.0, SCAN_DARK_FLOOR, is_dark); + colour *= mix(1.0, scan, u.scanline_strength); + } + + if (u.gamma_strength > 0.0) { + vec3 enc = pow(colour, vec3(1.0 / 2.2)); + colour = mix(colour, enc, u.gamma_strength); + } + + // Viñeta + vec2 d = uv - 0.5; + float vignette = 1.0 - dot(d, d) * u.vignette_strength; + colour *= clamp(vignette, 0.0, 1.0); + + // Máscara de fósforo RGB — después de scanlines (orden original): + // filas brillantes saturadas → máscara invisible, filas oscuras → RGB visible. + if (u.mask_strength > 0.0) { + float whichMask = fract(gl_FragCoord.x * 0.3333333); + vec3 mask = vec3(0.80); + if (whichMask < 0.3333333) + mask.x = 1.0; + else if (whichMask < 0.6666666) + mask.y = 1.0; + else + mask.z = 1.0; + colour = mix(colour, colour * mask, u.mask_strength); + } + + // Parpadeo de fósforo CRT (~50 Hz) + if (u.flicker > 0.0) { + float flicker_wave = sin(u.time * 100.0) * 0.5 + 0.5; + colour *= 1.0 - u.flicker * 0.04 * flicker_wave; + } + + out_color = vec4(colour, 1.0); +} diff --git a/data/shaders/postfx.vert b/data/shaders/postfx.vert new file mode 100644 index 0000000..eab75cf --- /dev/null +++ b/data/shaders/postfx.vert @@ -0,0 +1,24 @@ +#version 450 + +// Vulkan GLSL vertex shader — postfx full-screen triangle +// Used for SDL3 GPU API (SPIR-V path, Win/Linux). +// Compile: glslc postfx.vert -o postfx.vert.spv +// xxd -i postfx.vert.spv > ../../source/core/rendering/sdl3gpu/postfx_vert_spv.h + +layout(location = 0) out vec2 v_uv; + +void main() { + // Full-screen triangle (no vertex buffer needed) + const vec2 positions[3] = vec2[3]( + vec2(-1.0, -1.0), + vec2( 3.0, -1.0), + vec2(-1.0, 3.0) + ); + const vec2 uvs[3] = vec2[3]( + vec2(0.0, 1.0), + vec2(2.0, 1.0), + vec2(0.0,-1.0) + ); + gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0); + v_uv = uvs[gl_VertexIndex]; +} diff --git a/data/shaders/upscale.frag b/data/shaders/upscale.frag new file mode 100644 index 0000000..fb9200d --- /dev/null +++ b/data/shaders/upscale.frag @@ -0,0 +1,15 @@ +#version 450 + +// Vulkan GLSL fragment shader — Nearest-neighbour upscale pass +// Used as the first render pass when supersampling is active. +// Compile: glslc upscale.frag -o upscale.frag.spv +// xxd -i upscale.frag.spv > ../../source/core/rendering/sdl3gpu/upscale_frag_spv.h + +layout(location = 0) in vec2 v_uv; +layout(location = 0) out vec4 out_color; + +layout(set = 2, binding = 0) uniform sampler2D scene; + +void main() { + out_color = texture(scene, v_uv); +} diff --git a/source/core/input/global_inputs.cpp b/source/core/input/global_inputs.cpp index 38a8f6b..84bc520 100644 --- a/source/core/input/global_inputs.cpp +++ b/source/core/input/global_inputs.cpp @@ -10,46 +10,93 @@ namespace GlobalInputs { - static bool dec_zoom_was_pressed = false; - static bool inc_zoom_was_pressed = false; - static bool fullscreen_was_pressed = false; + static bool dec_zoom_prev = false; + static bool inc_zoom_prev = false; + static bool fullscreen_prev = false; + static bool shader_prev = false; + static bool aspect_prev = false; + static bool ss_prev = false; + static bool next_shader_prev = false; + static bool next_preset_prev = false; auto handle() -> bool { bool consumed = false; - // Decrement zoom + // F1 — Reduir zoom bool dec_zoom = JI_KeyPressed(Options::keys_gui.dec_zoom); - if (dec_zoom && !dec_zoom_was_pressed) { + if (dec_zoom && !dec_zoom_prev) { Screen::get()->decZoom(); char msg[32]; snprintf(msg, sizeof(msg), "ZOOM %dx", Screen::get()->getZoom()); Overlay::showNotification(msg); - consumed = true; } - if (dec_zoom) consumed = true; // Mentres estiga polsada, consumir-la - dec_zoom_was_pressed = dec_zoom; + if (dec_zoom) consumed = true; + dec_zoom_prev = dec_zoom; - // Increment zoom + // F2 — Augmentar zoom bool inc_zoom = JI_KeyPressed(Options::keys_gui.inc_zoom); - if (inc_zoom && !inc_zoom_was_pressed) { + if (inc_zoom && !inc_zoom_prev) { Screen::get()->incZoom(); char msg[32]; snprintf(msg, sizeof(msg), "ZOOM %dx", Screen::get()->getZoom()); Overlay::showNotification(msg); - consumed = true; } if (inc_zoom) consumed = true; - inc_zoom_was_pressed = inc_zoom; + inc_zoom_prev = inc_zoom; - // Toggle fullscreen + // F3 — Toggle pantalla completa bool fullscreen = JI_KeyPressed(Options::keys_gui.fullscreen); - if (fullscreen && !fullscreen_was_pressed) { + if (fullscreen && !fullscreen_prev) { Screen::get()->toggleFullscreen(); - Overlay::showNotification(Screen::get()->isFullscreen() ? "FULLSCREEN" : "WINDOWED"); - consumed = true; + Overlay::showNotification(Screen::get()->isFullscreen() ? "PANTALLA COMPLETA" : "FINESTRA"); } if (fullscreen) consumed = true; - fullscreen_was_pressed = fullscreen; + fullscreen_prev = fullscreen; + + // F4 — Toggle shaders + bool shader = JI_KeyPressed(Options::keys_gui.toggle_shader); + if (shader && !shader_prev) { + Screen::get()->toggleShaders(); + Overlay::showNotification(Options::video.shader_enabled ? "SHADER ON" : "SHADER OFF"); + } + if (shader) consumed = true; + shader_prev = shader; + + // F5 — Toggle aspect ratio 4:3 + bool aspect = JI_KeyPressed(Options::keys_gui.toggle_aspect_ratio); + if (aspect && !aspect_prev) { + Screen::get()->toggleAspectRatio(); + Overlay::showNotification(Options::video.aspect_ratio_4_3 ? "4:3 CRT" : "PIXELS QUADRATS"); + } + if (aspect) consumed = true; + aspect_prev = aspect; + + // F6 — Toggle supersampling + bool ss = JI_KeyPressed(Options::keys_gui.toggle_supersampling); + if (ss && !ss_prev) { + Screen::get()->toggleSupersampling(); + Overlay::showNotification(Options::video.supersampling ? "SUPERSAMPLING ON" : "SUPERSAMPLING OFF"); + } + if (ss) consumed = true; + ss_prev = ss; + + // F7 — Canviar shader (PostFX ↔ CrtPi) + bool next_shader = JI_KeyPressed(Options::keys_gui.next_shader); + if (next_shader && !next_shader_prev) { + Screen::get()->nextShaderPreset(); + Overlay::showNotification(Screen::get()->isHardwareAccelerated() ? "POSTFX / CRT-PI" : "SENSE GPU"); + } + if (next_shader) consumed = true; + next_shader_prev = next_shader; + + // F8 — Pròxim preset del shader actiu + bool next_preset = JI_KeyPressed(Options::keys_gui.next_shader_preset); + if (next_preset && !next_preset_prev) { + // TODO: ciclar presets quan estiguen implementats (YAML) + Overlay::showNotification("PRESET: DEFAULT"); + } + if (next_preset) consumed = true; + next_preset_prev = next_preset; return consumed; } diff --git a/source/core/jail/jinput.cpp b/source/core/jail/jinput.cpp index 6bc87a3..6cd07d8 100644 --- a/source/core/jail/jinput.cpp +++ b/source/core/jail/jinput.cpp @@ -16,7 +16,12 @@ int waitTime = 0; static bool isGuiKey(SDL_Scancode sc) { return sc == Options::keys_gui.dec_zoom || sc == Options::keys_gui.inc_zoom || - sc == Options::keys_gui.fullscreen; + sc == Options::keys_gui.fullscreen || + sc == Options::keys_gui.toggle_shader || + sc == Options::keys_gui.toggle_aspect_ratio || + sc == Options::keys_gui.toggle_supersampling || + sc == Options::keys_gui.next_shader || + sc == Options::keys_gui.next_shader_preset; } void JI_DisableKeyboard(Uint32 time) { diff --git a/source/core/rendering/screen.cpp b/source/core/rendering/screen.cpp index b9b42bf..6806ede 100644 --- a/source/core/rendering/screen.cpp +++ b/source/core/rendering/screen.cpp @@ -3,6 +3,7 @@ #include #include "core/rendering/overlay.hpp" +#include "core/rendering/sdl3gpu/sdl3gpu_shader.hpp" #include "game/defines.hpp" #include "game/options.hpp" @@ -32,7 +33,7 @@ Screen::Screen() { if (zoom_ > max_zoom_) zoom_ = max_zoom_; int w = GAME_WIDTH * zoom_; - int h = GAME_HEIGHT * zoom_; + int h = Options::video.aspect_ratio_4_3 ? static_cast(GAME_HEIGHT * 1.2F) * zoom_ : GAME_HEIGHT * zoom_; window_ = SDL_CreateWindow(Texts::WINDOW_TITLE, w, h, fullscreen_ ? SDL_WINDOW_FULLSCREEN : 0); renderer_ = SDL_CreateRenderer(window_, nullptr); @@ -41,6 +42,9 @@ Screen::Screen() { texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_STREAMING, GAME_WIDTH, GAME_HEIGHT); SDL_SetTextureScaleMode(texture_, SDL_SCALEMODE_NEAREST); + // Inicialitza backend GPU si l'acceleració està activada + initShaders(); + std::cout << "Screen initialized: " << w << "x" << h << " (zoom " << zoom_ << ", max " << max_zoom_ << ")\n"; } @@ -49,17 +53,74 @@ Screen::~Screen() { Options::window.zoom = zoom_; Options::window.fullscreen = fullscreen_; + // Destrueix el backend GPU + if (shader_backend_) { + auto* gpu = dynamic_cast(shader_backend_.get()); + if (gpu) gpu->destroy(); + shader_backend_.reset(); + } + if (texture_) SDL_DestroyTexture(texture_); if (renderer_) SDL_DestroyRenderer(renderer_); if (window_) SDL_DestroyWindow(window_); } +void Screen::initShaders() { + if (!Options::video.gpu_acceleration) return; + + shader_backend_ = std::make_unique(); + + const std::string FALLBACK_DRIVER = "none"; + shader_backend_->setPreferredDriver( + Options::video.gpu_acceleration ? "" : FALLBACK_DRIVER); + + // init() rep la finestra i la textura (la textura s'usa com a referència, el GPU fa uploadPixels) + if (!shader_backend_->init(window_, texture_, "", "")) { + std::cerr << "GPU shader backend initialization failed, using SDL_Renderer fallback\n"; + shader_backend_.reset(); + return; + } + + auto* gpu = dynamic_cast(shader_backend_.get()); + if (gpu) { + std::cout << "GPU driver: " << gpu->getDriverName() << '\n'; + } + + // Aplica opcions de vídeo + shader_backend_->setScaleMode(Options::video.integer_scale); + shader_backend_->setStretch4_3(Options::video.aspect_ratio_4_3); + shader_backend_->setLinearUpscale(Options::video.linear_upscale); + shader_backend_->setDownscaleAlgo(Options::video.downscale_algo); + + if (Options::video.supersampling) { + shader_backend_->setOversample(3); + } + + // Aplica presets per defecte (de moment hardcoded, futur: YAML) + applyCurrentPostFXPreset(); + applyCurrentCrtPiPreset(); +} + void Screen::present(Uint32* pixel_data) { Overlay::render(pixel_data); - SDL_UpdateTexture(texture_, nullptr, pixel_data, GAME_WIDTH * sizeof(Uint32)); - SDL_RenderClear(renderer_); - SDL_RenderTexture(renderer_, texture_, nullptr, nullptr); - SDL_RenderPresent(renderer_); + + if (shader_backend_ && shader_backend_->isHardwareAccelerated() && Options::video.shader_enabled) { + // Path GPU: puja els píxels i renderitza amb shaders + shader_backend_->uploadPixels(pixel_data, GAME_WIDTH, GAME_HEIGHT); + shader_backend_->render(); + } else if (shader_backend_ && shader_backend_->isHardwareAccelerated()) { + // GPU activa però shaders desactivats: renderitza net (sense efectes) + Rendering::PostFXParams clean{}; + shader_backend_->setPostFXParams(clean); + shader_backend_->uploadPixels(pixel_data, GAME_WIDTH, GAME_HEIGHT); + shader_backend_->render(); + } else { + // Fallback SDL_Renderer + SDL_UpdateTexture(texture_, nullptr, pixel_data, GAME_WIDTH * sizeof(Uint32)); + SDL_RenderClear(renderer_); + SDL_RenderTexture(renderer_, texture_, nullptr, nullptr); + SDL_RenderPresent(renderer_); + } } void Screen::toggleFullscreen() { @@ -68,7 +129,6 @@ void Screen::toggleFullscreen() { if (!fullscreen_) { adjustWindowSize(); } - std::cout << (fullscreen_ ? "Fullscreen ON\n" : "Fullscreen OFF\n"); } void Screen::incZoom() { @@ -89,9 +149,85 @@ void Screen::setZoom(int zoom) { adjustWindowSize(); } +void Screen::toggleShaders() { + Options::video.shader_enabled = !Options::video.shader_enabled; + if (Options::video.shader_enabled) { + applyCurrentPostFXPreset(); + } +} + +void Screen::toggleSupersampling() { + if (!shader_backend_ || !shader_backend_->isHardwareAccelerated()) return; + Options::video.supersampling = !Options::video.supersampling; + shader_backend_->setOversample(Options::video.supersampling ? 3 : 1); +} + +void Screen::toggleAspectRatio() { + Options::video.aspect_ratio_4_3 = !Options::video.aspect_ratio_4_3; + if (shader_backend_) { + shader_backend_->setStretch4_3(Options::video.aspect_ratio_4_3); + } + if (!fullscreen_) { + adjustWindowSize(); + } +} + +void Screen::toggleIntegerScale() { + Options::video.integer_scale = !Options::video.integer_scale; + if (shader_backend_) { + shader_backend_->setScaleMode(Options::video.integer_scale); + } +} + +void Screen::nextShaderPreset() { + if (!shader_backend_ || !shader_backend_->isHardwareAccelerated()) return; + + // Cicla entre PostFX i CrtPi + if (shader_backend_->getActiveShader() == Rendering::ShaderType::POSTFX) { + shader_backend_->setActiveShader(Rendering::ShaderType::CRTPI); + applyCurrentCrtPiPreset(); + } else { + shader_backend_->setActiveShader(Rendering::ShaderType::POSTFX); + applyCurrentPostFXPreset(); + } +} + +void Screen::setActiveShader(Rendering::ShaderType type) { + if (shader_backend_) { + shader_backend_->setActiveShader(type); + } +} + +void Screen::applyCurrentPostFXPreset() { + if (!shader_backend_) return; + // Preset per defecte "CRT" — futur: carregar des de YAML + Rendering::PostFXParams p; + p.vignette = 0.4F; + p.scanlines = 0.5F; + p.chroma = 0.1F; + p.mask = 0.0F; + p.gamma = 0.0F; + p.curvature = 0.0F; + p.bleeding = 0.0F; + p.flicker = 0.0F; + shader_backend_->setPostFXParams(p); +} + +void Screen::applyCurrentCrtPiPreset() { + if (!shader_backend_) return; + // Preset per defecte — futur: carregar des de YAML + Rendering::CrtPiParams p; + shader_backend_->setCrtPiParams(p); +} + +auto Screen::isHardwareAccelerated() const -> bool { + return shader_backend_ && shader_backend_->isHardwareAccelerated(); +} + void Screen::adjustWindowSize() { int w = GAME_WIDTH * zoom_; - int h = GAME_HEIGHT * zoom_; + // Si 4:3 actiu, l'alçada visual és 240 per zoom (200 * 1.2) + int h = Options::video.aspect_ratio_4_3 ? static_cast(GAME_HEIGHT * 1.2F) * zoom_ : GAME_HEIGHT * zoom_; SDL_SetWindowSize(window_, w, h); SDL_SetWindowPosition(window_, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); } diff --git a/source/core/rendering/screen.hpp b/source/core/rendering/screen.hpp index 39b57d2..9186e8e 100644 --- a/source/core/rendering/screen.hpp +++ b/source/core/rendering/screen.hpp @@ -3,6 +3,9 @@ #include #include +#include + +#include "core/rendering/shader_backend.hpp" class Screen { public: @@ -19,9 +22,20 @@ class Screen { void decZoom(); void setZoom(int zoom); + // Shaders i vídeo + void toggleShaders(); + void toggleSupersampling(); + void toggleAspectRatio(); + void toggleIntegerScale(); + void nextShaderPreset(); // Futur: ciclar presets + void setActiveShader(Rendering::ShaderType type); + void applyCurrentPostFXPreset(); + void applyCurrentCrtPiPreset(); + // Getters [[nodiscard]] auto isFullscreen() const -> bool { return fullscreen_; } [[nodiscard]] auto getZoom() const -> int { return zoom_; } + [[nodiscard]] auto isHardwareAccelerated() const -> bool; [[nodiscard]] auto getWindow() -> SDL_Window* { return window_; } [[nodiscard]] auto getRenderer() -> SDL_Renderer* { return renderer_; } @@ -31,12 +45,16 @@ class Screen { void adjustWindowSize(); void calculateMaxZoom(); + void initShaders(); static Screen* instance_; SDL_Window* window_{nullptr}; SDL_Renderer* renderer_{nullptr}; - SDL_Texture* texture_{nullptr}; // 320x200 streaming, ARGB8888 + SDL_Texture* texture_{nullptr}; // 320x200 streaming, ABGR8888 (fallback SDL_Renderer) + + // Backend GPU (nullptr si no disponible o desactivat) + std::unique_ptr shader_backend_; int zoom_{3}; int max_zoom_{6}; diff --git a/source/core/rendering/sdl3gpu/crtpi_frag_spv.h b/source/core/rendering/sdl3gpu/crtpi_frag_spv.h new file mode 100644 index 0000000..e3c1757 --- /dev/null +++ b/source/core/rendering/sdl3gpu/crtpi_frag_spv.h @@ -0,0 +1,10362 @@ +#pragma once +#include +#include +static const uint8_t kcrtpi_frag_spv[] = { + 0x03, + 0x02, + 0x23, + 0x07, + 0x00, + 0x00, + 0x01, + 0x00, + 0x0b, + 0x00, + 0x0d, + 0x00, + 0xa2, + 0x01, + 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, + 0x08, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x10, + 0x00, + 0x03, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x01, + 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, + 0x04, + 0x00, + 0x08, + 0x00, + 0x47, + 0x4c, + 0x5f, + 0x47, + 0x4f, + 0x4f, + 0x47, + 0x4c, + 0x45, + 0x5f, + 0x69, + 0x6e, + 0x63, + 0x6c, + 0x75, + 0x64, + 0x65, + 0x5f, + 0x64, + 0x69, + 0x72, + 0x65, + 0x63, + 0x74, + 0x69, + 0x76, + 0x65, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x64, + 0x69, + 0x73, + 0x74, + 0x6f, + 0x72, + 0x74, + 0x28, + 0x76, + 0x66, + 0x32, + 0x3b, + 0x76, + 0x66, + 0x32, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x63, + 0x6f, + 0x6f, + 0x72, + 0x64, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x72, + 0x65, + 0x65, + 0x6e, + 0x5f, + 0x73, + 0x63, + 0x61, + 0x6c, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x08, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x63, + 0x61, + 0x6c, + 0x63, + 0x53, + 0x63, + 0x61, + 0x6e, + 0x4c, + 0x69, + 0x6e, + 0x65, + 0x57, + 0x65, + 0x69, + 0x67, + 0x68, + 0x74, + 0x28, + 0x66, + 0x31, + 0x3b, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x64, + 0x69, + 0x73, + 0x74, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x63, + 0x61, + 0x6c, + 0x63, + 0x53, + 0x63, + 0x61, + 0x6e, + 0x4c, + 0x69, + 0x6e, + 0x65, + 0x28, + 0x66, + 0x31, + 0x3b, + 0x66, + 0x31, + 0x3b, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x64, + 0x79, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x66, + 0x69, + 0x6c, + 0x74, + 0x65, + 0x72, + 0x5f, + 0x77, + 0x69, + 0x64, + 0x74, + 0x68, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x63, + 0x75, + 0x72, + 0x76, + 0x61, + 0x74, + 0x75, + 0x72, + 0x65, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x43, + 0x72, + 0x74, + 0x50, + 0x69, + 0x42, + 0x6c, + 0x6f, + 0x63, + 0x6b, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x6c, + 0x69, + 0x6e, + 0x65, + 0x5f, + 0x77, + 0x65, + 0x69, + 0x67, + 0x68, + 0x74, + 0x00, + 0x06, + 0x00, + 0x09, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x6c, + 0x69, + 0x6e, + 0x65, + 0x5f, + 0x67, + 0x61, + 0x70, + 0x5f, + 0x62, + 0x72, + 0x69, + 0x67, + 0x68, + 0x74, + 0x6e, + 0x65, + 0x73, + 0x73, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x62, + 0x6c, + 0x6f, + 0x6f, + 0x6d, + 0x5f, + 0x66, + 0x61, + 0x63, + 0x74, + 0x6f, + 0x72, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x69, + 0x6e, + 0x70, + 0x75, + 0x74, + 0x5f, + 0x67, + 0x61, + 0x6d, + 0x6d, + 0x61, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x75, + 0x74, + 0x70, + 0x75, + 0x74, + 0x5f, + 0x67, + 0x61, + 0x6d, + 0x6d, + 0x61, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x5f, + 0x62, + 0x72, + 0x69, + 0x67, + 0x68, + 0x74, + 0x6e, + 0x65, + 0x73, + 0x73, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x63, + 0x75, + 0x72, + 0x76, + 0x61, + 0x74, + 0x75, + 0x72, + 0x65, + 0x5f, + 0x78, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x63, + 0x75, + 0x72, + 0x76, + 0x61, + 0x74, + 0x75, + 0x72, + 0x65, + 0x5f, + 0x79, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x5f, + 0x74, + 0x79, + 0x70, + 0x65, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x08, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x65, + 0x6e, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x5f, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x6c, + 0x69, + 0x6e, + 0x65, + 0x73, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x08, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x65, + 0x6e, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x5f, + 0x6d, + 0x75, + 0x6c, + 0x74, + 0x69, + 0x73, + 0x61, + 0x6d, + 0x70, + 0x6c, + 0x65, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x65, + 0x6e, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x5f, + 0x67, + 0x61, + 0x6d, + 0x6d, + 0x61, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x08, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x65, + 0x6e, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x5f, + 0x63, + 0x75, + 0x72, + 0x76, + 0x61, + 0x74, + 0x75, + 0x72, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x65, + 0x6e, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x5f, + 0x73, + 0x68, + 0x61, + 0x72, + 0x70, + 0x65, + 0x72, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x74, + 0x65, + 0x78, + 0x74, + 0x75, + 0x72, + 0x65, + 0x5f, + 0x77, + 0x69, + 0x64, + 0x74, + 0x68, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x74, + 0x65, + 0x78, + 0x74, + 0x75, + 0x72, + 0x65, + 0x5f, + 0x68, + 0x65, + 0x69, + 0x67, + 0x68, + 0x74, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x62, + 0x61, + 0x72, + 0x72, + 0x65, + 0x6c, + 0x5f, + 0x73, + 0x63, + 0x61, + 0x6c, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x72, + 0x73, + 0x71, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x77, + 0x65, + 0x69, + 0x67, + 0x68, + 0x74, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x74, + 0x65, + 0x78, + 0x5f, + 0x73, + 0x69, + 0x7a, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0x66, + 0x69, + 0x6c, + 0x74, + 0x65, + 0x72, + 0x5f, + 0x77, + 0x69, + 0x64, + 0x74, + 0x68, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0x74, + 0x65, + 0x78, + 0x63, + 0x6f, + 0x6f, + 0x72, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x76, + 0x5f, + 0x75, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x75, + 0x74, + 0x5f, + 0x63, + 0x6f, + 0x6c, + 0x6f, + 0x72, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0x74, + 0x65, + 0x78, + 0x63, + 0x6f, + 0x6f, + 0x72, + 0x64, + 0x5f, + 0x69, + 0x6e, + 0x5f, + 0x70, + 0x69, + 0x78, + 0x65, + 0x6c, + 0x73, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0xc6, + 0x00, + 0x00, + 0x00, + 0x74, + 0x65, + 0x6d, + 0x70, + 0x5f, + 0x63, + 0x6f, + 0x6f, + 0x72, + 0x64, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0x74, + 0x63, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x64, + 0x65, + 0x6c, + 0x74, + 0x61, + 0x73, + 0x00, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0xd3, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x5f, + 0x6c, + 0x69, + 0x6e, + 0x65, + 0x5f, + 0x77, + 0x65, + 0x69, + 0x67, + 0x68, + 0x74, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xd7, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0x73, + 0x69, + 0x67, + 0x6e, + 0x73, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0x74, + 0x65, + 0x6d, + 0x70, + 0x5f, + 0x79, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x03, + 0x01, + 0x00, + 0x00, + 0x79, + 0x5f, + 0x63, + 0x6f, + 0x6f, + 0x72, + 0x64, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x64, + 0x79, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x0d, + 0x01, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x0f, + 0x01, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x12, + 0x01, + 0x00, + 0x00, + 0x73, + 0x69, + 0x67, + 0x6e, + 0x5f, + 0x79, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x63, + 0x6f, + 0x6c, + 0x6f, + 0x75, + 0x72, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x30, + 0x01, + 0x00, + 0x00, + 0x54, + 0x65, + 0x78, + 0x74, + 0x75, + 0x72, + 0x65, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x60, + 0x01, + 0x00, + 0x00, + 0x77, + 0x68, + 0x69, + 0x63, + 0x68, + 0x5f, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x67, + 0x6c, + 0x5f, + 0x46, + 0x72, + 0x61, + 0x67, + 0x43, + 0x6f, + 0x6f, + 0x72, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x68, + 0x01, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0x77, + 0x68, + 0x69, + 0x63, + 0x68, + 0x5f, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x03, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x30, + 0x01, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x30, + 0x01, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x03, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x05, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x04, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x12, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x85, + 0x6b, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x04, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x02, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0xbf, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x78, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0xaa, + 0xaa, + 0xaa, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x94, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9c, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x44, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x40, + 0x20, + 0x00, + 0x04, + 0x00, + 0xa3, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0xa3, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0xa6, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xac, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xb3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0xb8, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0xb8, + 0x00, + 0x00, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x07, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0xba, + 0x00, + 0x00, + 0x00, + 0xb3, + 0x00, + 0x00, + 0x00, + 0xb3, + 0x00, + 0x00, + 0x00, + 0xb3, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0xc0, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xdd, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xef, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x41, + 0x17, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x2b, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x19, + 0x00, + 0x09, + 0x00, + 0x2d, + 0x01, + 0x00, + 0x00, + 0x06, + 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, + 0x1b, + 0x00, + 0x03, + 0x00, + 0x2e, + 0x01, + 0x00, + 0x00, + 0x2d, + 0x01, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x2f, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x01, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x2f, + 0x01, + 0x00, + 0x00, + 0x30, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x35, + 0x01, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x01, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x42, + 0x01, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x48, + 0x01, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x54, + 0x01, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x01, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x61, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x61, + 0x01, + 0x00, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x63, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x92, + 0x01, + 0x00, + 0x00, + 0xaa, + 0xaa, + 0x2a, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x98, + 0x01, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xc6, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xd3, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xd7, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x03, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x12, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x2b, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x60, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x2b, + 0x01, + 0x00, + 0x00, + 0x68, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x2b, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x2b, + 0x01, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x95, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x94, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x95, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x9a, + 0x00, + 0x00, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x9a, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9e, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0x9c, + 0x00, + 0x00, + 0x00, + 0x9e, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xa5, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0xa5, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0xa6, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xae, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0xae, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0xac, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xb1, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xb1, + 0x00, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xb3, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xb6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0xb5, + 0x00, + 0x00, + 0x00, + 0xb6, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xb5, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0xba, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x01, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xb6, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xbd, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xbf, + 0x00, + 0x00, + 0x00, + 0xbd, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0xbf, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0xc1, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0xc0, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x00, + 0x00, + 0x00, + 0xc1, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0xc3, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xc5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xc3, + 0x00, + 0x00, + 0x00, + 0xc4, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xc8, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xc9, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xca, + 0x00, + 0x00, + 0x00, + 0xc8, + 0x00, + 0x00, + 0x00, + 0xc9, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xc6, + 0x00, + 0x00, + 0x00, + 0xca, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xcc, + 0x00, + 0x00, + 0x00, + 0xc6, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xce, + 0x00, + 0x00, + 0x00, + 0xcc, + 0x00, + 0x00, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0xce, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd0, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd1, + 0x00, + 0x00, + 0x00, + 0xc6, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd2, + 0x00, + 0x00, + 0x00, + 0xd0, + 0x00, + 0x00, + 0x00, + 0xd1, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0xd2, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xd5, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd6, + 0x00, + 0x00, + 0x00, + 0xd5, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0xd6, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd8, + 0x00, + 0x00, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xd7, + 0x00, + 0x00, + 0x00, + 0xd8, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd9, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0xd7, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xd3, + 0x00, + 0x00, + 0x00, + 0xd9, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xdb, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xdc, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xdb, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0xdc, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xde, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xdf, + 0x00, + 0x00, + 0x00, + 0xde, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe0, + 0x00, + 0x00, + 0x00, + 0xdf, + 0x00, + 0x00, + 0x00, + 0xdd, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xe1, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xe1, + 0x00, + 0x00, + 0x00, + 0xe0, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xe2, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xe3, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xe4, + 0x00, + 0x00, + 0x00, + 0xe2, + 0x00, + 0x00, + 0x00, + 0xe3, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0xe4, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xe5, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe6, + 0x00, + 0x00, + 0x00, + 0xe5, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xe7, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe8, + 0x00, + 0x00, + 0x00, + 0xe7, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe9, + 0x00, + 0x00, + 0x00, + 0xe6, + 0x00, + 0x00, + 0x00, + 0xe8, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xea, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xea, + 0x00, + 0x00, + 0x00, + 0xe9, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xeb, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xec, + 0x00, + 0x00, + 0x00, + 0xeb, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xed, + 0x00, + 0x00, + 0x00, + 0xec, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xee, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xee, + 0x00, + 0x00, + 0x00, + 0xed, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xf0, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xf1, + 0x00, + 0x00, + 0x00, + 0xf0, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xf2, + 0x00, + 0x00, + 0x00, + 0xf1, + 0x00, + 0x00, + 0x00, + 0xef, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xf3, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xf3, + 0x00, + 0x00, + 0x00, + 0xf2, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf4, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf5, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf6, + 0x00, + 0x00, + 0x00, + 0xf5, + 0x00, + 0x00, + 0x00, + 0xf4, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0xf6, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x00, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x00, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xfb, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xfc, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x00, + 0x00, + 0xfb, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0xfc, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xc5, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xfd, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0xff, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0xff, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x01, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x02, + 0x01, + 0x00, + 0x00, + 0x01, + 0x01, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0x02, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x04, + 0x01, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x05, + 0x01, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x01, + 0x00, + 0x00, + 0x05, + 0x01, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x07, + 0x01, + 0x00, + 0x00, + 0x04, + 0x01, + 0x00, + 0x00, + 0x06, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x03, + 0x01, + 0x00, + 0x00, + 0x07, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x09, + 0x01, + 0x00, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x01, + 0x00, + 0x00, + 0x09, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x01, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x01, + 0x00, + 0x00, + 0x0a, + 0x01, + 0x00, + 0x00, + 0x0b, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0d, + 0x01, + 0x00, + 0x00, + 0x0e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x10, + 0x01, + 0x00, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0f, + 0x01, + 0x00, + 0x00, + 0x10, + 0x01, + 0x00, + 0x00, + 0x39, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x11, + 0x01, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x01, + 0x00, + 0x00, + 0x0f, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xd3, + 0x00, + 0x00, + 0x00, + 0x11, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x13, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x14, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x13, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x12, + 0x01, + 0x00, + 0x00, + 0x14, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x15, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x17, + 0x01, + 0x00, + 0x00, + 0x15, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x17, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x18, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x19, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x01, + 0x00, + 0x00, + 0x18, + 0x01, + 0x00, + 0x00, + 0x19, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x1a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1b, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x01, + 0x00, + 0x00, + 0x1b, + 0x01, + 0x00, + 0x00, + 0xef, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x01, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x01, + 0x00, + 0x00, + 0x1d, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x01, + 0x00, + 0x00, + 0x1f, + 0x01, + 0x00, + 0x00, + 0x1e, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x20, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x21, + 0x01, + 0x00, + 0x00, + 0x12, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x22, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x23, + 0x01, + 0x00, + 0x00, + 0x22, + 0x01, + 0x00, + 0x00, + 0x21, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x23, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x24, + 0x01, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x25, + 0x01, + 0x00, + 0x00, + 0x24, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x26, + 0x01, + 0x00, + 0x00, + 0x03, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x27, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x28, + 0x01, + 0x00, + 0x00, + 0x26, + 0x01, + 0x00, + 0x00, + 0x27, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x29, + 0x01, + 0x00, + 0x00, + 0x25, + 0x01, + 0x00, + 0x00, + 0x28, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0x29, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xc5, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc5, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2e, + 0x01, + 0x00, + 0x00, + 0x31, + 0x01, + 0x00, + 0x00, + 0x30, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x32, + 0x01, + 0x00, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0x33, + 0x01, + 0x00, + 0x00, + 0x31, + 0x01, + 0x00, + 0x00, + 0x32, + 0x01, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x08, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x34, + 0x01, + 0x00, + 0x00, + 0x33, + 0x01, + 0x00, + 0x00, + 0x33, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x34, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x36, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x35, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x37, + 0x01, + 0x00, + 0x00, + 0x36, + 0x01, + 0x00, + 0x00, + 0xab, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x38, + 0x01, + 0x00, + 0x00, + 0x37, + 0x01, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x3a, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x38, + 0x01, + 0x00, + 0x00, + 0x39, + 0x01, + 0x00, + 0x00, + 0x3a, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x39, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x01, + 0x00, + 0x00, + 0x3c, + 0x01, + 0x00, + 0x00, + 0xab, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x01, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x40, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x3e, + 0x01, + 0x00, + 0x00, + 0x3f, + 0x01, + 0x00, + 0x00, + 0x40, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x3f, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x41, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x43, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x42, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x44, + 0x01, + 0x00, + 0x00, + 0x43, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x45, + 0x01, + 0x00, + 0x00, + 0x44, + 0x01, + 0x00, + 0x00, + 0x44, + 0x01, + 0x00, + 0x00, + 0x44, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x07, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x46, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x41, + 0x01, + 0x00, + 0x00, + 0x45, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x46, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x40, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x40, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x47, + 0x01, + 0x00, + 0x00, + 0xd3, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x49, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x48, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4a, + 0x01, + 0x00, + 0x00, + 0x49, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x01, + 0x00, + 0x00, + 0x47, + 0x01, + 0x00, + 0x00, + 0x4a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x4c, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x4d, + 0x01, + 0x00, + 0x00, + 0x4c, + 0x01, + 0x00, + 0x00, + 0x4b, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x4d, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x01, + 0x00, + 0x00, + 0x4e, + 0x01, + 0x00, + 0x00, + 0xab, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x50, + 0x01, + 0x00, + 0x00, + 0x4f, + 0x01, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x52, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x50, + 0x01, + 0x00, + 0x00, + 0x51, + 0x01, + 0x00, + 0x00, + 0x52, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x51, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x53, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x55, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x54, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x56, + 0x01, + 0x00, + 0x00, + 0x55, + 0x01, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x56, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x07, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x59, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x53, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x59, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x52, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x52, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x3a, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x3a, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x01, + 0x00, + 0x00, + 0x5b, + 0x01, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x5d, + 0x01, + 0x00, + 0x00, + 0x5c, + 0x01, + 0x00, + 0x00, + 0x6e, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x5f, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x5d, + 0x01, + 0x00, + 0x00, + 0x5e, + 0x01, + 0x00, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x5e, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x63, + 0x01, + 0x00, + 0x00, + 0x64, + 0x01, + 0x00, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x65, + 0x01, + 0x00, + 0x00, + 0x64, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x66, + 0x01, + 0x00, + 0x00, + 0x65, + 0x01, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x67, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x66, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x60, + 0x01, + 0x00, + 0x00, + 0x67, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x69, + 0x01, + 0x00, + 0x00, + 0x60, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x6a, + 0x01, + 0x00, + 0x00, + 0x69, + 0x01, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x6a, + 0x01, + 0x00, + 0x00, + 0x6c, + 0x01, + 0x00, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6c, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0x6f, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x71, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x72, + 0x01, + 0x00, + 0x00, + 0x71, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x73, + 0x01, + 0x00, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x72, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x73, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x68, + 0x01, + 0x00, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0x68, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x5f, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0x48, + 0x01, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x63, + 0x01, + 0x00, + 0x00, + 0x83, + 0x01, + 0x00, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x84, + 0x01, + 0x00, + 0x00, + 0x83, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x85, + 0x01, + 0x00, + 0x00, + 0x84, + 0x01, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x86, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x85, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0x86, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x88, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x89, + 0x01, + 0x00, + 0x00, + 0x88, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x8a, + 0x01, + 0x00, + 0x00, + 0x89, + 0x01, + 0x00, + 0x00, + 0x89, + 0x01, + 0x00, + 0x00, + 0x89, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x8a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x01, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x01, + 0x00, + 0x00, + 0x8b, + 0x01, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x8e, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x8c, + 0x01, + 0x00, + 0x00, + 0x8d, + 0x01, + 0x00, + 0x00, + 0x90, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x8d, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x01, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x8f, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x8e, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x90, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x91, + 0x01, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x93, + 0x01, + 0x00, + 0x00, + 0x91, + 0x01, + 0x00, + 0x00, + 0x92, + 0x01, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x93, + 0x01, + 0x00, + 0x00, + 0x94, + 0x01, + 0x00, + 0x00, + 0x97, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x94, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x96, + 0x01, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x96, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x97, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x99, + 0x01, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x98, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x99, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x8e, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x8e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x9a, + 0x01, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x9b, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x9c, + 0x01, + 0x00, + 0x00, + 0x9b, + 0x01, + 0x00, + 0x00, + 0x9a, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x9c, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x5f, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x5f, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x9d, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9e, + 0x01, + 0x00, + 0x00, + 0x9d, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x01, + 0x00, + 0x00, + 0x9d, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa0, + 0x01, + 0x00, + 0x00, + 0x9d, + 0x01, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x07, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x01, + 0x00, + 0x00, + 0x9e, + 0x01, + 0x00, + 0x00, + 0x9f, + 0x01, + 0x00, + 0x00, + 0xa0, + 0x01, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x01, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x01, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x40, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0x40, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x42, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0x00, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x42, + 0x00, + 0x00, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x00, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x4d, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x00, + 0x00, + 0x00, + 0x4d, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x00, + 0x04, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x51, + 0x00, + 0x00, + 0x00, + 0x52, + 0x00, + 0x00, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x52, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x56, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x56, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0xf5, + 0x00, + 0x07, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x58, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x52, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x5a, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x58, + 0x00, + 0x00, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x5a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x5e, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x5f, + 0x00, + 0x00, + 0x00, + 0x5e, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x5f, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x60, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x60, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x66, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x68, + 0x00, + 0x00, + 0x00, + 0x66, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x6c, + 0x00, + 0x00, + 0x00, + 0x68, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x6c, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x07, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x17, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x78, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x7c, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x84, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x00, + 0x00, + 0x84, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x86, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x86, + 0x00, + 0x00, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x90, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x90, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, +}; +static const size_t kcrtpi_frag_spv_size = 10356; diff --git a/source/core/rendering/sdl3gpu/downscale_frag_spv.h b/source/core/rendering/sdl3gpu/downscale_frag_spv.h new file mode 100644 index 0000000..cf0f341 --- /dev/null +++ b/source/core/rendering/sdl3gpu/downscale_frag_spv.h @@ -0,0 +1,4254 @@ +#pragma once +#include +#include +static const uint8_t kdownscale_frag_spv[] = { + 0x03, + 0x02, + 0x23, + 0x07, + 0x00, + 0x00, + 0x01, + 0x00, + 0x0b, + 0x00, + 0x0d, + 0x00, + 0xb1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x02, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x02, + 0x00, + 0x32, + 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, + 0x07, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x03, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x01, + 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, + 0x04, + 0x00, + 0x08, + 0x00, + 0x47, + 0x4c, + 0x5f, + 0x47, + 0x4f, + 0x4f, + 0x47, + 0x4c, + 0x45, + 0x5f, + 0x69, + 0x6e, + 0x63, + 0x6c, + 0x75, + 0x64, + 0x65, + 0x5f, + 0x64, + 0x69, + 0x72, + 0x65, + 0x63, + 0x74, + 0x69, + 0x76, + 0x65, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x6c, + 0x61, + 0x6e, + 0x63, + 0x7a, + 0x6f, + 0x73, + 0x28, + 0x66, + 0x31, + 0x3b, + 0x66, + 0x31, + 0x3b, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x70, + 0x74, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x73, + 0x72, + 0x63, + 0x5f, + 0x73, + 0x69, + 0x7a, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x73, + 0x6f, + 0x75, + 0x72, + 0x63, + 0x65, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x41, + 0x00, + 0x00, + 0x00, + 0x76, + 0x5f, + 0x75, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x70, + 0x5f, + 0x66, + 0x6c, + 0x6f, + 0x6f, + 0x72, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x44, + 0x6f, + 0x77, + 0x6e, + 0x73, + 0x63, + 0x61, + 0x6c, + 0x65, + 0x55, + 0x6e, + 0x69, + 0x66, + 0x6f, + 0x72, + 0x6d, + 0x73, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x61, + 0x6c, + 0x67, + 0x6f, + 0x72, + 0x69, + 0x74, + 0x68, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x05, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x64, + 0x30, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x05, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x64, + 0x31, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x05, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x64, + 0x32, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x77, + 0x69, + 0x6e, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x63, + 0x6f, + 0x6c, + 0x6f, + 0x72, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x77, + 0x65, + 0x69, + 0x67, + 0x68, + 0x74, + 0x5f, + 0x73, + 0x75, + 0x6d, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x74, + 0x61, + 0x70, + 0x5f, + 0x63, + 0x65, + 0x6e, + 0x74, + 0x65, + 0x72, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x66, + 0x66, + 0x73, + 0x65, + 0x74, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x75, + 0x74, + 0x5f, + 0x63, + 0x6f, + 0x6c, + 0x6f, + 0x72, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x41, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x03, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x03, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x05, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x17, + 0xb7, + 0xd1, + 0x38, + 0x14, + 0x00, + 0x02, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0xdb, + 0x0f, + 0x49, + 0x40, + 0x17, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x09, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x06, + 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, + 0x1b, + 0x00, + 0x03, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x36, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x36, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x40, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x40, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x06, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x40, + 0x20, + 0x00, + 0x04, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x58, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x07, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x15, + 0x00, + 0x04, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x84, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0xa3, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0xa3, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x07, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x58, + 0x00, + 0x00, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x58, + 0x00, + 0x00, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x64, + 0x00, + 0x04, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x05, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x42, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0x00, + 0x00, + 0x42, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x4d, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x00, + 0x00, + 0x00, + 0x4d, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x05, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0xa9, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x52, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x52, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x56, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x56, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x5d, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x5e, + 0x00, + 0x00, + 0x00, + 0x5d, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x5e, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x5f, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x5f, + 0x00, + 0x00, + 0x00, + 0xf6, + 0x00, + 0x04, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x65, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0xb3, + 0x00, + 0x05, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x66, + 0x00, + 0x00, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x65, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x66, + 0x00, + 0x00, + 0x00, + 0x60, + 0x00, + 0x00, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x60, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x68, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x68, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0xf6, + 0x00, + 0x04, + 0x00, + 0x6c, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x6e, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0xb3, + 0x00, + 0x05, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x6c, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x73, + 0x00, + 0x00, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x78, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x73, + 0x00, + 0x00, + 0x00, + 0x78, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x00, + 0x00, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x84, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x86, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x86, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x90, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x91, + 0x00, + 0x00, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x90, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x91, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x92, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x94, + 0x00, + 0x00, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x95, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x94, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x92, + 0x00, + 0x00, + 0x00, + 0x95, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x9a, + 0x00, + 0x00, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x9a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9c, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x00, + 0x00, + 0x00, + 0x9c, + 0x00, + 0x00, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x9e, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x05, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0x9e, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x67, + 0x00, + 0x00, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6c, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x05, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x5f, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa5, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0xa6, + 0x00, + 0x00, + 0x00, + 0xa5, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xa6, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xae, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x07, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0xac, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0xac, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xae, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x01, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x00, + 0x05, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, +}; +static const size_t kdownscale_frag_spv_size = 4248; diff --git a/source/core/rendering/sdl3gpu/postfx_frag_spv.h b/source/core/rendering/sdl3gpu/postfx_frag_spv.h new file mode 100644 index 0000000..a60ea13 --- /dev/null +++ b/source/core/rendering/sdl3gpu/postfx_frag_spv.h @@ -0,0 +1,11718 @@ +#pragma once +#include +#include +static const uint8_t kpostfx_frag_spv[] = { + 0x03, + 0x02, + 0x23, + 0x07, + 0x00, + 0x00, + 0x01, + 0x00, + 0x0b, + 0x00, + 0x0d, + 0x00, + 0xf2, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x02, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x02, + 0x00, + 0x32, + 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, + 0x08, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0xb6, + 0x01, + 0x00, + 0x00, + 0x10, + 0x00, + 0x03, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x01, + 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, + 0x04, + 0x00, + 0x08, + 0x00, + 0x47, + 0x4c, + 0x5f, + 0x47, + 0x4f, + 0x4f, + 0x47, + 0x4c, + 0x45, + 0x5f, + 0x69, + 0x6e, + 0x63, + 0x6c, + 0x75, + 0x64, + 0x65, + 0x5f, + 0x64, + 0x69, + 0x72, + 0x65, + 0x63, + 0x74, + 0x69, + 0x76, + 0x65, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x72, + 0x67, + 0x62, + 0x5f, + 0x74, + 0x6f, + 0x5f, + 0x79, + 0x63, + 0x63, + 0x28, + 0x76, + 0x66, + 0x33, + 0x3b, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x72, + 0x67, + 0x62, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x79, + 0x63, + 0x63, + 0x5f, + 0x74, + 0x6f, + 0x5f, + 0x72, + 0x67, + 0x62, + 0x28, + 0x76, + 0x66, + 0x33, + 0x3b, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x79, + 0x63, + 0x63, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x63, + 0x62, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x63, + 0x72, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x75, + 0x76, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x76, + 0x5f, + 0x75, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x50, + 0x6f, + 0x73, + 0x74, + 0x46, + 0x58, + 0x55, + 0x6e, + 0x69, + 0x66, + 0x6f, + 0x72, + 0x6d, + 0x73, + 0x00, + 0x00, + 0x06, + 0x00, + 0x08, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x76, + 0x69, + 0x67, + 0x6e, + 0x65, + 0x74, + 0x74, + 0x65, + 0x5f, + 0x73, + 0x74, + 0x72, + 0x65, + 0x6e, + 0x67, + 0x74, + 0x68, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x63, + 0x68, + 0x72, + 0x6f, + 0x6d, + 0x61, + 0x5f, + 0x73, + 0x74, + 0x72, + 0x65, + 0x6e, + 0x67, + 0x74, + 0x68, + 0x00, + 0x06, + 0x00, + 0x08, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x6c, + 0x69, + 0x6e, + 0x65, + 0x5f, + 0x73, + 0x74, + 0x72, + 0x65, + 0x6e, + 0x67, + 0x74, + 0x68, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x72, + 0x65, + 0x65, + 0x6e, + 0x5f, + 0x68, + 0x65, + 0x69, + 0x67, + 0x68, + 0x74, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x5f, + 0x73, + 0x74, + 0x72, + 0x65, + 0x6e, + 0x67, + 0x74, + 0x68, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x67, + 0x61, + 0x6d, + 0x6d, + 0x61, + 0x5f, + 0x73, + 0x74, + 0x72, + 0x65, + 0x6e, + 0x67, + 0x74, + 0x68, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x63, + 0x75, + 0x72, + 0x76, + 0x61, + 0x74, + 0x75, + 0x72, + 0x65, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x62, + 0x6c, + 0x65, + 0x65, + 0x64, + 0x69, + 0x6e, + 0x67, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x70, + 0x69, + 0x78, + 0x65, + 0x6c, + 0x5f, + 0x73, + 0x63, + 0x61, + 0x6c, + 0x65, + 0x00, + 0x06, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x74, + 0x69, + 0x6d, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x76, + 0x65, + 0x72, + 0x73, + 0x61, + 0x6d, + 0x70, + 0x6c, + 0x65, + 0x00, + 0x00, + 0x06, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x66, + 0x6c, + 0x69, + 0x63, + 0x6b, + 0x65, + 0x72, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x72, + 0x73, + 0x71, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x64, + 0x69, + 0x73, + 0x74, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x62, + 0x61, + 0x72, + 0x72, + 0x65, + 0x6c, + 0x53, + 0x63, + 0x61, + 0x6c, + 0x65, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x75, + 0x74, + 0x5f, + 0x63, + 0x6f, + 0x6c, + 0x6f, + 0x72, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0x62, + 0x61, + 0x73, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x65, + 0x6e, + 0x65, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0xbf, + 0x00, + 0x00, + 0x00, + 0x74, + 0x77, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0x73, + 0x74, + 0x65, + 0x70, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x79, + 0x63, + 0x63, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xce, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xd1, + 0x00, + 0x00, + 0x00, + 0x79, + 0x63, + 0x63, + 0x5f, + 0x6c, + 0x32, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xdd, + 0x00, + 0x00, + 0x00, + 0x79, + 0x63, + 0x63, + 0x5f, + 0x6c, + 0x31, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xe5, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xe8, + 0x00, + 0x00, + 0x00, + 0x79, + 0x63, + 0x63, + 0x5f, + 0x72, + 0x31, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xf0, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xf3, + 0x00, + 0x00, + 0x00, + 0x79, + 0x63, + 0x63, + 0x5f, + 0x72, + 0x32, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xfb, + 0x00, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x63, + 0x6f, + 0x6c, + 0x6f, + 0x75, + 0x72, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x18, + 0x01, + 0x00, + 0x00, + 0x70, + 0x61, + 0x72, + 0x61, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x21, + 0x01, + 0x00, + 0x00, + 0x63, + 0x61, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x47, + 0x01, + 0x00, + 0x00, + 0x6c, + 0x69, + 0x6e, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x70, + 0x73, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x5e, + 0x01, + 0x00, + 0x00, + 0x66, + 0x72, + 0x61, + 0x63, + 0x5f, + 0x69, + 0x6e, + 0x5f, + 0x72, + 0x6f, + 0x77, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x66, + 0x01, + 0x00, + 0x00, + 0x72, + 0x6f, + 0x77, + 0x5f, + 0x70, + 0x6f, + 0x73, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x62, + 0x72, + 0x69, + 0x67, + 0x68, + 0x74, + 0x5f, + 0x72, + 0x6f, + 0x77, + 0x73, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x69, + 0x73, + 0x5f, + 0x64, + 0x61, + 0x72, + 0x6b, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x84, + 0x01, + 0x00, + 0x00, + 0x73, + 0x63, + 0x61, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x93, + 0x01, + 0x00, + 0x00, + 0x65, + 0x6e, + 0x63, + 0x00, + 0x05, + 0x00, + 0x03, + 0x00, + 0x9e, + 0x01, + 0x00, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0xa2, + 0x01, + 0x00, + 0x00, + 0x76, + 0x69, + 0x67, + 0x6e, + 0x65, + 0x74, + 0x74, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0x77, + 0x68, + 0x69, + 0x63, + 0x68, + 0x4d, + 0x61, + 0x73, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0xb6, + 0x01, + 0x00, + 0x00, + 0x67, + 0x6c, + 0x5f, + 0x46, + 0x72, + 0x61, + 0x67, + 0x43, + 0x6f, + 0x6f, + 0x72, + 0x64, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x73, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0xdc, + 0x01, + 0x00, + 0x00, + 0x66, + 0x6c, + 0x69, + 0x63, + 0x6b, + 0x65, + 0x72, + 0x5f, + 0x77, + 0x61, + 0x76, + 0x65, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x03, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0xb6, + 0x01, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x03, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x04, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x87, + 0x16, + 0x99, + 0x3e, + 0x15, + 0x00, + 0x04, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x45, + 0x16, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0xd5, + 0x78, + 0xe9, + 0x3d, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x56, + 0x0e, + 0x2d, + 0xbe, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0xd5, + 0x78, + 0xa9, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x87, + 0xd6, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0x54, + 0xe3, + 0xa5, + 0x3d, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x74, + 0xb3, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0xc5, + 0x20, + 0xb0, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x58, + 0x00, + 0x00, + 0x00, + 0xb4, + 0xc8, + 0x36, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5d, + 0x00, + 0x00, + 0x00, + 0xe5, + 0xd0, + 0xe2, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x3f, + 0x17, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x6c, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x6c, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x0e, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x70, + 0x00, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x73, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x02, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x84, + 0x00, + 0x00, + 0x00, + 0xcd, + 0xcc, + 0x4c, + 0x3d, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x00, + 0x00, + 0xcd, + 0xcc, + 0xcc, + 0x3d, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x86, + 0x00, + 0x00, + 0x00, + 0x84, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x85, + 0x6b, + 0x3e, + 0x17, + 0x00, + 0x04, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0xa9, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x07, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x09, + 0x00, + 0xb1, + 0x00, + 0x00, + 0x00, + 0x06, + 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, + 0x1b, + 0x00, + 0x03, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xb1, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0xb3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0xb3, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0xc1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0xc3, + 0x00, + 0x00, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0xc8, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x41, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x22, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x25, + 0x01, + 0x00, + 0x00, + 0x0a, + 0xd7, + 0xa3, + 0x3b, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x27, + 0x01, + 0x00, + 0x00, + 0x9a, + 0x99, + 0x19, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x28, + 0x01, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x01, + 0x00, + 0x00, + 0x9a, + 0x99, + 0xe9, + 0x40, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x41, + 0x01, + 0x00, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x49, + 0x01, + 0x00, + 0x00, + 0x9a, + 0x99, + 0x19, + 0x40, + 0x2c, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x4a, + 0x01, + 0x00, + 0x00, + 0x49, + 0x01, + 0x00, + 0x00, + 0x49, + 0x01, + 0x00, + 0x00, + 0x49, + 0x01, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x52, + 0x01, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x59, + 0x01, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0x61, + 0x01, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x40, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0x83, + 0xc0, + 0x2a, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x85, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x0a, + 0xd7, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0x2f, + 0xba, + 0xe8, + 0x3e, + 0x2c, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x96, + 0x01, + 0x00, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0x95, + 0x01, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0xae, + 0x01, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0xb5, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0xb5, + 0x01, + 0x00, + 0x00, + 0xb6, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0xb7, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xba, + 0x01, + 0x00, + 0x00, + 0xaa, + 0xaa, + 0xaa, + 0x3e, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x01, + 0x00, + 0x00, + 0xcd, + 0xcc, + 0x4c, + 0x3f, + 0x2c, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xbf, + 0x01, + 0x00, + 0x00, + 0xbe, + 0x01, + 0x00, + 0x00, + 0xbe, + 0x01, + 0x00, + 0x00, + 0xbe, + 0x01, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x01, + 0x00, + 0x00, + 0xaa, + 0xaa, + 0x2a, + 0x3f, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0xd6, + 0x01, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xdf, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0xc8, + 0x42, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe6, + 0x01, + 0x00, + 0x00, + 0x0a, + 0xd7, + 0x23, + 0x3d, + 0x36, + 0x00, + 0x05, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xbf, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xce, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xd1, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xdd, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xe5, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xe8, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xf0, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xf3, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xfb, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x18, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x21, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x47, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x5e, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x66, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x84, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x93, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x6a, + 0x00, + 0x00, + 0x00, + 0x9e, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xdc, + 0x01, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x73, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x75, + 0x00, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x78, + 0x00, + 0x00, + 0x00, + 0x76, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x78, + 0x00, + 0x00, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x94, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x80, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x82, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x73, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x87, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x86, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x89, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x90, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x91, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x92, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x91, + 0x00, + 0x00, + 0x00, + 0x92, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x94, + 0x00, + 0x00, + 0x00, + 0x90, + 0x00, + 0x00, + 0x00, + 0x93, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x95, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x95, + 0x00, + 0x00, + 0x00, + 0x94, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x96, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x98, + 0x00, + 0x00, + 0x00, + 0x97, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x99, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x9a, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0x9a, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9c, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x9b, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x00, + 0x00, + 0x00, + 0x9c, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x00, + 0x04, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x9e, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x9e, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa3, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0xa2, + 0x00, + 0x00, + 0x00, + 0xbe, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0xa3, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xa0, + 0x00, + 0x00, + 0x00, + 0xf5, + 0x00, + 0x07, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xa5, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x00, + 0x00, + 0x00, + 0x79, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xa5, + 0x00, + 0x00, + 0x00, + 0xa6, + 0x00, + 0x00, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xa6, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0xab, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x01, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xa7, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0x7b, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xae, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0xad, + 0x00, + 0x00, + 0x00, + 0xae, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0xaf, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x7a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xb5, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xb6, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0xb5, + 0x00, + 0x00, + 0x00, + 0xb6, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x00, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0xb7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xba, + 0x00, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xbb, + 0x00, + 0x00, + 0x00, + 0xba, + 0x00, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0xbb, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xbe, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xbc, + 0x00, + 0x00, + 0x00, + 0xbd, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xbd, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xc0, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x64, + 0x00, + 0x04, + 0x00, + 0xb1, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x00, + 0x00, + 0x00, + 0xc0, + 0x00, + 0x00, + 0x00, + 0x67, + 0x00, + 0x05, + 0x00, + 0xc3, + 0x00, + 0x00, + 0x00, + 0xc4, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x00, + 0x00, + 0x00, + 0xc1, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x72, + 0x00, + 0x00, + 0x00, + 0xc5, + 0x00, + 0x00, + 0x00, + 0xc4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xc6, + 0x00, + 0x00, + 0x00, + 0xc5, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xbf, + 0x00, + 0x00, + 0x00, + 0xc6, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xc9, + 0x00, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xc8, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xca, + 0x00, + 0x00, + 0x00, + 0xc9, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0xbf, + 0x00, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xcc, + 0x00, + 0x00, + 0x00, + 0xca, + 0x00, + 0x00, + 0x00, + 0xcb, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0xcc, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xce, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd0, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0xce, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0xd0, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xd2, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xd3, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd5, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd6, + 0x00, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0xd5, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xd7, + 0x00, + 0x00, + 0x00, + 0xd6, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xd8, + 0x00, + 0x00, + 0x00, + 0xd3, + 0x00, + 0x00, + 0x00, + 0xd7, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xd9, + 0x00, + 0x00, + 0x00, + 0xd2, + 0x00, + 0x00, + 0x00, + 0xd8, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xdb, + 0x00, + 0x00, + 0x00, + 0xd9, + 0x00, + 0x00, + 0x00, + 0xd9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0xdb, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xdc, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0xda, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xd1, + 0x00, + 0x00, + 0x00, + 0xdc, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xde, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xdf, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe0, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe1, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xe0, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xe2, + 0x00, + 0x00, + 0x00, + 0xe1, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xe3, + 0x00, + 0x00, + 0x00, + 0xdf, + 0x00, + 0x00, + 0x00, + 0xe2, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xe4, + 0x00, + 0x00, + 0x00, + 0xde, + 0x00, + 0x00, + 0x00, + 0xe3, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xe6, + 0x00, + 0x00, + 0x00, + 0xe4, + 0x00, + 0x00, + 0x00, + 0xe4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xe5, + 0x00, + 0x00, + 0x00, + 0xe6, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xe7, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0xe5, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xdd, + 0x00, + 0x00, + 0x00, + 0xe7, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xe9, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xea, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xeb, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xec, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xeb, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xed, + 0x00, + 0x00, + 0x00, + 0xec, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xee, + 0x00, + 0x00, + 0x00, + 0xea, + 0x00, + 0x00, + 0x00, + 0xed, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xef, + 0x00, + 0x00, + 0x00, + 0xe9, + 0x00, + 0x00, + 0x00, + 0xee, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf1, + 0x00, + 0x00, + 0x00, + 0xef, + 0x00, + 0x00, + 0x00, + 0xef, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xf0, + 0x00, + 0x00, + 0x00, + 0xf1, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xf2, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0xf0, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xe8, + 0x00, + 0x00, + 0x00, + 0xf2, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0xf4, + 0x00, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf5, + 0x00, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xf6, + 0x00, + 0x00, + 0x00, + 0xc7, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0xf6, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x00, + 0x00, + 0xf5, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x00, + 0x00, + 0xf4, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xfc, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xfb, + 0x00, + 0x00, + 0x00, + 0xfc, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0xfb, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xf3, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0xd1, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x07, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xff, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0xdd, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x07, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x01, + 0x01, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x02, + 0x01, + 0x00, + 0x00, + 0x01, + 0x01, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x03, + 0x01, + 0x00, + 0x00, + 0xff, + 0x00, + 0x00, + 0x00, + 0x02, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x04, + 0x01, + 0x00, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x07, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x05, + 0x01, + 0x00, + 0x00, + 0x04, + 0x01, + 0x00, + 0x00, + 0x04, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x06, + 0x01, + 0x00, + 0x00, + 0x05, + 0x01, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x07, + 0x01, + 0x00, + 0x00, + 0x03, + 0x01, + 0x00, + 0x00, + 0x06, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0xe8, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x07, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x09, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x08, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x01, + 0x00, + 0x00, + 0x09, + 0x01, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x01, + 0x00, + 0x00, + 0x07, + 0x01, + 0x00, + 0x00, + 0x0a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x01, + 0x00, + 0x00, + 0xf3, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x07, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x01, + 0x00, + 0x00, + 0x0b, + 0x01, + 0x00, + 0x00, + 0x0d, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x10, + 0x01, + 0x00, + 0x00, + 0x0f, + 0x01, + 0x00, + 0x00, + 0x0f, + 0x01, + 0x00, + 0x00, + 0x88, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x11, + 0x01, + 0x00, + 0x00, + 0x0e, + 0x01, + 0x00, + 0x00, + 0x10, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x12, + 0x01, + 0x00, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x13, + 0x01, + 0x00, + 0x00, + 0x11, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x12, + 0x01, + 0x00, + 0x00, + 0x13, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x14, + 0x01, + 0x00, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x15, + 0x01, + 0x00, + 0x00, + 0x11, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x14, + 0x01, + 0x00, + 0x00, + 0x15, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x17, + 0x01, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x19, + 0x01, + 0x00, + 0x00, + 0xcd, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x18, + 0x01, + 0x00, + 0x00, + 0x19, + 0x01, + 0x00, + 0x00, + 0x39, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x01, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x18, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x1b, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xb9, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x01, + 0x00, + 0x00, + 0x1b, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x01, + 0x00, + 0x00, + 0x1c, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x17, + 0x01, + 0x00, + 0x00, + 0x1a, + 0x01, + 0x00, + 0x00, + 0x1d, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x1e, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xbe, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x1f, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x20, + 0x01, + 0x00, + 0x00, + 0xb0, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x20, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xbe, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xbe, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x23, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x22, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x24, + 0x01, + 0x00, + 0x00, + 0x23, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x26, + 0x01, + 0x00, + 0x00, + 0x24, + 0x01, + 0x00, + 0x00, + 0x25, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x29, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x28, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x29, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x2a, + 0x01, + 0x00, + 0x00, + 0x2b, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x01, + 0x00, + 0x00, + 0x27, + 0x01, + 0x00, + 0x00, + 0x2d, + 0x01, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x30, + 0x01, + 0x00, + 0x00, + 0x26, + 0x01, + 0x00, + 0x00, + 0x2f, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x21, + 0x01, + 0x00, + 0x00, + 0x30, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0x31, + 0x01, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x32, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x33, + 0x01, + 0x00, + 0x00, + 0x21, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x34, + 0x01, + 0x00, + 0x00, + 0x33, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x35, + 0x01, + 0x00, + 0x00, + 0x32, + 0x01, + 0x00, + 0x00, + 0x34, + 0x01, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0x36, + 0x01, + 0x00, + 0x00, + 0x31, + 0x01, + 0x00, + 0x00, + 0x35, + 0x01, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x37, + 0x01, + 0x00, + 0x00, + 0x36, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x38, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x38, + 0x01, + 0x00, + 0x00, + 0x37, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0xb2, + 0x00, + 0x00, + 0x00, + 0x39, + 0x01, + 0x00, + 0x00, + 0xb4, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x01, + 0x00, + 0x00, + 0x21, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x01, + 0x00, + 0x00, + 0x3b, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x01, + 0x00, + 0x00, + 0x3a, + 0x01, + 0x00, + 0x00, + 0x3c, + 0x01, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x01, + 0x00, + 0x00, + 0x39, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x01, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x01, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x40, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x40, + 0x01, + 0x00, + 0x00, + 0x3f, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x42, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x41, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x43, + 0x01, + 0x00, + 0x00, + 0x42, + 0x01, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x44, + 0x01, + 0x00, + 0x00, + 0x43, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x46, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x44, + 0x01, + 0x00, + 0x00, + 0x45, + 0x01, + 0x00, + 0x00, + 0x46, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x45, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x48, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x48, + 0x01, + 0x00, + 0x00, + 0x4a, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x47, + 0x01, + 0x00, + 0x00, + 0x4b, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x4c, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x4d, + 0x01, + 0x00, + 0x00, + 0x47, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x41, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x01, + 0x00, + 0x00, + 0x4e, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x50, + 0x01, + 0x00, + 0x00, + 0x4f, + 0x01, + 0x00, + 0x00, + 0x4f, + 0x01, + 0x00, + 0x00, + 0x4f, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x51, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x4c, + 0x01, + 0x00, + 0x00, + 0x4d, + 0x01, + 0x00, + 0x00, + 0x50, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x51, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x46, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x46, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x53, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x52, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x54, + 0x01, + 0x00, + 0x00, + 0x53, + 0x01, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x55, + 0x01, + 0x00, + 0x00, + 0x54, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x55, + 0x01, + 0x00, + 0x00, + 0x56, + 0x01, + 0x00, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x56, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x59, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x01, + 0x00, + 0x00, + 0x5a, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x07, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5d, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x5d, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x5f, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x60, + 0x01, + 0x00, + 0x00, + 0x5f, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x61, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x63, + 0x01, + 0x00, + 0x00, + 0x62, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x64, + 0x01, + 0x00, + 0x00, + 0x60, + 0x01, + 0x00, + 0x00, + 0x63, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x65, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x64, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x5e, + 0x01, + 0x00, + 0x00, + 0x65, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x67, + 0x01, + 0x00, + 0x00, + 0x5e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x68, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x69, + 0x01, + 0x00, + 0x00, + 0x67, + 0x01, + 0x00, + 0x00, + 0x68, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x6a, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x69, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x66, + 0x01, + 0x00, + 0x00, + 0x6a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x6c, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0x6c, + 0x01, + 0x00, + 0x00, + 0xd4, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x6d, + 0x01, + 0x00, + 0x00, + 0x6f, + 0x01, + 0x00, + 0x00, + 0x72, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x6f, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x71, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x71, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x72, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x73, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x73, + 0x01, + 0x00, + 0x00, + 0x74, + 0x01, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x75, + 0x01, + 0x00, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x77, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x79, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x58, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0x7a, + 0x01, + 0x00, + 0x00, + 0x7b, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x7c, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x7d, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x78, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0x76, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x7e, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x70, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x6e, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x7f, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0x66, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x07, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x83, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x81, + 0x01, + 0x00, + 0x00, + 0x82, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x83, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x86, + 0x01, + 0x00, + 0x00, + 0x80, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x85, + 0x01, + 0x00, + 0x00, + 0x86, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x84, + 0x01, + 0x00, + 0x00, + 0x87, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x88, + 0x01, + 0x00, + 0x00, + 0x84, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x89, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x52, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8a, + 0x01, + 0x00, + 0x00, + 0x89, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8b, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x88, + 0x01, + 0x00, + 0x00, + 0x8a, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x8c, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x8d, + 0x01, + 0x00, + 0x00, + 0x8c, + 0x01, + 0x00, + 0x00, + 0x8b, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x8d, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x57, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x8e, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x41, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x8f, + 0x01, + 0x00, + 0x00, + 0x8e, + 0x01, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0x90, + 0x01, + 0x00, + 0x00, + 0x8f, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0x92, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0x90, + 0x01, + 0x00, + 0x00, + 0x91, + 0x01, + 0x00, + 0x00, + 0x92, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x91, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x94, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x97, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x94, + 0x01, + 0x00, + 0x00, + 0x96, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x93, + 0x01, + 0x00, + 0x00, + 0x97, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x98, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x99, + 0x01, + 0x00, + 0x00, + 0x93, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0x9a, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x41, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x9b, + 0x01, + 0x00, + 0x00, + 0x9a, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x9c, + 0x01, + 0x00, + 0x00, + 0x9b, + 0x01, + 0x00, + 0x00, + 0x9b, + 0x01, + 0x00, + 0x00, + 0x9b, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x9d, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x98, + 0x01, + 0x00, + 0x00, + 0x99, + 0x01, + 0x00, + 0x00, + 0x9c, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x9d, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0x92, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x92, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0x9f, + 0x01, + 0x00, + 0x00, + 0x6b, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xa0, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xa1, + 0x01, + 0x00, + 0x00, + 0x9f, + 0x01, + 0x00, + 0x00, + 0xa0, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x9e, + 0x01, + 0x00, + 0x00, + 0xa1, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xa3, + 0x01, + 0x00, + 0x00, + 0x9e, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x69, + 0x00, + 0x00, + 0x00, + 0xa4, + 0x01, + 0x00, + 0x00, + 0x9e, + 0x01, + 0x00, + 0x00, + 0x94, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa5, + 0x01, + 0x00, + 0x00, + 0xa3, + 0x01, + 0x00, + 0x00, + 0xa4, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xa6, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xc1, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa7, + 0x01, + 0x00, + 0x00, + 0xa6, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x01, + 0x00, + 0x00, + 0xa5, + 0x01, + 0x00, + 0x00, + 0xa7, + 0x01, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xa9, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xa8, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xa2, + 0x01, + 0x00, + 0x00, + 0xa9, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x01, + 0x00, + 0x00, + 0xa2, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xab, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0xaa, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xac, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xad, + 0x01, + 0x00, + 0x00, + 0xac, + 0x01, + 0x00, + 0x00, + 0xab, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0xad, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xaf, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xae, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xb0, + 0x01, + 0x00, + 0x00, + 0xaf, + 0x01, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xb1, + 0x01, + 0x00, + 0x00, + 0xb0, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xb3, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xb1, + 0x01, + 0x00, + 0x00, + 0xb2, + 0x01, + 0x00, + 0x00, + 0xb3, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xb2, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0xb7, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x01, + 0x00, + 0x00, + 0xb6, + 0x01, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xb9, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xbb, + 0x01, + 0x00, + 0x00, + 0xb9, + 0x01, + 0x00, + 0x00, + 0xba, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xbc, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0xbb, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0xbc, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0xbf, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xc0, + 0x01, + 0x00, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xc1, + 0x01, + 0x00, + 0x00, + 0xc0, + 0x01, + 0x00, + 0x00, + 0xba, + 0x01, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xc3, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xc1, + 0x01, + 0x00, + 0x00, + 0xc2, + 0x01, + 0x00, + 0x00, + 0xc5, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc2, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xc4, + 0x01, + 0x00, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xc4, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xc3, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc5, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xc6, + 0x01, + 0x00, + 0x00, + 0xb4, + 0x01, + 0x00, + 0x00, + 0xb8, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xc8, + 0x01, + 0x00, + 0x00, + 0xc6, + 0x01, + 0x00, + 0x00, + 0xc7, + 0x01, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xca, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xc8, + 0x01, + 0x00, + 0x00, + 0xc9, + 0x01, + 0x00, + 0x00, + 0xcc, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc9, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xcb, + 0x01, + 0x00, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcb, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xca, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xcc, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xcd, + 0x01, + 0x00, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xcd, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xca, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xca, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xc3, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xc3, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xce, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xcf, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd0, + 0x01, + 0x00, + 0x00, + 0xbd, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd1, + 0x01, + 0x00, + 0x00, + 0xcf, + 0x01, + 0x00, + 0x00, + 0xd0, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xd2, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xae, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd3, + 0x01, + 0x00, + 0x00, + 0xd2, + 0x01, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd4, + 0x01, + 0x00, + 0x00, + 0xd3, + 0x01, + 0x00, + 0x00, + 0xd3, + 0x01, + 0x00, + 0x00, + 0xd3, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xd5, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0xce, + 0x01, + 0x00, + 0x00, + 0xd1, + 0x01, + 0x00, + 0x00, + 0xd4, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0xd5, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xb3, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xb3, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xd7, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xd6, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xd8, + 0x01, + 0x00, + 0x00, + 0xd7, + 0x01, + 0x00, + 0x00, + 0xba, + 0x00, + 0x05, + 0x00, + 0x77, + 0x00, + 0x00, + 0x00, + 0xd9, + 0x01, + 0x00, + 0x00, + 0xd8, + 0x01, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0xf7, + 0x00, + 0x03, + 0x00, + 0xdb, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xfa, + 0x00, + 0x04, + 0x00, + 0xd9, + 0x01, + 0x00, + 0x00, + 0xda, + 0x01, + 0x00, + 0x00, + 0xdb, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xda, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xdd, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0x28, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xde, + 0x01, + 0x00, + 0x00, + 0xdd, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe0, + 0x01, + 0x00, + 0x00, + 0xde, + 0x01, + 0x00, + 0x00, + 0xdf, + 0x01, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe1, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0xe0, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe2, + 0x01, + 0x00, + 0x00, + 0xe1, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe3, + 0x01, + 0x00, + 0x00, + 0xe2, + 0x01, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xdc, + 0x01, + 0x00, + 0x00, + 0xe3, + 0x01, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x74, + 0x00, + 0x00, + 0x00, + 0xe4, + 0x01, + 0x00, + 0x00, + 0x71, + 0x00, + 0x00, + 0x00, + 0xd6, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe5, + 0x01, + 0x00, + 0x00, + 0xe4, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe7, + 0x01, + 0x00, + 0x00, + 0xe5, + 0x01, + 0x00, + 0x00, + 0xe6, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe8, + 0x01, + 0x00, + 0x00, + 0xdc, + 0x01, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xe9, + 0x01, + 0x00, + 0x00, + 0xe7, + 0x01, + 0x00, + 0x00, + 0xe8, + 0x01, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xea, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0xe9, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xeb, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x8e, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xec, + 0x01, + 0x00, + 0x00, + 0xeb, + 0x01, + 0x00, + 0x00, + 0xea, + 0x01, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0xec, + 0x01, + 0x00, + 0x00, + 0xf9, + 0x00, + 0x02, + 0x00, + 0xdb, + 0x01, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0xdb, + 0x01, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0xed, + 0x01, + 0x00, + 0x00, + 0x16, + 0x01, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xee, + 0x01, + 0x00, + 0x00, + 0xed, + 0x01, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xef, + 0x01, + 0x00, + 0x00, + 0xed, + 0x01, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0xf0, + 0x01, + 0x00, + 0x00, + 0xed, + 0x01, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x07, + 0x00, + 0xa8, + 0x00, + 0x00, + 0x00, + 0xf1, + 0x01, + 0x00, + 0x00, + 0xee, + 0x01, + 0x00, + 0x00, + 0xef, + 0x01, + 0x00, + 0x00, + 0xf0, + 0x01, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0xaa, + 0x00, + 0x00, + 0x00, + 0xf1, + 0x01, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x01, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x33, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x35, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x34, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x00, + 0x00, + 0x3a, + 0x00, + 0x00, + 0x00, + 0x3c, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x00, + 0x00, + 0x39, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x40, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x3f, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x40, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x37, + 0x00, + 0x03, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x44, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x45, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x49, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x4b, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4d, + 0x00, + 0x00, + 0x00, + 0x4c, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x4d, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x00, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x00, + 0x00, + 0x4f, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x52, + 0x00, + 0x00, + 0x00, + 0x4e, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0x00, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x56, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x53, + 0x00, + 0x00, + 0x00, + 0x56, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x4a, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x00, + 0x00, + 0x00, + 0x58, + 0x00, + 0x00, + 0x00, + 0x59, + 0x00, + 0x00, + 0x00, + 0x83, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0x00, + 0x5a, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x43, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5e, + 0x00, + 0x00, + 0x00, + 0x46, + 0x00, + 0x00, + 0x00, + 0x85, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x5f, + 0x00, + 0x00, + 0x00, + 0x5d, + 0x00, + 0x00, + 0x00, + 0x5e, + 0x00, + 0x00, + 0x00, + 0x81, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x60, + 0x00, + 0x00, + 0x00, + 0x5c, + 0x00, + 0x00, + 0x00, + 0x5f, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x52, + 0x00, + 0x00, + 0x00, + 0x5b, + 0x00, + 0x00, + 0x00, + 0x60, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x62, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x65, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x63, + 0x00, + 0x00, + 0x00, + 0x0c, + 0x00, + 0x08, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x66, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x61, + 0x00, + 0x00, + 0x00, + 0x64, + 0x00, + 0x00, + 0x00, + 0x65, + 0x00, + 0x00, + 0x00, + 0xfe, + 0x00, + 0x02, + 0x00, + 0x66, + 0x00, + 0x00, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, +}; +static const size_t kpostfx_frag_spv_size = 11712; diff --git a/source/core/rendering/sdl3gpu/postfx_vert_spv.h b/source/core/rendering/sdl3gpu/postfx_vert_spv.h new file mode 100644 index 0000000..b5c80f9 --- /dev/null +++ b/source/core/rendering/sdl3gpu/postfx_vert_spv.h @@ -0,0 +1,1450 @@ +#pragma once +#include +#include +static const uint8_t kpostfx_vert_spv[] = { + 0x03, + 0x02, + 0x23, + 0x07, + 0x00, + 0x00, + 0x01, + 0x00, + 0x0b, + 0x00, + 0x0d, + 0x00, + 0x33, + 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, + 0x08, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x01, + 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, + 0x04, + 0x00, + 0x08, + 0x00, + 0x47, + 0x4c, + 0x5f, + 0x47, + 0x4f, + 0x4f, + 0x47, + 0x4c, + 0x45, + 0x5f, + 0x69, + 0x6e, + 0x63, + 0x6c, + 0x75, + 0x64, + 0x65, + 0x5f, + 0x64, + 0x69, + 0x72, + 0x65, + 0x63, + 0x74, + 0x69, + 0x76, + 0x65, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x67, + 0x6c, + 0x5f, + 0x50, + 0x65, + 0x72, + 0x56, + 0x65, + 0x72, + 0x74, + 0x65, + 0x78, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x06, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x67, + 0x6c, + 0x5f, + 0x50, + 0x6f, + 0x73, + 0x69, + 0x74, + 0x69, + 0x6f, + 0x6e, + 0x00, + 0x06, + 0x00, + 0x07, + 0x00, + 0x0b, + 0x00, + 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, + 0x0b, + 0x00, + 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, + 0x0b, + 0x00, + 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, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x67, + 0x6c, + 0x5f, + 0x56, + 0x65, + 0x72, + 0x74, + 0x65, + 0x78, + 0x49, + 0x6e, + 0x64, + 0x65, + 0x78, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0x69, + 0x6e, + 0x64, + 0x65, + 0x78, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x76, + 0x5f, + 0x75, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x69, + 0x6e, + 0x64, + 0x65, + 0x78, + 0x61, + 0x62, + 0x6c, + 0x65, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x03, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x48, + 0x00, + 0x05, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x03, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x04, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x06, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x1c, + 0x00, + 0x04, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0xbf, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x40, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x15, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x06, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x14, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x19, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x80, + 0x3f, + 0x20, + 0x00, + 0x04, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x28, + 0x00, + 0x00, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x04, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x40, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x2b, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x05, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x06, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x2a, + 0x00, + 0x00, + 0x00, + 0x2c, + 0x00, + 0x00, + 0x00, + 0x2d, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x1c, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0x18, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0x1d, + 0x00, + 0x00, + 0x00, + 0x1b, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x1f, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x51, + 0x00, + 0x05, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x50, + 0x00, + 0x07, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x23, + 0x00, + 0x00, + 0x00, + 0x24, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x00, + 0x00, + 0x22, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x26, + 0x00, + 0x00, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x27, + 0x00, + 0x00, + 0x00, + 0x25, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x1a, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x2e, + 0x00, + 0x00, + 0x00, + 0x41, + 0x00, + 0x05, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x30, + 0x00, + 0x00, + 0x00, + 0x2f, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0x31, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x29, + 0x00, + 0x00, + 0x00, + 0x32, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x01, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, +}; +static const size_t kpostfx_vert_spv_size = 1444; diff --git a/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp b/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp new file mode 100644 index 0000000..dbce7fc --- /dev/null +++ b/source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp @@ -0,0 +1,1333 @@ +#include "core/rendering/sdl3gpu/sdl3gpu_shader.hpp" + +#include + +#include // std::min, std::max, std::floor +#include // std::floor +#include // memcpy, strlen +#include // std::cout + +#ifndef __APPLE__ +#include "core/rendering/sdl3gpu/crtpi_frag_spv.h" +#include "core/rendering/sdl3gpu/downscale_frag_spv.h" +#include "core/rendering/sdl3gpu/postfx_frag_spv.h" +#include "core/rendering/sdl3gpu/postfx_vert_spv.h" +#include "core/rendering/sdl3gpu/upscale_frag_spv.h" +#endif + +#ifdef __APPLE__ +// ============================================================================ +// MSL shaders (Metal Shading Language) — macOS +// ============================================================================ + +// NOLINTBEGIN(readability-identifier-naming) +static const char* POSTFX_VERT_MSL = R"( +#include +using namespace metal; + +struct PostVOut { + float4 pos [[position]]; + float2 uv; +}; + +vertex PostVOut postfx_vs(uint vid [[vertex_id]]) { + const float2 positions[3] = { {-1.0, -1.0}, {3.0, -1.0}, {-1.0, 3.0} }; + const float2 uvs[3] = { { 0.0, 1.0}, {2.0, 1.0}, { 0.0,-1.0} }; + PostVOut out; + out.pos = float4(positions[vid], 0.0, 1.0); + out.uv = uvs[vid]; + return out; +} +)"; + +static const char* POSTFX_FRAG_MSL = R"( +#include +using namespace metal; + +struct PostVOut { + float4 pos [[position]]; + float2 uv; +}; + +struct PostFXUniforms { + float vignette_strength; + float chroma_strength; + float scanline_strength; + float screen_height; + float mask_strength; + float gamma_strength; + float curvature; + float bleeding; + float pixel_scale; + float time; + float oversample; // 1.0 = sin SS, 3.0 = 3× supersampling + float flicker; // 0 = off, 1 = phosphor flicker ~50 Hz +}; + +// YCbCr helpers for NTSC bleeding +static float3 rgb_to_ycc(float3 rgb) { + return float3( + 0.299f*rgb.r + 0.587f*rgb.g + 0.114f*rgb.b, + -0.169f*rgb.r - 0.331f*rgb.g + 0.500f*rgb.b + 0.5f, + 0.500f*rgb.r - 0.419f*rgb.g - 0.081f*rgb.b + 0.5f + ); +} +static float3 ycc_to_rgb(float3 ycc) { + float y = ycc.x; + float cb = ycc.y - 0.5f; + float cr = ycc.z - 0.5f; + return clamp(float3( + y + 1.402f*cr, + y - 0.344f*cb - 0.714f*cr, + y + 1.772f*cb + ), 0.0f, 1.0f); +} + +fragment float4 postfx_fs(PostVOut in [[stage_in]], + texture2d scene [[texture(0)]], + sampler samp [[sampler(0)]], + constant PostFXUniforms& u [[buffer(0)]]) { + float2 uv = in.uv; + + // Curvatura barrel CRT + if (u.curvature > 0.0f) { + float2 c = uv - 0.5f; + float rsq = dot(c, c); + float2 dist = float2(0.05f, 0.1f) * u.curvature; + float2 barrelScale = 1.0f - 0.23f * dist; + c += c * (dist * rsq); + c *= barrelScale; + if (abs(c.x) >= 0.5f || abs(c.y) >= 0.5f) { + return float4(0.0f, 0.0f, 0.0f, 1.0f); + } + uv = c + 0.5f; + } + + // Muestra base + float3 base = scene.sample(samp, uv).rgb; + + // Sangrado NTSC — difuminado horizontal de crominancia. + // step = 1 pixel de juego en espacio UV (corrige SS: scene.get_width() = game_w * oversample). + float3 colour; + if (u.bleeding > 0.0f) { + float tw = float(scene.get_width()); + float step = u.oversample / tw; // 1 pixel lógico en UV + float3 ycc = rgb_to_ycc(base); + float3 ycc_l2 = rgb_to_ycc(scene.sample(samp, uv - float2(2.0f*step, 0.0f)).rgb); + float3 ycc_l1 = rgb_to_ycc(scene.sample(samp, uv - float2(1.0f*step, 0.0f)).rgb); + float3 ycc_r1 = rgb_to_ycc(scene.sample(samp, uv + float2(1.0f*step, 0.0f)).rgb); + float3 ycc_r2 = rgb_to_ycc(scene.sample(samp, uv + float2(2.0f*step, 0.0f)).rgb); + ycc.yz = (ycc_l2.yz + ycc_l1.yz*2.0f + ycc.yz*2.0f + ycc_r1.yz*2.0f + ycc_r2.yz) / 8.0f; + colour = mix(base, ycc_to_rgb(ycc), u.bleeding); + } else { + colour = base; + } + + // Aberración cromática (drift animado con time para efecto NTSC real) + float ca = u.chroma_strength * 0.005f * (1.0f + 0.15f * sin(u.time * 7.3f)); + colour.r = scene.sample(samp, uv + float2(ca, 0.0f)).r; + colour.b = scene.sample(samp, uv - float2(ca, 0.0f)).b; + + // Corrección gamma (linealizar antes de scanlines, codificar después) + if (u.gamma_strength > 0.0f) { + float3 lin = pow(colour, float3(2.4f)); + colour = mix(colour, lin, u.gamma_strength); + } + + // Scanlines — proporción 2/3 brillantes + 1/3 oscuras por fila lógica. + // Casos especiales: 1 subfila → sin efecto; 2 subfilas → 1+1 (50/50). + // Constantes ajustables: + const float SCAN_DARK_RATIO = 0.333f; // fracción de subfilas oscuras (ps >= 3) + const float SCAN_DARK_FLOOR = 0.42f; // multiplicador de brillo de subfilas oscuras + if (u.scanline_strength > 0.0f) { + float ps = max(1.0f, round(u.pixel_scale)); + float frac_in_row = fract(uv.y * u.screen_height); + float row_pos = floor(frac_in_row * ps); + float bright_rows = (ps < 2.0f) ? ps : ((ps < 3.0f) ? 1.0f : floor(ps * (1.0f - SCAN_DARK_RATIO))); + float is_dark = step(bright_rows, row_pos); + float scan = mix(1.0f, SCAN_DARK_FLOOR, is_dark); + colour *= mix(1.0f, scan, u.scanline_strength); + } + + if (u.gamma_strength > 0.0f) { + float3 enc = pow(colour, float3(1.0f/2.2f)); + colour = mix(colour, enc, u.gamma_strength); + } + + // Viñeta + float2 d = uv - 0.5f; + float vignette = 1.0f - dot(d, d) * u.vignette_strength; + colour *= clamp(vignette, 0.0f, 1.0f); + + // Máscara de fósforo RGB — después de scanlines (orden original): + // filas brillantes saturadas → máscara invisible, filas oscuras → RGB visible. + if (u.mask_strength > 0.0f) { + float whichMask = fract(in.pos.x * 0.3333333f); + float3 mask = float3(0.80f); + if (whichMask < 0.3333333f) mask.x = 1.0f; + else if (whichMask < 0.6666667f) mask.y = 1.0f; + else mask.z = 1.0f; + colour = mix(colour, colour * mask, u.mask_strength); + } + + // Parpadeo de fósforo CRT (~50 Hz) + if (u.flicker > 0.0f) { + float flicker_wave = sin(u.time * 100.0f) * 0.5f + 0.5f; + colour *= 1.0f - u.flicker * 0.04f * flicker_wave; + } + + return float4(colour, 1.0f); +} +)"; +static const char* UPSCALE_FRAG_MSL = R"( +#include +using namespace metal; +struct VertOut { float4 pos [[position]]; float2 uv; }; +fragment float4 upscale_fs(VertOut in [[stage_in]], + texture2d scene [[texture(0)]], + sampler smp [[sampler(0)]]) +{ + return scene.sample(smp, in.uv); +} +)"; + +static const char* DOWNSCALE_FRAG_MSL = R"( +#include +using namespace metal; +struct VertOut { float4 pos [[position]]; float2 uv; }; +struct DownscaleUniforms { int algorithm; float pad0; float pad1; float pad2; }; + +static float lanczos_w(float t, float a) { + t = abs(t); + if (t < 0.0001f) { return 1.0f; } + if (t >= a) { return 0.0f; } + const float PI = 3.14159265358979f; + float pt = PI * t; + return (a * sin(pt) * sin(pt / a)) / (pt * pt); +} + +fragment float4 downscale_fs(VertOut in [[stage_in]], + texture2d source [[texture(0)]], + sampler smp [[sampler(0)]], + constant DownscaleUniforms& u [[buffer(0)]]) +{ + float2 src_size = float2(source.get_width(), source.get_height()); + float2 p = in.uv * src_size; + float2 p_floor = floor(p); + float a = (u.algorithm == 0) ? 2.0f : 3.0f; + int win = int(a); + float4 color = float4(0.0f); + float weight_sum = 0.0f; + for (int j = -win; j <= win; j++) { + for (int i = -win; i <= win; i++) { + float2 tap_center = p_floor + float2(float(i), float(j)) + 0.5f; + float2 offset = tap_center - p; + float w = lanczos_w(offset.x, a) * lanczos_w(offset.y, a); + color += source.sample(smp, tap_center / src_size) * w; + weight_sum += w; + } + } + return (weight_sum > 0.0f) ? (color / weight_sum) : float4(0.0f, 0.0f, 0.0f, 1.0f); +} +)"; +static const char* CRTPI_FRAG_MSL = R"( +#include +using namespace metal; + +struct PostVOut { + float4 pos [[position]]; + float2 uv; +}; + +struct CrtPiUniforms { + // vec4 #0 + float scanline_weight; + float scanline_gap_brightness; + float bloom_factor; + float input_gamma; + // vec4 #1 + float output_gamma; + float mask_brightness; + float curvature_x; + float curvature_y; + // vec4 #2 + int mask_type; + int enable_scanlines; + int enable_multisample; + int enable_gamma; + // vec4 #3 + int enable_curvature; + int enable_sharper; + float texture_width; + float texture_height; +}; + +static float2 crtpi_distort(float2 coord, float2 screen_scale, float cx, float cy) { + float2 curvature = float2(cx, cy); + float2 barrel_scale = 1.0f - (0.23f * curvature); + coord *= screen_scale; + coord -= 0.5f; + float rsq = coord.x * coord.x + coord.y * coord.y; + coord += coord * (curvature * rsq); + coord *= barrel_scale; + if (abs(coord.x) >= 0.5f || abs(coord.y) >= 0.5f) { return float2(-1.0f); } + coord += 0.5f; + coord /= screen_scale; + return coord; +} + +static float crtpi_scan_weight(float dist, float sw, float gap) { + return max(1.0f - dist * dist * sw, gap); +} + +static float crtpi_scan_line(float dy, float filter_w, float sw, float gap, bool ms) { + float w = crtpi_scan_weight(dy, sw, gap); + if (ms) { + w += crtpi_scan_weight(dy - filter_w, sw, gap); + w += crtpi_scan_weight(dy + filter_w, sw, gap); + w *= 0.3333333f; + } + return w; +} + +fragment float4 crtpi_fs(PostVOut in [[stage_in]], + texture2d tex [[texture(0)]], + sampler samp [[sampler(0)]], + constant CrtPiUniforms& u [[buffer(0)]]) { + float2 tex_size = float2(u.texture_width, u.texture_height); + float filter_width = (768.0f / u.texture_height) / 3.0f; + float2 texcoord = in.uv; + + if (u.enable_curvature != 0) { + texcoord = crtpi_distort(texcoord, float2(1.0f, 1.0f), u.curvature_x, u.curvature_y); + if (texcoord.x < 0.0f) { return float4(0.0f, 0.0f, 0.0f, 1.0f); } + } + + float2 coord_in_pixels = texcoord * tex_size; + float2 tc; + float scan_weight; + + if (u.enable_sharper != 0) { + float2 temp = floor(coord_in_pixels) + 0.5f; + tc = temp / tex_size; + float2 deltas = coord_in_pixels - temp; + scan_weight = crtpi_scan_line(deltas.y, filter_width, u.scanline_weight, u.scanline_gap_brightness, u.enable_multisample != 0); + float2 signs = sign(deltas); + deltas.x *= 2.0f; + deltas = deltas * deltas; + deltas.y = deltas.y * deltas.y; + deltas.x *= 0.5f; + deltas.y *= 8.0f; + deltas /= tex_size; + deltas *= signs; + tc = tc + deltas; + } else { + float temp_y = floor(coord_in_pixels.y) + 0.5f; + float y_coord = temp_y / tex_size.y; + float dy = coord_in_pixels.y - temp_y; + scan_weight = crtpi_scan_line(dy, filter_width, u.scanline_weight, u.scanline_gap_brightness, u.enable_multisample != 0); + float sign_y = sign(dy); + dy = dy * dy; + dy = dy * dy; + dy *= 8.0f; + dy /= tex_size.y; + dy *= sign_y; + tc = float2(texcoord.x, y_coord + dy); + } + + float3 colour = tex.sample(samp, tc).rgb; + + if (u.enable_scanlines != 0) { + if (u.enable_gamma != 0) { colour = pow(colour, float3(u.input_gamma)); } + colour *= scan_weight * u.bloom_factor; + if (u.enable_gamma != 0) { colour = pow(colour, float3(1.0f / u.output_gamma)); } + } + + if (u.mask_type == 1) { + float wm = fract(in.pos.x * 0.5f); + float3 mask = (wm < 0.5f) ? float3(u.mask_brightness, 1.0f, u.mask_brightness) + : float3(1.0f, u.mask_brightness, 1.0f); + colour *= mask; + } else if (u.mask_type == 2) { + float wm = fract(in.pos.x * 0.3333333f); + float3 mask = float3(u.mask_brightness); + if (wm < 0.3333333f) mask.x = 1.0f; + else if (wm < 0.6666666f) mask.y = 1.0f; + else mask.z = 1.0f; + colour *= mask; + } + + return float4(colour, 1.0f); +} +)"; +// NOLINTEND(readability-identifier-naming) + +#endif // __APPLE__ + +namespace Rendering { + + // --------------------------------------------------------------------------- + // Destructor + // --------------------------------------------------------------------------- + SDL3GPUShader::~SDL3GPUShader() { + destroy(); + } + + // --------------------------------------------------------------------------- + // init + // --------------------------------------------------------------------------- + auto SDL3GPUShader::init(SDL_Window* window, + SDL_Texture* texture, + const std::string& /*vertex_source*/, + const std::string& /*fragment_source*/) -> bool { + // Si ya estaba inicializado (p.ej. al cambiar borde), liberar recursos + // de textura/pipeline pero mantener el device vivo para evitar conflictos + // con SDL_Renderer en Windows/Vulkan. + if (is_initialized_) { + cleanup(); + } + + window_ = window; + + // Dimensions from the SDL_Texture placeholder + float fw = 0.0F; + float fh = 0.0F; + SDL_GetTextureSize(texture, &fw, &fh); + game_width_ = static_cast(fw); + game_height_ = static_cast(fh); + uniforms_.screen_height = static_cast(game_height_); + uniforms_.oversample = static_cast(oversample_); + + // ---------------------------------------------------------------- + // 1. Create GPU device (solo si no existe ya) + // ---------------------------------------------------------------- + if (preferred_driver_ == "none") { + SDL_Log("SDL3GPUShader: GPU disabled by config, using SDL_Renderer fallback"); + driver_name_ = ""; // vacío → RenderInfo mostrará "sdl" + return false; + } + if (device_ == nullptr) { +#ifdef __APPLE__ + const SDL_GPUShaderFormat PREFERRED = SDL_GPU_SHADERFORMAT_MSL | SDL_GPU_SHADERFORMAT_METALLIB; +#else + const SDL_GPUShaderFormat PREFERRED = SDL_GPU_SHADERFORMAT_SPIRV; +#endif + const char* preferred = preferred_driver_.empty() ? nullptr : preferred_driver_.c_str(); + device_ = SDL_CreateGPUDevice(PREFERRED, false, preferred); + if (device_ == nullptr && preferred != nullptr) { + SDL_Log("SDL3GPUShader: driver '%s' not available, falling back to auto", preferred); + device_ = SDL_CreateGPUDevice(PREFERRED, false, nullptr); + } + if (device_ == nullptr) { + SDL_Log("SDL3GPUShader: SDL_CreateGPUDevice failed: %s", SDL_GetError()); + return false; + } + driver_name_ = SDL_GetGPUDeviceDriver(device_); + std::cout << "GPU Driver : " << driver_name_ << '\n'; + + // ---------------------------------------------------------------- + // 2. Claim window (una sola vez — no liberar hasta destroy()) + // ---------------------------------------------------------------- + if (!SDL_ClaimWindowForGPUDevice(device_, window_)) { + SDL_Log("SDL3GPUShader: SDL_ClaimWindowForGPUDevice failed: %s", SDL_GetError()); + SDL_DestroyGPUDevice(device_); + device_ = nullptr; + return false; + } + SDL_SetGPUSwapchainParameters(device_, window_, SDL_GPU_SWAPCHAINCOMPOSITION_SDR, bestPresentMode(vsync_)); + } + + // ---------------------------------------------------------------- + // 3. Create scene texture (upload target, always game resolution) + // Format: B8G8R8A8_UNORM matches SDL ARGB8888 byte layout on LE + // ---------------------------------------------------------------- + SDL_GPUTextureCreateInfo tex_info = {}; + tex_info.type = SDL_GPU_TEXTURETYPE_2D; + tex_info.format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; + tex_info.usage = SDL_GPU_TEXTUREUSAGE_SAMPLER; + tex_info.width = static_cast(game_width_); + tex_info.height = static_cast(game_height_); + tex_info.layer_count_or_depth = 1; + tex_info.num_levels = 1; + scene_texture_ = SDL_CreateGPUTexture(device_, &tex_info); + if (scene_texture_ == nullptr) { + SDL_Log("SDL3GPUShader: failed to create scene texture: %s", SDL_GetError()); + cleanup(); + return false; + } + + // scaled_texture_ se creará en el primer render() una vez conocido el zoom de ventana + ss_factor_ = 0; + + // ---------------------------------------------------------------- + // 4. Create upload transfer buffer (CPU → GPU, always game resolution) + // ---------------------------------------------------------------- + SDL_GPUTransferBufferCreateInfo tb_info = {}; + tb_info.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD; + tb_info.size = static_cast(game_width_ * game_height_ * 4); + upload_buffer_ = SDL_CreateGPUTransferBuffer(device_, &tb_info); + if (upload_buffer_ == nullptr) { + SDL_Log("SDL3GPUShader: failed to create upload buffer: %s", SDL_GetError()); + cleanup(); + return false; + } + + // ---------------------------------------------------------------- + // 5. Create samplers: NEAREST (pixel art) + LINEAR (supersampling) + // ---------------------------------------------------------------- + SDL_GPUSamplerCreateInfo samp_info = {}; + samp_info.min_filter = SDL_GPU_FILTER_NEAREST; + samp_info.mag_filter = SDL_GPU_FILTER_NEAREST; + samp_info.mipmap_mode = SDL_GPU_SAMPLERMIPMAPMODE_NEAREST; + samp_info.address_mode_u = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE; + samp_info.address_mode_v = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE; + samp_info.address_mode_w = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE; + sampler_ = SDL_CreateGPUSampler(device_, &samp_info); + if (sampler_ == nullptr) { + SDL_Log("SDL3GPUShader: failed to create sampler: %s", SDL_GetError()); + cleanup(); + return false; + } + + SDL_GPUSamplerCreateInfo lsamp_info = {}; + lsamp_info.min_filter = SDL_GPU_FILTER_LINEAR; + lsamp_info.mag_filter = SDL_GPU_FILTER_LINEAR; + lsamp_info.mipmap_mode = SDL_GPU_SAMPLERMIPMAPMODE_NEAREST; + lsamp_info.address_mode_u = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE; + lsamp_info.address_mode_v = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE; + lsamp_info.address_mode_w = SDL_GPU_SAMPLERADDRESSMODE_CLAMP_TO_EDGE; + linear_sampler_ = SDL_CreateGPUSampler(device_, &lsamp_info); + if (linear_sampler_ == nullptr) { + SDL_Log("SDL3GPUShader: failed to create linear sampler: %s", SDL_GetError()); + cleanup(); + return false; + } + + // ---------------------------------------------------------------- + // 6. Create PostFX graphics pipeline + // ---------------------------------------------------------------- + if (!createPipeline()) { + cleanup(); + return false; + } + + // ---------------------------------------------------------------- + // 7. Create CrtPi graphics pipeline + // ---------------------------------------------------------------- + if (!createCrtPiPipeline()) { + cleanup(); + return false; + } + + is_initialized_ = true; + std::cout << "GPU Shader : initialized OK — game " << game_width_ << 'x' << game_height_ << ", oversample " << oversample_ << '\n'; + return true; + } + + // --------------------------------------------------------------------------- + // createPipeline + // --------------------------------------------------------------------------- + auto SDL3GPUShader::createPipeline() -> bool { // NOLINT(readability-function-cognitive-complexity) + const SDL_GPUTextureFormat SWAPCHAIN_FMT = SDL_GetGPUSwapchainTextureFormat(device_, window_); + + // ---- PostFX pipeline (scene/scaled → swapchain) ---- +#ifdef __APPLE__ + SDL_GPUShader* vert = createShaderMSL(device_, POSTFX_VERT_MSL, "postfx_vs", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* frag = createShaderMSL(device_, POSTFX_FRAG_MSL, "postfx_fs", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#else + SDL_GPUShader* vert = createShaderSPIRV(device_, kpostfx_vert_spv, kpostfx_vert_spv_size, "main", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* frag = createShaderSPIRV(device_, kpostfx_frag_spv, kpostfx_frag_spv_size, "main", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#endif + + if ((vert == nullptr) || (frag == nullptr)) { + SDL_Log("SDL3GPUShader: failed to compile PostFX shaders"); + if (vert != nullptr) { SDL_ReleaseGPUShader(device_, vert); } + if (frag != nullptr) { SDL_ReleaseGPUShader(device_, frag); } + return false; + } + + SDL_GPUColorTargetBlendState no_blend = {}; + no_blend.enable_blend = false; + no_blend.enable_color_write_mask = false; + + SDL_GPUColorTargetDescription color_target = {}; + color_target.format = SWAPCHAIN_FMT; + color_target.blend_state = no_blend; + + SDL_GPUVertexInputState no_input = {}; + + SDL_GPUGraphicsPipelineCreateInfo pipe_info = {}; + pipe_info.vertex_shader = vert; + pipe_info.fragment_shader = frag; + pipe_info.vertex_input_state = no_input; + pipe_info.primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST; + pipe_info.target_info.num_color_targets = 1; + pipe_info.target_info.color_target_descriptions = &color_target; + + pipeline_ = SDL_CreateGPUGraphicsPipeline(device_, &pipe_info); + + SDL_ReleaseGPUShader(device_, vert); + SDL_ReleaseGPUShader(device_, frag); + + if (pipeline_ == nullptr) { + SDL_Log("SDL3GPUShader: PostFX pipeline creation failed: %s", SDL_GetError()); + return false; + } + + // ---- Upscale pipeline (scene → scaled_texture_, nearest) ---- +#ifdef __APPLE__ + SDL_GPUShader* uvert = createShaderMSL(device_, POSTFX_VERT_MSL, "postfx_vs", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* ufrag = createShaderMSL(device_, UPSCALE_FRAG_MSL, "upscale_fs", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 0); +#else + SDL_GPUShader* uvert = createShaderSPIRV(device_, kpostfx_vert_spv, kpostfx_vert_spv_size, "main", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* ufrag = createShaderSPIRV(device_, kupscale_frag_spv, kupscale_frag_spv_size, "main", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 0); +#endif + + if ((uvert == nullptr) || (ufrag == nullptr)) { + SDL_Log("SDL3GPUShader: failed to compile upscale shaders"); + if (uvert != nullptr) { SDL_ReleaseGPUShader(device_, uvert); } + if (ufrag != nullptr) { SDL_ReleaseGPUShader(device_, ufrag); } + return false; + } + + SDL_GPUColorTargetDescription upscale_color_target = {}; + upscale_color_target.format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; + upscale_color_target.blend_state = no_blend; + + SDL_GPUGraphicsPipelineCreateInfo upscale_pipe_info = {}; + upscale_pipe_info.vertex_shader = uvert; + upscale_pipe_info.fragment_shader = ufrag; + upscale_pipe_info.vertex_input_state = no_input; + upscale_pipe_info.primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST; + upscale_pipe_info.target_info.num_color_targets = 1; + upscale_pipe_info.target_info.color_target_descriptions = &upscale_color_target; + + upscale_pipeline_ = SDL_CreateGPUGraphicsPipeline(device_, &upscale_pipe_info); + + SDL_ReleaseGPUShader(device_, uvert); + SDL_ReleaseGPUShader(device_, ufrag); + + if (upscale_pipeline_ == nullptr) { + SDL_Log("SDL3GPUShader: upscale pipeline creation failed: %s", SDL_GetError()); + return false; + } + + // ---- PostFX offscreen pipeline (scaled_texture_ → postfx_texture_, B8G8R8A8) ---- + // Mismos shaders que pipeline_ pero con formato de salida B8G8R8A8_UNORM para textura intermedia. +#ifdef __APPLE__ + SDL_GPUShader* ofvert = createShaderMSL(device_, POSTFX_VERT_MSL, "postfx_vs", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* offrag = createShaderMSL(device_, POSTFX_FRAG_MSL, "postfx_fs", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#else + SDL_GPUShader* ofvert = createShaderSPIRV(device_, kpostfx_vert_spv, kpostfx_vert_spv_size, "main", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* offrag = createShaderSPIRV(device_, kpostfx_frag_spv, kpostfx_frag_spv_size, "main", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#endif + + if ((ofvert == nullptr) || (offrag == nullptr)) { + SDL_Log("SDL3GPUShader: failed to compile PostFX offscreen shaders"); + if (ofvert != nullptr) { SDL_ReleaseGPUShader(device_, ofvert); } + if (offrag != nullptr) { SDL_ReleaseGPUShader(device_, offrag); } + return false; + } + + SDL_GPUColorTargetDescription offscreen_color_target = {}; + offscreen_color_target.format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; + offscreen_color_target.blend_state = no_blend; + + SDL_GPUGraphicsPipelineCreateInfo offscreen_pipe_info = {}; + offscreen_pipe_info.vertex_shader = ofvert; + offscreen_pipe_info.fragment_shader = offrag; + offscreen_pipe_info.vertex_input_state = no_input; + offscreen_pipe_info.primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST; + offscreen_pipe_info.target_info.num_color_targets = 1; + offscreen_pipe_info.target_info.color_target_descriptions = &offscreen_color_target; + + postfx_offscreen_pipeline_ = SDL_CreateGPUGraphicsPipeline(device_, &offscreen_pipe_info); + + SDL_ReleaseGPUShader(device_, ofvert); + SDL_ReleaseGPUShader(device_, offrag); + + if (postfx_offscreen_pipeline_ == nullptr) { + SDL_Log("SDL3GPUShader: PostFX offscreen pipeline creation failed: %s", SDL_GetError()); + return false; + } + + // ---- Downscale pipeline (postfx_texture_ → swapchain, Lanczos) ---- +#ifdef __APPLE__ + SDL_GPUShader* dvert = createShaderMSL(device_, POSTFX_VERT_MSL, "postfx_vs", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* dfrag = createShaderMSL(device_, DOWNSCALE_FRAG_MSL, "downscale_fs", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#else + SDL_GPUShader* dvert = createShaderSPIRV(device_, kpostfx_vert_spv, kpostfx_vert_spv_size, "main", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* dfrag = createShaderSPIRV(device_, kdownscale_frag_spv, kdownscale_frag_spv_size, "main", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#endif + + if ((dvert == nullptr) || (dfrag == nullptr)) { + SDL_Log("SDL3GPUShader: failed to compile downscale shaders"); + if (dvert != nullptr) { SDL_ReleaseGPUShader(device_, dvert); } + if (dfrag != nullptr) { SDL_ReleaseGPUShader(device_, dfrag); } + return false; + } + + SDL_GPUColorTargetDescription downscale_color_target = {}; + downscale_color_target.format = SWAPCHAIN_FMT; + downscale_color_target.blend_state = no_blend; + + SDL_GPUGraphicsPipelineCreateInfo downscale_pipe_info = {}; + downscale_pipe_info.vertex_shader = dvert; + downscale_pipe_info.fragment_shader = dfrag; + downscale_pipe_info.vertex_input_state = no_input; + downscale_pipe_info.primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST; + downscale_pipe_info.target_info.num_color_targets = 1; + downscale_pipe_info.target_info.color_target_descriptions = &downscale_color_target; + + downscale_pipeline_ = SDL_CreateGPUGraphicsPipeline(device_, &downscale_pipe_info); + + SDL_ReleaseGPUShader(device_, dvert); + SDL_ReleaseGPUShader(device_, dfrag); + + if (downscale_pipeline_ == nullptr) { + SDL_Log("SDL3GPUShader: downscale pipeline creation failed: %s", SDL_GetError()); + return false; + } + + return true; + } + + // --------------------------------------------------------------------------- + // createCrtPiPipeline — pipeline dedicado para el shader CRT-Pi. + // Usa el mismo vertex shader que postfx (fullscreen-triangle genérico). + // El fragment shader es específico para el algoritmo CRT-Pi. + // Sin supersampling ni Lanczos: va siempre directo al swapchain. + // --------------------------------------------------------------------------- + auto SDL3GPUShader::createCrtPiPipeline() -> bool { + const SDL_GPUTextureFormat SWAPCHAIN_FMT = SDL_GetGPUSwapchainTextureFormat(device_, window_); + +#ifdef __APPLE__ + SDL_GPUShader* vert = createShaderMSL(device_, POSTFX_VERT_MSL, "postfx_vs", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* frag = createShaderMSL(device_, CRTPI_FRAG_MSL, "crtpi_fs", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#else + SDL_GPUShader* vert = createShaderSPIRV(device_, kpostfx_vert_spv, kpostfx_vert_spv_size, "main", SDL_GPU_SHADERSTAGE_VERTEX, 0, 0); + SDL_GPUShader* frag = createShaderSPIRV(device_, kcrtpi_frag_spv, kcrtpi_frag_spv_size, "main", SDL_GPU_SHADERSTAGE_FRAGMENT, 1, 1); +#endif + + if ((vert == nullptr) || (frag == nullptr)) { + SDL_Log("SDL3GPUShader: failed to compile CrtPi shaders"); + if (vert != nullptr) { SDL_ReleaseGPUShader(device_, vert); } + if (frag != nullptr) { SDL_ReleaseGPUShader(device_, frag); } + return false; + } + + SDL_GPUColorTargetBlendState no_blend = {}; + no_blend.enable_blend = false; + no_blend.enable_color_write_mask = false; + + SDL_GPUColorTargetDescription color_target = {}; + color_target.format = SWAPCHAIN_FMT; + color_target.blend_state = no_blend; + + SDL_GPUVertexInputState no_input = {}; + + SDL_GPUGraphicsPipelineCreateInfo pipe_info = {}; + pipe_info.vertex_shader = vert; + pipe_info.fragment_shader = frag; + pipe_info.vertex_input_state = no_input; + pipe_info.primitive_type = SDL_GPU_PRIMITIVETYPE_TRIANGLELIST; + pipe_info.target_info.num_color_targets = 1; + pipe_info.target_info.color_target_descriptions = &color_target; + + crtpi_pipeline_ = SDL_CreateGPUGraphicsPipeline(device_, &pipe_info); + + SDL_ReleaseGPUShader(device_, vert); + SDL_ReleaseGPUShader(device_, frag); + + if (crtpi_pipeline_ == nullptr) { + SDL_Log("SDL3GPUShader: CrtPi pipeline creation failed: %s", SDL_GetError()); + return false; + } + + return true; + } + + // --------------------------------------------------------------------------- + // uploadPixels — copies ARGB8888 CPU pixels into the GPU transfer buffer. + // Con supersampling (oversample_ > 1) expande cada pixel del juego a un bloque + // oversample × oversample y hornea la scanline oscura en la última fila del bloque. + // --------------------------------------------------------------------------- + void SDL3GPUShader::uploadPixels(const Uint32* pixels, int width, int height) { + if (!is_initialized_ || (upload_buffer_ == nullptr)) { return; } + + void* mapped = SDL_MapGPUTransferBuffer(device_, upload_buffer_, false); + if (mapped == nullptr) { + SDL_Log("SDL3GPUShader: SDL_MapGPUTransferBuffer failed: %s", SDL_GetError()); + return; + } + + // Copia directa — el upscale lo hace la GPU en el primer render pass + std::memcpy(mapped, pixels, static_cast(width * height * 4)); + + SDL_UnmapGPUTransferBuffer(device_, upload_buffer_); + } + + // --------------------------------------------------------------------------- + // render — upload scene texture + PostFX pass → swapchain + // --------------------------------------------------------------------------- + void SDL3GPUShader::render() { // NOLINT(readability-function-cognitive-complexity) + if (!is_initialized_) { return; } + + // Paso 0: si SS activo, calcular el factor necesario según el zoom actual y recrear si cambió. + // Factor = primer múltiplo de 3 >= zoom (mín 3). Se recrea solo en saltos de factor. + if (oversample_ > 1 && game_height_ > 0) { + int win_w = 0; + int win_h = 0; + SDL_GetWindowSizeInPixels(window_, &win_w, &win_h); + const float ZOOM = static_cast(win_h) / static_cast(game_height_); + const int NEED_FACTOR = calcSsFactor(ZOOM); + if (NEED_FACTOR != ss_factor_) { + SDL_WaitForGPUIdle(device_); + recreateScaledTexture(NEED_FACTOR); + } + } + + SDL_GPUCommandBuffer* cmd = SDL_AcquireGPUCommandBuffer(device_); + if (cmd == nullptr) { + SDL_Log("SDL3GPUShader: SDL_AcquireGPUCommandBuffer failed: %s", SDL_GetError()); + return; + } + + // ---- Copy pass: transfer buffer → scene texture (siempre a resolución del juego) ---- + SDL_GPUCopyPass* copy = SDL_BeginGPUCopyPass(cmd); + if (copy != nullptr) { + SDL_GPUTextureTransferInfo src = {}; + src.transfer_buffer = upload_buffer_; + src.offset = 0; + src.pixels_per_row = static_cast(game_width_); + src.rows_per_layer = static_cast(game_height_); + + SDL_GPUTextureRegion dst = {}; + dst.texture = scene_texture_; + dst.w = static_cast(game_width_); + dst.h = static_cast(game_height_); + dst.d = 1; + + SDL_UploadToGPUTexture(copy, &src, &dst, false); + SDL_EndGPUCopyPass(copy); + } + + // ---- Upscale pass: scene_texture_ → scaled_texture_ (NEAREST o LINEAR según linear_upscale_) ---- + if (oversample_ > 1 && scaled_texture_ != nullptr && upscale_pipeline_ != nullptr) { + SDL_GPUColorTargetInfo upscale_target = {}; + upscale_target.texture = scaled_texture_; + upscale_target.load_op = SDL_GPU_LOADOP_DONT_CARE; + upscale_target.store_op = SDL_GPU_STOREOP_STORE; + + SDL_GPURenderPass* upass = SDL_BeginGPURenderPass(cmd, &upscale_target, 1, nullptr); + if (upass != nullptr) { + SDL_BindGPUGraphicsPipeline(upass, upscale_pipeline_); + SDL_GPUTextureSamplerBinding ubinding = {}; + ubinding.texture = scene_texture_; + ubinding.sampler = (linear_upscale_ && linear_sampler_ != nullptr) ? linear_sampler_ : sampler_; + SDL_BindGPUFragmentSamplers(upass, 0, &ubinding, 1); + SDL_DrawGPUPrimitives(upass, 3, 1, 0, 0); + SDL_EndGPURenderPass(upass); + } + } + + // ---- Acquire swapchain texture ---- + SDL_GPUTexture* swapchain = nullptr; + Uint32 sw = 0; + Uint32 sh = 0; + if (!SDL_AcquireGPUSwapchainTexture(cmd, window_, &swapchain, &sw, &sh)) { + SDL_Log("SDL3GPUShader: SDL_AcquireGPUSwapchainTexture failed: %s", SDL_GetError()); + SDL_SubmitGPUCommandBuffer(cmd); + return; + } + if (swapchain == nullptr) { + // Window minimized — skip frame + SDL_SubmitGPUCommandBuffer(cmd); + return; + } + + // ---- Calcular viewport (dimensions lògiques del canvas, no de textura GPU) ---- + // Si stretch_4_3_ actiu, l'alçada lògica es multiplica per 1.2 (200→240) per simular 4:3 CRT + const float logical_w = static_cast(game_width_); + const float logical_h = stretch_4_3_ ? static_cast(game_height_) * 1.2F : static_cast(game_height_); + + float vx = 0.0F; + float vy = 0.0F; + float vw = 0.0F; + float vh = 0.0F; + if (integer_scale_) { + const int SCALE = std::max(1, std::min(static_cast(sw) / static_cast(logical_w), static_cast(sh) / static_cast(logical_h))); + vw = logical_w * static_cast(SCALE); + vh = logical_h * static_cast(SCALE); + } else { + const float SCALE = std::min( + static_cast(sw) / logical_w, + static_cast(sh) / logical_h); + vw = logical_w * SCALE; + vh = logical_h * SCALE; + } + vx = std::floor((static_cast(sw) - vw) * 0.5F); + vy = std::floor((static_cast(sh) - vh) * 0.5F); + + // pixel_scale: subpíxeles por pixel lógico. + // Sin SS: vh/game_height (zoom de ventana). + // Con SS: ss_factor_ exacto (3, 6, 9...). + if (oversample_ > 1 && ss_factor_ > 0) { + uniforms_.pixel_scale = static_cast(ss_factor_); + } else { + uniforms_.pixel_scale = (game_height_ > 0) ? (vh / static_cast(game_height_)) : 1.0F; + } + uniforms_.time = static_cast(SDL_GetTicks()) / 1000.0F; + uniforms_.oversample = (oversample_ > 1 && ss_factor_ > 0) + ? static_cast(ss_factor_) + : 1.0F; + + // ---- Path CrtPi: directo scene_texture_ → swapchain, sin SS ni Lanczos ---- + if (active_shader_ == ShaderType::CRTPI && crtpi_pipeline_ != nullptr) { + SDL_GPUColorTargetInfo color_target = {}; + color_target.texture = swapchain; + color_target.load_op = SDL_GPU_LOADOP_CLEAR; + color_target.store_op = SDL_GPU_STOREOP_STORE; + color_target.clear_color = {.r = 0.0F, .g = 0.0F, .b = 0.0F, .a = 1.0F}; + + SDL_GPURenderPass* pass = SDL_BeginGPURenderPass(cmd, &color_target, 1, nullptr); + if (pass != nullptr) { + SDL_BindGPUGraphicsPipeline(pass, crtpi_pipeline_); + SDL_GPUViewport vp = {.x = vx, .y = vy, .w = vw, .h = vh, .min_depth = 0.0F, .max_depth = 1.0F}; + SDL_SetGPUViewport(pass, &vp); + + SDL_GPUTextureSamplerBinding binding = {}; + binding.texture = scene_texture_; + binding.sampler = sampler_; // NEAREST: el shader CrtPi hace su propio filtrado analítico + SDL_BindGPUFragmentSamplers(pass, 0, &binding, 1); + + // Inyectar texture_width/height antes del push + crtpi_uniforms_.texture_width = static_cast(game_width_); + crtpi_uniforms_.texture_height = static_cast(game_height_); + SDL_PushGPUFragmentUniformData(cmd, 0, &crtpi_uniforms_, sizeof(CrtPiUniforms)); + + SDL_DrawGPUPrimitives(pass, 3, 1, 0, 0); + SDL_EndGPURenderPass(pass); + } + + SDL_SubmitGPUCommandBuffer(cmd); + return; + } + + // ---- Determinar si usar el path Lanczos (SS activo + algo seleccionado) ---- + const bool USE_LANCZOS = (oversample_ > 1 && downscale_algo_ > 0 && scaled_texture_ != nullptr && postfx_texture_ != nullptr && postfx_offscreen_pipeline_ != nullptr && downscale_pipeline_ != nullptr); + + if (USE_LANCZOS) { + // ---- Pass A: PostFX → postfx_texture_ (full scaled size, sin viewport) ---- + SDL_GPUColorTargetInfo postfx_target = {}; + postfx_target.texture = postfx_texture_; + postfx_target.load_op = SDL_GPU_LOADOP_CLEAR; + postfx_target.store_op = SDL_GPU_STOREOP_STORE; + postfx_target.clear_color = {.r = 0.0F, .g = 0.0F, .b = 0.0F, .a = 1.0F}; + + SDL_GPURenderPass* ppass = SDL_BeginGPURenderPass(cmd, &postfx_target, 1, nullptr); + if (ppass != nullptr) { + SDL_BindGPUGraphicsPipeline(ppass, postfx_offscreen_pipeline_); + SDL_GPUTextureSamplerBinding pbinding = {}; + pbinding.texture = scaled_texture_; + pbinding.sampler = sampler_; // NEAREST: 1:1 pass, efectos calculados analíticamente + SDL_BindGPUFragmentSamplers(ppass, 0, &pbinding, 1); + SDL_PushGPUFragmentUniformData(cmd, 0, &uniforms_, sizeof(PostFXUniforms)); + SDL_DrawGPUPrimitives(ppass, 3, 1, 0, 0); + SDL_EndGPURenderPass(ppass); + } + + // ---- Pass B: Downscale Lanczos → swapchain (con viewport/letterbox) ---- + SDL_GPUColorTargetInfo ds_target = {}; + ds_target.texture = swapchain; + ds_target.load_op = SDL_GPU_LOADOP_CLEAR; + ds_target.store_op = SDL_GPU_STOREOP_STORE; + ds_target.clear_color = {.r = 0.0F, .g = 0.0F, .b = 0.0F, .a = 1.0F}; + + SDL_GPURenderPass* dpass = SDL_BeginGPURenderPass(cmd, &ds_target, 1, nullptr); + if (dpass != nullptr) { + SDL_BindGPUGraphicsPipeline(dpass, downscale_pipeline_); + SDL_GPUViewport vp = {.x = vx, .y = vy, .w = vw, .h = vh, .min_depth = 0.0F, .max_depth = 1.0F}; + SDL_SetGPUViewport(dpass, &vp); + SDL_GPUTextureSamplerBinding dbinding = {}; + dbinding.texture = postfx_texture_; + dbinding.sampler = sampler_; // NEAREST: el shader Lanczos hace su propia interpolación + SDL_BindGPUFragmentSamplers(dpass, 0, &dbinding, 1); + // algorithm: 0=Lanczos2, 1=Lanczos3 (downscale_algo_ es 1-based) + DownscaleUniforms downscale_u = {.algorithm = downscale_algo_ - 1, .pad0 = 0.0F, .pad1 = 0.0F, .pad2 = 0.0F}; + SDL_PushGPUFragmentUniformData(cmd, 0, &downscale_u, sizeof(DownscaleUniforms)); + SDL_DrawGPUPrimitives(dpass, 3, 1, 0, 0); + SDL_EndGPURenderPass(dpass); + } + } else { + // ---- Render pass: PostFX → swapchain directamente (bilinear, comportamiento original) ---- + SDL_GPUColorTargetInfo color_target = {}; + color_target.texture = swapchain; + color_target.load_op = SDL_GPU_LOADOP_CLEAR; + color_target.store_op = SDL_GPU_STOREOP_STORE; + color_target.clear_color = {.r = 0.0F, .g = 0.0F, .b = 0.0F, .a = 1.0F}; + + SDL_GPURenderPass* pass = SDL_BeginGPURenderPass(cmd, &color_target, 1, nullptr); + if (pass != nullptr) { + SDL_BindGPUGraphicsPipeline(pass, pipeline_); + SDL_GPUViewport vp = {.x = vx, .y = vy, .w = vw, .h = vh, .min_depth = 0.0F, .max_depth = 1.0F}; + SDL_SetGPUViewport(pass, &vp); + + // Con SS: leer de scaled_texture_ con LINEAR; sin SS: scene_texture_ con NEAREST. + SDL_GPUTexture* input_texture = (oversample_ > 1 && scaled_texture_ != nullptr) + ? scaled_texture_ + : scene_texture_; + SDL_GPUSampler* active_sampler = (oversample_ > 1 && linear_sampler_ != nullptr) + ? linear_sampler_ + : sampler_; + + SDL_GPUTextureSamplerBinding binding = {}; + binding.texture = input_texture; + binding.sampler = active_sampler; + SDL_BindGPUFragmentSamplers(pass, 0, &binding, 1); + + SDL_PushGPUFragmentUniformData(cmd, 0, &uniforms_, sizeof(PostFXUniforms)); + + SDL_DrawGPUPrimitives(pass, 3, 1, 0, 0); + SDL_EndGPURenderPass(pass); + } + } + + SDL_SubmitGPUCommandBuffer(cmd); + } + + // --------------------------------------------------------------------------- + // cleanup — libera pipeline/texturas/buffer pero mantiene device + swapchain + // --------------------------------------------------------------------------- + void SDL3GPUShader::cleanup() { + is_initialized_ = false; + + if (device_ != nullptr) { + SDL_WaitForGPUIdle(device_); + + if (pipeline_ != nullptr) { + SDL_ReleaseGPUGraphicsPipeline(device_, pipeline_); + pipeline_ = nullptr; + } + if (crtpi_pipeline_ != nullptr) { + SDL_ReleaseGPUGraphicsPipeline(device_, crtpi_pipeline_); + crtpi_pipeline_ = nullptr; + } + if (postfx_offscreen_pipeline_ != nullptr) { + SDL_ReleaseGPUGraphicsPipeline(device_, postfx_offscreen_pipeline_); + postfx_offscreen_pipeline_ = nullptr; + } + if (upscale_pipeline_ != nullptr) { + SDL_ReleaseGPUGraphicsPipeline(device_, upscale_pipeline_); + upscale_pipeline_ = nullptr; + } + if (downscale_pipeline_ != nullptr) { + SDL_ReleaseGPUGraphicsPipeline(device_, downscale_pipeline_); + downscale_pipeline_ = nullptr; + } + if (scene_texture_ != nullptr) { + SDL_ReleaseGPUTexture(device_, scene_texture_); + scene_texture_ = nullptr; + } + if (scaled_texture_ != nullptr) { + SDL_ReleaseGPUTexture(device_, scaled_texture_); + scaled_texture_ = nullptr; + } + if (postfx_texture_ != nullptr) { + SDL_ReleaseGPUTexture(device_, postfx_texture_); + postfx_texture_ = nullptr; + } + ss_factor_ = 0; + if (upload_buffer_ != nullptr) { + SDL_ReleaseGPUTransferBuffer(device_, upload_buffer_); + upload_buffer_ = nullptr; + } + if (sampler_ != nullptr) { + SDL_ReleaseGPUSampler(device_, sampler_); + sampler_ = nullptr; + } + if (linear_sampler_ != nullptr) { + SDL_ReleaseGPUSampler(device_, linear_sampler_); + linear_sampler_ = nullptr; + } + // device_ y el claim de la ventana se mantienen vivos + } + } + + // --------------------------------------------------------------------------- + // destroy — limpieza completa incluyendo device y swapchain (solo al cerrar) + // --------------------------------------------------------------------------- + void SDL3GPUShader::destroy() { + cleanup(); + + if (device_ != nullptr) { + if (window_ != nullptr) { + SDL_ReleaseWindowFromGPUDevice(device_, window_); + } + SDL_DestroyGPUDevice(device_); + device_ = nullptr; + } + window_ = nullptr; + } + + // --------------------------------------------------------------------------- + // Shader creation helpers + // --------------------------------------------------------------------------- + auto SDL3GPUShader::createShaderMSL(SDL_GPUDevice* device, + const char* msl_source, + const char* entrypoint, + SDL_GPUShaderStage stage, + Uint32 num_samplers, + Uint32 num_uniform_buffers) -> SDL_GPUShader* { + SDL_GPUShaderCreateInfo info = {}; + info.code = reinterpret_cast(msl_source); + info.code_size = std::strlen(msl_source) + 1; + info.entrypoint = entrypoint; + info.format = SDL_GPU_SHADERFORMAT_MSL; + info.stage = stage; + info.num_samplers = num_samplers; + info.num_uniform_buffers = num_uniform_buffers; + SDL_GPUShader* shader = SDL_CreateGPUShader(device, &info); + if (shader == nullptr) { + SDL_Log("SDL3GPUShader: MSL shader '%s' failed: %s", entrypoint, SDL_GetError()); + } + return shader; + } + + auto SDL3GPUShader::createShaderSPIRV(SDL_GPUDevice* device, // NOLINT(readability-convert-member-functions-to-static) + const uint8_t* spv_code, + size_t spv_size, + const char* entrypoint, + SDL_GPUShaderStage stage, + Uint32 num_samplers, + Uint32 num_uniform_buffers) -> SDL_GPUShader* { + SDL_GPUShaderCreateInfo info = {}; + info.code = spv_code; + info.code_size = spv_size; + info.entrypoint = entrypoint; + info.format = SDL_GPU_SHADERFORMAT_SPIRV; + info.stage = stage; + info.num_samplers = num_samplers; + info.num_uniform_buffers = num_uniform_buffers; + SDL_GPUShader* shader = SDL_CreateGPUShader(device, &info); + if (shader == nullptr) { + SDL_Log("SDL3GPUShader: SPIRV shader '%s' failed: %s", entrypoint, SDL_GetError()); + } + return shader; + } + + void SDL3GPUShader::setPostFXParams(const PostFXParams& p) { + uniforms_.vignette_strength = p.vignette; + uniforms_.chroma_strength = p.chroma; + uniforms_.mask_strength = p.mask; + uniforms_.gamma_strength = p.gamma; + uniforms_.curvature = p.curvature; + uniforms_.bleeding = p.bleeding; + uniforms_.flicker = p.flicker; + + // Las scanlines siempre las aplica el shader PostFX en GPU. + uniforms_.scanline_strength = p.scanlines; + } + + void SDL3GPUShader::setCrtPiParams(const CrtPiParams& p) { + crtpi_uniforms_.scanline_weight = p.scanline_weight; + crtpi_uniforms_.scanline_gap_brightness = p.scanline_gap_brightness; + crtpi_uniforms_.bloom_factor = p.bloom_factor; + crtpi_uniforms_.input_gamma = p.input_gamma; + crtpi_uniforms_.output_gamma = p.output_gamma; + crtpi_uniforms_.mask_brightness = p.mask_brightness; + crtpi_uniforms_.curvature_x = p.curvature_x; + crtpi_uniforms_.curvature_y = p.curvature_y; + crtpi_uniforms_.mask_type = p.mask_type; + crtpi_uniforms_.enable_scanlines = p.enable_scanlines ? 1 : 0; + crtpi_uniforms_.enable_multisample = p.enable_multisample ? 1 : 0; + crtpi_uniforms_.enable_gamma = p.enable_gamma ? 1 : 0; + crtpi_uniforms_.enable_curvature = p.enable_curvature ? 1 : 0; + crtpi_uniforms_.enable_sharper = p.enable_sharper ? 1 : 0; + // texture_width/height se inyectan en render() cada frame + } + + void SDL3GPUShader::setActiveShader(ShaderType type) { + active_shader_ = type; + } + + auto SDL3GPUShader::bestPresentMode(bool vsync) const -> SDL_GPUPresentMode { + if (vsync) { + return SDL_GPU_PRESENTMODE_VSYNC; + } + // IMMEDIATE: sin sincronización — el driver puede no soportarlo en Wayland/compositing + if (SDL_WindowSupportsGPUPresentMode(device_, window_, SDL_GPU_PRESENTMODE_IMMEDIATE)) { + return SDL_GPU_PRESENTMODE_IMMEDIATE; + } + // MAILBOX: presenta en el siguiente VBlank pero sin bloquear el hilo (triple buffer) + if (SDL_WindowSupportsGPUPresentMode(device_, window_, SDL_GPU_PRESENTMODE_MAILBOX)) { + SDL_Log("SDL3GPUShader: IMMEDIATE no soportado, usando MAILBOX para VSync desactivado"); + return SDL_GPU_PRESENTMODE_MAILBOX; + } + SDL_Log("SDL3GPUShader: IMMEDIATE y MAILBOX no soportados, forzando VSYNC"); + return SDL_GPU_PRESENTMODE_VSYNC; + } + + void SDL3GPUShader::setVSync(bool vsync) { + vsync_ = vsync; + if (device_ != nullptr && window_ != nullptr) { + SDL_SetGPUSwapchainParameters(device_, window_, SDL_GPU_SWAPCHAINCOMPOSITION_SDR, bestPresentMode(vsync_)); + } + } + + void SDL3GPUShader::setScaleMode(bool integer_scale) { + integer_scale_ = integer_scale; + } + + // --------------------------------------------------------------------------- + // setOversample — cambia el factor SS; recrea texturas si ya está inicializado + // --------------------------------------------------------------------------- + void SDL3GPUShader::setOversample(int factor) { + const int NEW_FACTOR = std::max(1, factor); + if (NEW_FACTOR == oversample_) { return; } + oversample_ = NEW_FACTOR; + if (is_initialized_) { + reinitTexturesAndBuffer(); + // scanline_strength se actualizará en el próximo setPostFXParams + } + } + + void SDL3GPUShader::setLinearUpscale(bool linear) { + linear_upscale_ = linear; + } + + void SDL3GPUShader::setDownscaleAlgo(int algo) { + downscale_algo_ = std::max(0, std::min(algo, 2)); + } + + auto SDL3GPUShader::getSsTextureSize() const -> std::pair { + if (ss_factor_ <= 1) { return {0, 0}; } + return {game_width_ * ss_factor_, game_height_ * ss_factor_}; + } + + // --------------------------------------------------------------------------- + // reinitTexturesAndBuffer — recrea scene_texture_, scaled_texture_ y + // upload_buffer_ con el factor oversample_ actual. No toca pipelines ni samplers. + // --------------------------------------------------------------------------- + auto SDL3GPUShader::reinitTexturesAndBuffer() -> bool { + if (device_ == nullptr) { return false; } + SDL_WaitForGPUIdle(device_); + + if (scene_texture_ != nullptr) { + SDL_ReleaseGPUTexture(device_, scene_texture_); + scene_texture_ = nullptr; + } + // scaled_texture_ se libera aquí; se recreará en el primer render() con el factor correcto + if (scaled_texture_ != nullptr) { + SDL_ReleaseGPUTexture(device_, scaled_texture_); + scaled_texture_ = nullptr; + } + ss_factor_ = 0; + + if (upload_buffer_ != nullptr) { + SDL_ReleaseGPUTransferBuffer(device_, upload_buffer_); + upload_buffer_ = nullptr; + } + + uniforms_.screen_height = static_cast(game_height_); + uniforms_.oversample = static_cast(oversample_); + + // scene_texture_: siempre a resolución del juego + SDL_GPUTextureCreateInfo tex_info = {}; + tex_info.type = SDL_GPU_TEXTURETYPE_2D; + tex_info.format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; + tex_info.usage = SDL_GPU_TEXTUREUSAGE_SAMPLER; + tex_info.width = static_cast(game_width_); + tex_info.height = static_cast(game_height_); + tex_info.layer_count_or_depth = 1; + tex_info.num_levels = 1; + scene_texture_ = SDL_CreateGPUTexture(device_, &tex_info); + if (scene_texture_ == nullptr) { + SDL_Log("SDL3GPUShader: reinit — failed to create scene texture: %s", SDL_GetError()); + return false; + } + + // upload_buffer_: siempre a resolución del juego + SDL_GPUTransferBufferCreateInfo tb_info = {}; + tb_info.usage = SDL_GPU_TRANSFERBUFFERUSAGE_UPLOAD; + tb_info.size = static_cast(game_width_ * game_height_ * 4); + upload_buffer_ = SDL_CreateGPUTransferBuffer(device_, &tb_info); + if (upload_buffer_ == nullptr) { + SDL_Log("SDL3GPUShader: reinit — failed to create upload buffer: %s", SDL_GetError()); + SDL_ReleaseGPUTexture(device_, scene_texture_); + scene_texture_ = nullptr; + return false; + } + + SDL_Log("SDL3GPUShader: reinit — scene %dx%d, SS %s (scaled se creará en render)", + game_width_, + game_height_, + oversample_ > 1 ? "on" : "off"); + return true; + } + + // --------------------------------------------------------------------------- + // calcSsFactor — primer múltiplo de 3 >= zoom, mínimo 3. + // Ejemplos: zoom 1,2,3 → 3; zoom 4,5,6 → 6; zoom 4.4 → 6; zoom 7,8,9 → 9. + // --------------------------------------------------------------------------- + auto SDL3GPUShader::calcSsFactor(float zoom) -> int { + const int MULTIPLE = 3; + const int N = static_cast(std::ceil(zoom / static_cast(MULTIPLE))); + return std::max(1, N) * MULTIPLE; + } + + // --------------------------------------------------------------------------- + // recreateScaledTexture — libera y recrea scaled_texture_ para el factor dado. + // Llamar solo cuando device_ no esté ejecutando comandos (SDL_WaitForGPUIdle previo). + // --------------------------------------------------------------------------- + auto SDL3GPUShader::recreateScaledTexture(int factor) -> bool { + if (scaled_texture_ != nullptr) { + SDL_ReleaseGPUTexture(device_, scaled_texture_); + scaled_texture_ = nullptr; + } + if (postfx_texture_ != nullptr) { + SDL_ReleaseGPUTexture(device_, postfx_texture_); + postfx_texture_ = nullptr; + } + ss_factor_ = 0; + + const int W = game_width_ * factor; + const int H = game_height_ * factor; + + SDL_GPUTextureCreateInfo info = {}; + info.type = SDL_GPU_TEXTURETYPE_2D; + info.format = SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM; + info.usage = SDL_GPU_TEXTUREUSAGE_SAMPLER | SDL_GPU_TEXTUREUSAGE_COLOR_TARGET; + info.width = static_cast(W); + info.height = static_cast(H); + info.layer_count_or_depth = 1; + info.num_levels = 1; + + scaled_texture_ = SDL_CreateGPUTexture(device_, &info); + if (scaled_texture_ == nullptr) { + SDL_Log("SDL3GPUShader: failed to create scaled texture %dx%d (factor %d): %s", + W, + H, + factor, + SDL_GetError()); + return false; + } + + postfx_texture_ = SDL_CreateGPUTexture(device_, &info); + if (postfx_texture_ == nullptr) { + SDL_Log("SDL3GPUShader: failed to create postfx texture %dx%d (factor %d): %s", + W, + H, + factor, + SDL_GetError()); + SDL_ReleaseGPUTexture(device_, scaled_texture_); + scaled_texture_ = nullptr; + return false; + } + + ss_factor_ = factor; + SDL_Log("SDL3GPUShader: scaled+postfx textures %dx%d (factor %d×)", W, H, factor); + return true; + } + +} // namespace Rendering diff --git a/source/core/rendering/sdl3gpu/sdl3gpu_shader.hpp b/source/core/rendering/sdl3gpu/sdl3gpu_shader.hpp new file mode 100644 index 0000000..68f147b --- /dev/null +++ b/source/core/rendering/sdl3gpu/sdl3gpu_shader.hpp @@ -0,0 +1,183 @@ +#pragma once + +#include +#include + +#include "core/rendering/shader_backend.hpp" + +// PostFX uniforms pushed to fragment stage each frame. +// Must match the MSL struct and GLSL uniform block layout. +// 12 floats = 48 bytes — meets Metal/Vulkan 16-byte alignment requirement. +struct PostFXUniforms { + float vignette_strength; // 0 = none, ~0.8 = subtle + float chroma_strength; // 0 = off, ~0.2 = subtle chromatic aberration + float scanline_strength; // 0 = off, 1 = full + float screen_height; // logical height in pixels (used by bleeding effect) + float mask_strength; // 0 = off, 1 = full phosphor dot mask + float gamma_strength; // 0 = off, 1 = full gamma 2.4/2.2 correction + float curvature; // 0 = flat, 1 = max barrel distortion + float bleeding; // 0 = off, 1 = max NTSC chrominance bleeding + float pixel_scale; // physical pixels per logical pixel (vh / tex_height_) + float time; // seconds since SDL init (SDL_GetTicks() / 1000.0f) + float oversample; // supersampling factor (1.0 = off, 3.0 = 3×SS) + float flicker; // 0 = off, 1 = phosphor flicker ~50 Hz — keep struct at 48 bytes (3 × 16) +}; + +// CrtPi uniforms pushed to fragment stage each frame. +// Must match the MSL struct and GLSL uniform block layout. +// 14 fields (8 floats + 6 ints) + 2 floats (texture size) = 16 fields = 64 bytes — 4 × 16-byte alignment. +struct CrtPiUniforms { + // vec4 #0 + float scanline_weight; // Ajuste gaussiano (default 6.0) + float scanline_gap_brightness; // Brillo mínimo entre scanlines (default 0.12) + float bloom_factor; // Factor brillo zonas iluminadas (default 3.5) + float input_gamma; // Gamma de entrada (default 2.4) + // vec4 #1 + float output_gamma; // Gamma de salida (default 2.2) + float mask_brightness; // Brillo sub-píxeles máscara (default 0.80) + float curvature_x; // Distorsión barrel X (default 0.05) + float curvature_y; // Distorsión barrel Y (default 0.10) + // vec4 #2 + int mask_type; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo + int enable_scanlines; // 0 = off, 1 = on + int enable_multisample; // 0 = off, 1 = on (antialiasing analítico) + int enable_gamma; // 0 = off, 1 = on + // vec4 #3 + int enable_curvature; // 0 = off, 1 = on + int enable_sharper; // 0 = off, 1 = on + float texture_width; // Ancho del canvas en píxeles (inyectado en render) + float texture_height; // Alto del canvas en píxeles (inyectado en render) +}; + +// Downscale uniforms pushed to the Lanczos downscale fragment stage. +// 1 int + 3 floats = 16 bytes — meets Metal/Vulkan alignment. +struct DownscaleUniforms { + int algorithm; // 0 = Lanczos2 (ventana 2), 1 = Lanczos3 (ventana 3) + float pad0; + float pad1; + float pad2; +}; + +namespace Rendering { + + /** + * @brief Backend de shaders usando SDL3 GPU API (Metal en macOS, Vulkan/SPIR-V en Win/Linux) + * + * Reemplaza el backend OpenGL para que los shaders PostFX funcionen en macOS. + * Pipeline: Surface pixels (CPU) → SDL_GPUTransferBuffer → SDL_GPUTexture (scene) + * → PostFX render pass → swapchain → present + */ + class SDL3GPUShader : public ShaderBackend { + public: + SDL3GPUShader() = default; + ~SDL3GPUShader() override; + + auto init(SDL_Window* window, + SDL_Texture* texture, + const std::string& vertex_source, + const std::string& fragment_source) -> bool override; + + void render() override; + void setTextureSize(float width, float height) override {} + void cleanup() final; // Libera pipeline/texturas pero mantiene el device vivo + void destroy(); // Limpieza completa (device + swapchain); llamar solo al cerrar + [[nodiscard]] auto isHardwareAccelerated() const -> bool override { return is_initialized_; } + [[nodiscard]] auto getDriverName() const -> std::string override { return driver_name_; } + + // Establece el driver GPU preferido (vacío = auto). Debe llamarse antes de init(). + void setPreferredDriver(const std::string& driver) override { preferred_driver_ = driver; } + + // Sube píxeles ARGB8888 desde CPU; llamado antes de render() + void uploadPixels(const Uint32* pixels, int width, int height) override; + + // Actualiza los parámetros de intensidad de los efectos PostFX + void setPostFXParams(const PostFXParams& p) override; + + // Activa/desactiva VSync en el swapchain + void setVSync(bool vsync) override; + + // Activa/desactiva escalado entero (integer scale) + void setScaleMode(bool integer_scale) override; + + // Establece factor de supersampling (1 = off, 3 = 3×SS) + void setOversample(int factor) override; + + // Activa/desactiva interpolación LINEAR en el upscale (false = NEAREST) + void setLinearUpscale(bool linear) override; + + // Selecciona algoritmo de downscale: 0=bilinear legacy, 1=Lanczos2, 2=Lanczos3 + void setDownscaleAlgo(int algo) override; + + // Devuelve las dimensiones de la textura de supersampling (0,0 si SS desactivado) + [[nodiscard]] auto getSsTextureSize() const -> std::pair override; + + // Selecciona el shader de post-procesado activo (POSTFX o CRTPI) + void setActiveShader(ShaderType type) override; + + // Actualiza los parámetros del shader CRT-Pi + void setCrtPiParams(const CrtPiParams& p) override; + + // Devuelve el shader activo + [[nodiscard]] auto getActiveShader() const -> ShaderType override { return active_shader_; } + + // Estirament vertical 4:3 (320x200 → 320x240 visual al viewport) + void setStretch4_3(bool enabled) override { stretch_4_3_ = enabled; } + [[nodiscard]] auto isStretch4_3() const -> bool override { return stretch_4_3_; } + + private: + static auto createShaderMSL(SDL_GPUDevice* device, + const char* msl_source, + const char* entrypoint, + SDL_GPUShaderStage stage, + Uint32 num_samplers, + Uint32 num_uniform_buffers) -> SDL_GPUShader*; + + static auto createShaderSPIRV(SDL_GPUDevice* device, + const uint8_t* spv_code, + size_t spv_size, + const char* entrypoint, + SDL_GPUShaderStage stage, + Uint32 num_samplers, + Uint32 num_uniform_buffers) -> SDL_GPUShader*; + + auto createPipeline() -> bool; + auto createCrtPiPipeline() -> bool; // Pipeline dedicado para el shader CrtPi + auto reinitTexturesAndBuffer() -> bool; // Recrea scene_texture_ y upload_buffer_ + auto recreateScaledTexture(int factor) -> bool; // Recrea scaled_texture_ para factor dado + static auto calcSsFactor(float zoom) -> int; // Primer múltiplo de 3 >= zoom (mín 3) + // Devuelve el mejor present mode disponible: IMMEDIATE > MAILBOX > VSYNC + [[nodiscard]] auto bestPresentMode(bool vsync) const -> SDL_GPUPresentMode; + + SDL_Window* window_ = nullptr; + SDL_GPUDevice* device_ = nullptr; + SDL_GPUGraphicsPipeline* pipeline_ = nullptr; // PostFX pass (→ swapchain o → postfx_texture_) + SDL_GPUGraphicsPipeline* crtpi_pipeline_ = nullptr; // CrtPi pass (→ swapchain directo, sin SS) + SDL_GPUGraphicsPipeline* postfx_offscreen_pipeline_ = nullptr; // PostFX → postfx_texture_ (B8G8R8A8, solo con Lanczos) + SDL_GPUGraphicsPipeline* upscale_pipeline_ = nullptr; // Upscale pass (solo con SS) + SDL_GPUGraphicsPipeline* downscale_pipeline_ = nullptr; // Lanczos downscale (solo con SS + algo > 0) + SDL_GPUTexture* scene_texture_ = nullptr; // Canvas del juego (game_width_ × game_height_) + SDL_GPUTexture* scaled_texture_ = nullptr; // Upscale target (game×factor), solo con SS + SDL_GPUTexture* postfx_texture_ = nullptr; // PostFX output a resolución escalada, solo con Lanczos + SDL_GPUTransferBuffer* upload_buffer_ = nullptr; + SDL_GPUSampler* sampler_ = nullptr; // NEAREST + SDL_GPUSampler* linear_sampler_ = nullptr; // LINEAR + + PostFXUniforms uniforms_{.vignette_strength = 0.6F, .chroma_strength = 0.15F, .scanline_strength = 0.7F, .screen_height = 200.0F, .pixel_scale = 1.0F, .oversample = 1.0F}; + CrtPiUniforms crtpi_uniforms_{.scanline_weight = 6.0F, .scanline_gap_brightness = 0.12F, .bloom_factor = 3.5F, .input_gamma = 2.4F, .output_gamma = 2.2F, .mask_brightness = 0.80F, .curvature_x = 0.05F, .curvature_y = 0.10F, .mask_type = 2, .enable_scanlines = 1, .enable_multisample = 1, .enable_gamma = 1}; + ShaderType active_shader_ = ShaderType::POSTFX; // Shader de post-procesado activo + + int game_width_ = 0; // Dimensiones originales del canvas + int game_height_ = 0; + int ss_factor_ = 0; // Factor SS activo (3, 6, 9...) o 0 si SS desactivado + int oversample_ = 1; // SS on/off (1 = off, >1 = on) + int downscale_algo_ = 1; // 0 = bilinear legacy, 1 = Lanczos2, 2 = Lanczos3 + std::string driver_name_; + std::string preferred_driver_; // Driver preferido; vacío = auto (SDL elige) + bool is_initialized_ = false; + bool vsync_ = true; + bool integer_scale_ = false; + bool linear_upscale_ = false; // Upscale NEAREST (false) o LINEAR (true) + bool stretch_4_3_ = false; // Estirament vertical 4:3 al viewport + }; + +} // namespace Rendering diff --git a/source/core/rendering/sdl3gpu/upscale_frag_spv.h b/source/core/rendering/sdl3gpu/upscale_frag_spv.h new file mode 100644 index 0000000..46e7c30 --- /dev/null +++ b/source/core/rendering/sdl3gpu/upscale_frag_spv.h @@ -0,0 +1,634 @@ +#pragma once +#include +#include +static const uint8_t kupscale_frag_spv[] = { + 0x03, + 0x02, + 0x23, + 0x07, + 0x00, + 0x00, + 0x01, + 0x00, + 0x0b, + 0x00, + 0x0d, + 0x00, + 0x14, + 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, + 0x07, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x10, + 0x00, + 0x03, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0xc2, + 0x01, + 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, + 0x04, + 0x00, + 0x08, + 0x00, + 0x47, + 0x4c, + 0x5f, + 0x47, + 0x4f, + 0x4f, + 0x47, + 0x4c, + 0x45, + 0x5f, + 0x69, + 0x6e, + 0x63, + 0x6c, + 0x75, + 0x64, + 0x65, + 0x5f, + 0x64, + 0x69, + 0x72, + 0x65, + 0x63, + 0x74, + 0x69, + 0x76, + 0x65, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x6d, + 0x61, + 0x69, + 0x6e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x05, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x6f, + 0x75, + 0x74, + 0x5f, + 0x63, + 0x6f, + 0x6c, + 0x6f, + 0x72, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x73, + 0x63, + 0x65, + 0x6e, + 0x65, + 0x00, + 0x00, + 0x00, + 0x05, + 0x00, + 0x04, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x76, + 0x5f, + 0x75, + 0x76, + 0x00, + 0x00, + 0x00, + 0x00, + 0x47, + 0x00, + 0x04, + 0x00, + 0x09, + 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, + 0x11, + 0x00, + 0x00, + 0x00, + 0x1e, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x02, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x21, + 0x00, + 0x03, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x16, + 0x00, + 0x03, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x08, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0x19, + 0x00, + 0x09, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x06, + 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, + 0x1b, + 0x00, + 0x03, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x0a, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x0c, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x00, + 0x04, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x06, + 0x00, + 0x00, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x20, + 0x00, + 0x04, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x3b, + 0x00, + 0x04, + 0x00, + 0x10, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x36, + 0x00, + 0x05, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x03, + 0x00, + 0x00, + 0x00, + 0xf8, + 0x00, + 0x02, + 0x00, + 0x05, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x0b, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x0d, + 0x00, + 0x00, + 0x00, + 0x3d, + 0x00, + 0x04, + 0x00, + 0x0f, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x11, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x05, + 0x00, + 0x07, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0x0e, + 0x00, + 0x00, + 0x00, + 0x12, + 0x00, + 0x00, + 0x00, + 0x3e, + 0x00, + 0x03, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x13, + 0x00, + 0x00, + 0x00, + 0xfd, + 0x00, + 0x01, + 0x00, + 0x38, + 0x00, + 0x01, + 0x00, +}; +static const size_t kupscale_frag_spv_size = 628; diff --git a/source/core/rendering/shader_backend.hpp b/source/core/rendering/shader_backend.hpp new file mode 100644 index 0000000..1d6a837 --- /dev/null +++ b/source/core/rendering/shader_backend.hpp @@ -0,0 +1,182 @@ +#pragma once + +#include + +#include +#include + +namespace Rendering { + + /** @brief Identificador del shader de post-procesado activo */ + enum class ShaderType { POSTFX, + CRTPI }; + + /** + * @brief Parámetros de intensidad de los efectos PostFX + * Definido a nivel de namespace para facilitar el uso desde subclases y screen.cpp + */ + struct PostFXParams { + float vignette = 0.0F; // Intensidad de la viñeta + float scanlines = 0.0F; // Intensidad de las scanlines + float chroma = 0.0F; // Aberración cromática + float mask = 0.0F; // Máscara de fósforo RGB + float gamma = 0.0F; // Corrección gamma (blend 0=off, 1=full) + float curvature = 0.0F; // Curvatura barrel CRT + float bleeding = 0.0F; // Sangrado de color NTSC + float flicker = 0.0F; // Parpadeo de fósforo CRT ~50 Hz + }; + + /** + * @brief Parámetros del shader CRT-Pi (algoritmo de scanlines continuas) + * Diferente al PostFX: usa pesos gaussianos por distancia subpixel y bloom. + */ + struct CrtPiParams { + float scanline_weight{6.0F}; // Ajuste gaussiano (mayor = scanlines más estrechas) + float scanline_gap_brightness{0.12F}; // Brillo mínimo en las ranuras entre scanlines + float bloom_factor{3.5F}; // Factor de brillo para zonas iluminadas + float input_gamma{2.4F}; // Gamma de entrada (linealización) + float output_gamma{2.2F}; // Gamma de salida (codificación) + float mask_brightness{0.80F}; // Sub-píxeles tenues en la máscara de fósforo + float curvature_x{0.05F}; // Distorsión barrel eje X + float curvature_y{0.10F}; // Distorsión barrel eje Y + int mask_type{2}; // 0=ninguna, 1=verde/magenta, 2=RGB fósforo + bool enable_scanlines{true}; // Activar efecto de scanlines + bool enable_multisample{true}; // Antialiasing analítico de scanlines + bool enable_gamma{true}; // Corrección gamma + bool enable_curvature{false}; // Distorsión barrel CRT + bool enable_sharper{false}; // Submuestreo más nítido (modo SHARPER) + }; + + /** + * @brief Interfaz abstracta para backends de renderizado con shaders + * + * Esta interfaz define el contrato que todos los backends de shaders + * deben cumplir (OpenGL, Metal, Vulkan, etc.) + */ + class ShaderBackend { + public: + virtual ~ShaderBackend() = default; + + /** + * @brief Inicializa el backend de shaders + * @param window Ventana SDL + * @param texture Textura de backbuffer a la que aplicar shaders + * @param vertex_source Código fuente del vertex shader + * @param fragment_source Código fuente del fragment shader + * @return true si la inicialización fue exitosa + */ + virtual auto init(SDL_Window* window, + SDL_Texture* texture, + const std::string& vertex_source, + const std::string& fragment_source) -> bool = 0; + + /** + * @brief Renderiza la textura con los shaders aplicados + */ + virtual void render() = 0; + + /** + * @brief Establece el tamaño de la textura como parámetro del shader + * @param width Ancho de la textura + * @param height Alto de la textura + */ + virtual void setTextureSize(float width, float height) = 0; + + /** + * @brief Limpia y libera recursos del backend + */ + virtual void cleanup() = 0; + + /** + * @brief Sube píxeles ARGB8888 desde la CPU al backend de shaders + * Usado por SDL3GPUShader para evitar pasar por SDL_Texture + */ + virtual void uploadPixels(const Uint32* /*pixels*/, int /*width*/, int /*height*/) {} + + /** + * @brief Establece los parámetros de intensidad de los efectos PostFX + * @param p Struct con todos los parámetros PostFX + */ + virtual void setPostFXParams(const PostFXParams& /*p*/) {} + + /** + * @brief Activa o desactiva VSync en el swapchain del GPU device + */ + virtual void setVSync(bool /*vsync*/) {} + + /** + * @brief Activa o desactiva el escalado entero (integer scale) + */ + virtual void setScaleMode(bool /*integer_scale*/) {} + + /** + * @brief Establece el factor de supersampling (1 = off, 3 = 3× SS) + * Con factor > 1, la textura GPU se crea a game×factor resolución y + * las scanlines se hornean en CPU (uploadPixels). El sampler usa LINEAR. + */ + virtual void setOversample(int /*factor*/) {} + + /** + * @brief Activa/desactiva interpolación LINEAR en el paso de upscale (SS). + * Por defecto NEAREST (false). Solo tiene efecto con supersampling activo. + */ + virtual void setLinearUpscale(bool /*linear*/) {} + [[nodiscard]] virtual auto isLinearUpscale() const -> bool { return false; } + + /** + * @brief Selecciona el algoritmo de downscale tras el PostFX (SS activo). + * 0 = bilinear legacy (comportamiento actual, sin textura intermedia), + * 1 = Lanczos2 (ventana 2, ~25 muestras), 2 = Lanczos3 (ventana 3, ~49 muestras). + */ + virtual void setDownscaleAlgo(int /*algo*/) {} + [[nodiscard]] virtual auto getDownscaleAlgo() const -> int { return 0; } + + /** + * @brief Devuelve las dimensiones de la textura de supersampling. + * @return Par (ancho, alto) en píxeles; (0, 0) si SS está desactivado. + */ + [[nodiscard]] virtual auto getSsTextureSize() const -> std::pair { return {0, 0}; } + + /** + * @brief Verifica si el backend está usando aceleración por hardware + * @return true si usa aceleración (OpenGL/Metal/Vulkan) + */ + [[nodiscard]] virtual auto isHardwareAccelerated() const -> bool = 0; + + /** + * @brief Nombre del driver GPU activo (p.ej. "vulkan", "metal", "direct3d12") + * @return Cadena vacía si no disponible + */ + [[nodiscard]] virtual auto getDriverName() const -> std::string { return {}; } + + /** + * @brief Establece el driver GPU preferido antes de init(). + * Vacío = selección automática de SDL. Implementado en SDL3GPUShader. + */ + virtual void setPreferredDriver(const std::string& /*driver*/) {} + + /** + * @brief Selecciona el shader de post-procesado activo (POSTFX o CRTPI). + * Debe llamarse antes de render(). No recrea pipelines. + */ + virtual void setActiveShader(ShaderType /*type*/) {} + + /** + * @brief Establece los parámetros del shader CRT-Pi. + */ + virtual void setCrtPiParams(const CrtPiParams& /*p*/) {} + + /** + * @brief Devuelve el shader de post-procesado activo. + */ + [[nodiscard]] virtual auto getActiveShader() const -> ShaderType { return ShaderType::POSTFX; } + + /** + * @brief Activa/desactiva estirament vertical 4:3 (200→240 línies efectives). + * Només afecta el viewport, no les textures ni els shaders. + */ + virtual void setStretch4_3(bool /*enabled*/) {} + [[nodiscard]] virtual auto isStretch4_3() const -> bool { return false; } + }; + +} // namespace Rendering diff --git a/source/game/defaults.hpp b/source/game/defaults.hpp index 8155793..3a0a255 100644 --- a/source/game/defaults.hpp +++ b/source/game/defaults.hpp @@ -2,11 +2,16 @@ #include -// Tecles GUI (capa de presentació — finestra, zoom, etc.) +// Tecles GUI (capa de presentació — finestra, zoom, shaders, etc.) namespace Defaults::KeysGUI { constexpr SDL_Scancode DEC_ZOOM = SDL_SCANCODE_F1; constexpr SDL_Scancode INC_ZOOM = SDL_SCANCODE_F2; constexpr SDL_Scancode FULLSCREEN = SDL_SCANCODE_F3; + constexpr SDL_Scancode TOGGLE_SHADER = SDL_SCANCODE_F4; + constexpr SDL_Scancode TOGGLE_ASPECT_RATIO = SDL_SCANCODE_F5; + constexpr SDL_Scancode TOGGLE_SUPERSAMPLING = SDL_SCANCODE_F6; + constexpr SDL_Scancode NEXT_SHADER = SDL_SCANCODE_F7; + constexpr SDL_Scancode NEXT_SHADER_PRESET = SDL_SCANCODE_F8; } // namespace Defaults::KeysGUI // Tecles de joc (moviment del personatge, accions) @@ -18,6 +23,16 @@ namespace Defaults::KeysGame { constexpr SDL_Scancode EXIT = SDL_SCANCODE_ESCAPE; } // namespace Defaults::KeysGame +namespace Defaults::Video { + constexpr bool GPU_ACCELERATION = true; + constexpr bool SHADER_ENABLED = false; + constexpr bool SUPERSAMPLING = false; + constexpr bool INTEGER_SCALE = true; + constexpr bool ASPECT_RATIO_4_3 = true; // CRT original estira 200→240 + constexpr int DOWNSCALE_ALGO = 1; // 0=bilinear, 1=Lanczos2, 2=Lanczos3 + constexpr bool LINEAR_UPSCALE = false; +} // namespace Defaults::Video + namespace Defaults::Audio { constexpr float VOLUME = 1.0F; constexpr bool MUSIC_ENABLED = true; diff --git a/source/game/options.cpp b/source/game/options.cpp index 872ab2e..19b95a7 100644 --- a/source/game/options.cpp +++ b/source/game/options.cpp @@ -41,6 +41,26 @@ namespace Options { } } + static void loadVideoConfigFromYaml(const fkyaml::node& yaml) { + if (!yaml.contains("video")) return; + const auto& node = yaml["video"]; + + if (node.contains("gpu_acceleration")) + video.gpu_acceleration = node["gpu_acceleration"].get_value(); + if (node.contains("shader_enabled")) + video.shader_enabled = node["shader_enabled"].get_value(); + if (node.contains("supersampling")) + video.supersampling = node["supersampling"].get_value(); + if (node.contains("integer_scale")) + video.integer_scale = node["integer_scale"].get_value(); + if (node.contains("aspect_ratio_4_3")) + video.aspect_ratio_4_3 = node["aspect_ratio_4_3"].get_value(); + if (node.contains("downscale_algo")) + video.downscale_algo = node["downscale_algo"].get_value(); + if (node.contains("linear_upscale")) + video.linear_upscale = node["linear_upscale"].get_value(); + } + static void loadWindowConfigFromYaml(const fkyaml::node& yaml) { if (!yaml.contains("window")) return; const auto& node = yaml["window"]; @@ -94,6 +114,7 @@ namespace Options { return true; } + loadVideoConfigFromYaml(yaml); loadWindowConfigFromYaml(yaml); loadAudioConfigFromYaml(yaml); loadGameConfigFromYaml(yaml); @@ -129,6 +150,18 @@ namespace Options { file << "version: \"" << Texts::VERSION << "\"\n"; file << "\n"; + // VIDEO + file << "# VIDEO\n"; + file << "video:\n"; + file << " gpu_acceleration: " << (video.gpu_acceleration ? "true" : "false") << "\n"; + file << " shader_enabled: " << (video.shader_enabled ? "true" : "false") << "\n"; + file << " supersampling: " << (video.supersampling ? "true" : "false") << "\n"; + file << " integer_scale: " << (video.integer_scale ? "true" : "false") << "\n"; + file << " aspect_ratio_4_3: " << (video.aspect_ratio_4_3 ? "true" : "false") << "\n"; + file << " downscale_algo: " << video.downscale_algo << " # 0=bilinear, 1=Lanczos2, 2=Lanczos3\n"; + file << " linear_upscale: " << (video.linear_upscale ? "true" : "false") << "\n"; + file << "\n"; + // WINDOW file << "# WINDOW\n"; file << "window:\n"; diff --git a/source/game/options.hpp b/source/game/options.hpp index cc327b2..e1aec60 100644 --- a/source/game/options.hpp +++ b/source/game/options.hpp @@ -7,11 +7,16 @@ namespace Options { - // Tecles GUI (finestra, zoom) + // Tecles GUI (finestra, zoom, shaders) struct KeysGUI { SDL_Scancode dec_zoom{Defaults::KeysGUI::DEC_ZOOM}; SDL_Scancode inc_zoom{Defaults::KeysGUI::INC_ZOOM}; SDL_Scancode fullscreen{Defaults::KeysGUI::FULLSCREEN}; + SDL_Scancode toggle_shader{Defaults::KeysGUI::TOGGLE_SHADER}; + SDL_Scancode toggle_aspect_ratio{Defaults::KeysGUI::TOGGLE_ASPECT_RATIO}; + SDL_Scancode toggle_supersampling{Defaults::KeysGUI::TOGGLE_SUPERSAMPLING}; + SDL_Scancode next_shader{Defaults::KeysGUI::NEXT_SHADER}; + SDL_Scancode next_shader_preset{Defaults::KeysGUI::NEXT_SHADER_PRESET}; }; // Tecles de joc (moviment, accions) @@ -23,6 +28,17 @@ namespace Options { SDL_Scancode exit{Defaults::KeysGame::EXIT}; }; + // Opcions de vídeo + struct Video { + bool gpu_acceleration{Defaults::Video::GPU_ACCELERATION}; + bool shader_enabled{Defaults::Video::SHADER_ENABLED}; + bool supersampling{Defaults::Video::SUPERSAMPLING}; + bool integer_scale{Defaults::Video::INTEGER_SCALE}; + bool aspect_ratio_4_3{Defaults::Video::ASPECT_RATIO_4_3}; + int downscale_algo{Defaults::Video::DOWNSCALE_ALGO}; + bool linear_upscale{Defaults::Video::LINEAR_UPSCALE}; + }; + // Opcions d'àudio struct Audio { bool music_enabled{Defaults::Audio::MUSIC_ENABLED}; @@ -49,6 +65,7 @@ namespace Options { inline std::string version{}; inline KeysGUI keys_gui{}; inline KeysGame keys_game{}; + inline Video video{}; inline Audio audio{}; inline Window window{}; inline Game game{}; diff --git a/tools/shaders/compile_spirv.cmake b/tools/shaders/compile_spirv.cmake new file mode 100644 index 0000000..e41ad2f --- /dev/null +++ b/tools/shaders/compile_spirv.cmake @@ -0,0 +1,101 @@ +# compile_spirv.cmake +# Compila shaders GLSL a SPIR-V y genera headers C++ embebibles. +# Multiplataforma: Windows, macOS, Linux (no requiere bash, xxd ni /tmp/). +# +# Invocado por CMakeLists.txt con: +# cmake -D GLSLC= -D SHADERS_DIR= -D HEADERS_DIR= -P compile_spirv.cmake +# +# También puede ejecutarse manualmente desde la raíz del proyecto: +# cmake -D GLSLC=glslc -D SHADERS_DIR=data/shaders -D HEADERS_DIR=source/core/rendering/sdl3gpu -P tools/shaders/compile_spirv.cmake + +cmake_minimum_required(VERSION 3.10) +cmake_policy(SET CMP0007 NEW) + +# Lista de shaders: fuente relativa a SHADERS_DIR +set(SHADER_SOURCES + "postfx.vert" + "postfx.frag" + "upscale.frag" + "downscale.frag" + "crtpi_frag.glsl" +) + +# Nombre de la variable C++ para cada shader (mismo orden) +set(SHADER_VARS + "kpostfx_vert_spv" + "kpostfx_frag_spv" + "kupscale_frag_spv" + "kdownscale_frag_spv" + "kcrtpi_frag_spv" +) + +# Flags extra de glslc para cada shader (vacío si no hay) +set(SHADER_FLAGS + "" + "" + "" + "" + "-fshader-stage=frag" +) + +list(LENGTH SHADER_SOURCES NUM_SHADERS) +math(EXPR LAST_IDX "${NUM_SHADERS} - 1") + +foreach(IDX RANGE ${LAST_IDX}) + list(GET SHADER_SOURCES ${IDX} SRC_NAME) + list(GET SHADER_VARS ${IDX} VAR) + list(GET SHADER_FLAGS ${IDX} EXTRA_FLAG) + + # Derivar nombre del header desde la variable: kpostfx_vert_spv → postfx_vert_spv.h + string(REGEX REPLACE "^k" "" HDR_BASE "${VAR}") + set(SRC "${SHADERS_DIR}/${SRC_NAME}") + set(SPV "${HEADERS_DIR}/${HDR_BASE}.spv") + set(HDR "${HEADERS_DIR}/${HDR_BASE}.h") + + message(STATUS "Compilando ${SRC} ...") + + if(EXTRA_FLAG) + execute_process( + COMMAND "${GLSLC}" "${EXTRA_FLAG}" "${SRC}" -o "${SPV}" + RESULT_VARIABLE GLSLC_RESULT + ERROR_VARIABLE GLSLC_ERROR + ) + else() + execute_process( + COMMAND "${GLSLC}" "${SRC}" -o "${SPV}" + RESULT_VARIABLE GLSLC_RESULT + ERROR_VARIABLE GLSLC_ERROR + ) + endif() + + if(NOT GLSLC_RESULT EQUAL 0) + message(FATAL_ERROR "glslc falló para ${SRC}:\n${GLSLC_ERROR}") + endif() + + # Leer binario SPV como hex (sin separadores: "0302230700...") + file(READ "${SPV}" HEX_DATA HEX) + # Dividir en pares de caracteres hex → lista de bytes + string(REGEX MATCHALL ".." BYTES "${HEX_DATA}") + list(LENGTH BYTES NUM_BYTES) + + # Construir el cuerpo del array C++ con un byte por línea + set(ARRAY_BODY "") + foreach(BYTE ${BYTES}) + string(APPEND ARRAY_BODY " 0x${BYTE},\n") + endforeach() + + file(WRITE "${HDR}" + "#pragma once\n" + "#include \n" + "#include \n" + "static const uint8_t ${VAR}[] = {\n" + "${ARRAY_BODY}" + "};\n" + "static const size_t ${VAR}_size = ${NUM_BYTES};\n" + ) + + file(REMOVE "${SPV}") + message(STATUS " -> ${HDR} (${NUM_BYTES} bytes)") +endforeach() + +message(STATUS "Shaders SPIR-V compilados correctamente.")