First Commit

This commit is contained in:
2025-11-18 14:18:26 -07:00
parent 33eb6e3707
commit 27277ec342
6106 changed files with 3571167 additions and 0 deletions

804
3rdparty/sdl/SDL/test/CMakeLists.txt vendored Normal file
View File

@@ -0,0 +1,804 @@
#
# CMake script for building the SDL tests
#
cmake_minimum_required(VERSION 3.16)
set(SDL3_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake")
include(CheckIncludeFile)
include(CheckStructHasMember)
include(CMakePushCheckState)
include(sdlcompilers)
find_package(Python3 COMPONENTS Interpreter)
if(NOT PYTHON3_EXECUTABLE)
set(PYTHON3_EXECUTABLE "python3")
endif()
if(SDL_TESTS_LINK_SHARED)
set(sdl_name_component SDL3-shared)
else()
set(sdl_name_component SDL3-static)
endif()
set(HAVE_TESTS_LINK_SHARED "${SDL_TESTS_LINK_SHARED}" PARENT_SCOPE)
# CMake incorrectly detects opengl32.lib being present on MSVC ARM64
if(NOT (MSVC AND SDL_CPU_ARM64))
# Prefer GLVND, if present
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL)
endif()
set(SDL_TEST_EXECUTABLES)
add_library(sdltests_utils OBJECT
testutils.c
)
target_link_libraries(sdltests_utils PRIVATE SDL3::Headers)
file(GLOB RESOURCE_FILES *.bmp *.wav *.hex moose.dat utf8.txt)
option(SDLTEST_TRACKMEM "Run tests with --trackmem" OFF)
if(WIN32)
option(SDLTEST_PROCDUMP "Run tests using sdlprocdump for minidump generation" OFF)
add_executable(sdlprocdump win32/sdlprocdump.c)
set_property(TARGET sdlprocdump PROPERTY C_STANDARD "90")
SDL_AddCommonCompilerFlags(sdlprocdump)
if(SDLTEST_PROCDUMP)
set(CMAKE_TEST_LAUNCHER "$<TARGET_FILE:sdlprocdump>;--")
else()
set_property(TARGET sdlprocdump PROPERTY EXCLUDE_FROM_ALL "1")
endif()
endif()
if(EMSCRIPTEN)
set(SDLTEST_BROWSER "firefox" CACHE STRING "Browser in which to run SDL unit tests (chrome or firefox)")
set(SDLTEST_PORT "8080" CACHE STRING "Port on which to serve the tests")
set(SDLTEST_CHROME_BINARY "" CACHE STRING "Chrome/Chromium browser binary (optional)")
if(TARGET Python3::Interpreter)
add_custom_target(serve-sdl-tests
COMMAND Python3::Interpreter "${CMAKE_CURRENT_SOURCE_DIR}/emscripten/server.py"
"${SDLTEST_PORT}"
-d "${CMAKE_CURRENT_BINARY_DIR}"
--map "${SDL3_SOURCE_DIR}:/SDL")
endif()
endif()
if(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
set(test_bin_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
if(NOT IS_ABSOLUTE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
set(test_bin_dir "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
endif()
else()
set(test_bin_dir "${CMAKE_CURRENT_BINARY_DIR}")
endif()
if(NOT CMAKE_VERSION VERSION_LESS 3.20)
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
set(test_bin_dir "${test_bin_dir}$<$<BOOL:${is_multi_config}>:/$<CONFIG>>")
endif()
set(RESOURCE_FILE_NAMES)
set(RESOURCE_FILES_BINDIR)
foreach(resource_file IN LISTS RESOURCE_FILES)
get_filename_component(res_file_name ${resource_file} NAME)
list(APPEND RESOURCE_FILE_NAMES "${res_file_name}")
set(resource_file_bindir "${test_bin_dir}/${res_file_name}")
add_custom_command(OUTPUT "${resource_file_bindir}"
COMMAND "${CMAKE_COMMAND}" -E copy "${resource_file}" "${resource_file_bindir}"
DEPENDS "${resource_file}"
)
list(APPEND RESOURCE_FILES_BINDIR "${resource_file_bindir}")
endforeach()
add_custom_target(copy-sdl-test-resources
DEPENDS "${RESOURCE_FILES_BINDIR}"
)
define_property(TARGET PROPERTY SDL_NONINTERACTIVE BRIEF_DOCS "If true, target is a non-interactive test executable." FULL_DOCS "If true, target is a noninteractive test executable.")
define_property(TARGET PROPERTY SDL_NONINTERACTIVE_ARGUMENTS BRIEF_DOCS "Argument(s) to run executable in non-interactive mode." FULL_DOCS "Argument(s) to run executable in non-interactive mode.")
define_property(TARGET PROPERTY SDL_NONINTERACTIVE_TIMEOUT BRIEF_DOCS "Timeout for noninteractive executable." FULL_DOCS "Timeout for noninteractive executable.")
macro(add_sdl_test_executable TARGET)
cmake_parse_arguments(AST "BUILD_DEPENDENT;NONINTERACTIVE;NEEDS_RESOURCES;TESTUTILS;THREADS;NO_C90;MAIN_CALLBACKS;NOTRACKMEM" "" "DEPENDS;DISABLE_THREADS_ARGS;NONINTERACTIVE_TIMEOUT;NONINTERACTIVE_ARGS;INSTALLED_ARGS;SOURCES" ${ARGN})
if(AST_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "Unknown argument(s): ${AST_UNPARSED_ARGUMENTS}")
endif()
if(NOT AST_SOURCES)
message(FATAL_ERROR "add_sdl_test_executable needs at least one source")
endif()
if(AST_TESTUTILS)
list(APPEND AST_SOURCES $<TARGET_OBJECTS:sdltests_utils>)
endif()
set(EXTRA_SOURCES "")
if(AST_NEEDS_RESOURCES)
list(APPEND EXTRA_SOURCES ${RESOURCE_FILES})
endif()
if(ANDROID)
add_library(${TARGET} SHARED ${AST_SOURCES} ${EXTRA_SOURCES})
else()
add_executable(${TARGET} ${AST_SOURCES} ${EXTRA_SOURCES})
endif()
target_compile_definitions(${TARGET} PRIVATE HAVE_BUILD_CONFIG)
SDL_AddCommonCompilerFlags(${TARGET})
target_include_directories(${TARGET} PRIVATE "${SDL3_SOURCE_DIR}/src/video/khronos")
target_link_libraries(${TARGET} PRIVATE SDL3::SDL3_test SDL3::${sdl_name_component})
if(NOT AST_NO_C90 AND NOT SDL_CMAKE_PLATFORM MATCHES "^(n3ds|ps2|psp)$")
set_property(TARGET ${TARGET} PROPERTY C_STANDARD 90)
set_property(TARGET ${TARGET} PROPERTY C_EXTENSIONS FALSE)
endif()
if(AST_DEPENDS)
add_dependencies(${TARGET} ${AST_DEPENDS})
endif()
list(APPEND SDL_TEST_EXECUTABLES ${TARGET})
set_property(TARGET ${TARGET} PROPERTY SDL_NOTRACKMEM ${AST_NOTRACKMEM})
if(AST_NONINTERACTIVE)
set_property(TARGET ${TARGET} PROPERTY SDL_NONINTERACTIVE 1)
endif()
set_property(TARGET ${TARGET} PROPERTY SDL_DISABLE_THREADS_ARGS "${AST_DISABLE_THREADS_ARGS}")
set_property(TARGET ${TARGET} PROPERTY SDL_THREADS "${AST_THREADS}")
if(AST_NONINTERACTIVE_ARGS)
set_property(TARGET ${TARGET} PROPERTY SDL_NONINTERACTIVE_ARGUMENTS "${AST_NONINTERACTIVE_ARGS}")
endif()
if(AST_INSTALLED_ARGS)
set_property(TARGET ${TARGET} PROPERTY SDL_INSTALLED_ARGUMENTS "${AST_INSTALLED_ARGS}")
elseif(AST_NONINTERACTIVE_ARGS)
set_property(TARGET ${TARGET} PROPERTY SDL_INSTALLED_ARGUMENTS "${AST_NONINTERACTIVE_ARGS}")
endif()
if(AST_NONINTERACTIVE_TIMEOUT)
set_property(TARGET ${TARGET} PROPERTY SDL_NONINTERACTIVE_TIMEOUT "${AST_NONINTERACTIVE_TIMEOUT}")
endif()
if(AST_NEEDS_RESOURCES)
if(PSP OR PS2 OR N3DS)
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory $<TARGET_FILE_DIR:${TARGET}>/sdl-${TARGET}
COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${RESOURCE_FILES} $<TARGET_FILE_DIR:${TARGET}>/sdl-${TARGET})
else()
add_dependencies(${TARGET} copy-sdl-test-resources)
endif()
if(APPLE)
# Make sure resource files get installed into macOS/iOS .app bundles.
set_target_properties(${TARGET} PROPERTIES RESOURCE "${RESOURCE_FILES}")
endif()
if(EMSCRIPTEN)
foreach(res IN LISTS RESOURCE_FILES)
get_filename_component(res_name "${res}" NAME)
target_link_options(${TARGET} PRIVATE "SHELL:--embed-file ${res}@${res_name}")
set_property(TARGET ${TARGET} APPEND PROPERTY LINK_DEPENDS "${res}")
endforeach()
endif()
set_property(TARGET ${TARGET} APPEND PROPERTY ADDITIONAL_CLEAN_FILES "$<TARGET_FILE_DIR:${TARGET}>/$<JOIN:${RESOURCE_FILE_NAMES},$<SEMICOLON>$<TARGET_FILE_DIR:${TARGET}>/>")
endif()
if(AST_BUILD_DEPENDENT)
target_include_directories(${TARGET} BEFORE PRIVATE $<TARGET_PROPERTY:SDL3::${sdl_name_component},INCLUDE_DIRECTORIES>)
target_include_directories(${TARGET} BEFORE PRIVATE ${SDL3_SOURCE_DIR}/src)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.20")
target_include_directories(${TARGET} AFTER PRIVATE "${SDL3_SOURCE_DIR}/include/build_config")
endif()
endif()
if(WINDOWS)
# CET support was added in VS 16.7
if(MSVC_VERSION GREATER 1926 AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32|x64")
set_property(TARGET ${TARGET} APPEND_STRING PROPERTY LINK_FLAGS " -CETCOMPAT")
endif()
elseif(PSP)
target_link_libraries(${TARGET} PRIVATE GL)
elseif(EMSCRIPTEN)
set_property(TARGET ${TARGET} PROPERTY SUFFIX ".html")
target_link_options(${TARGET} PRIVATE "SHELL:--pre-js ${CMAKE_CURRENT_SOURCE_DIR}/emscripten/pre.js")
target_link_options(${TARGET} PRIVATE "-sEXIT_RUNTIME=1")
set_property(TARGET ${TARGET} APPEND PROPERTY LINK_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/emscripten/pre.js")
endif()
if(OPENGL_FOUND)
target_compile_definitions(${TARGET} PRIVATE HAVE_OPENGL)
endif()
# FIXME: only add "${SDL3_BINARY_DIR}/include-config-$<LOWER_CASE:$<CONFIG>>" + include paths of external dependencies
target_include_directories(${TARGET} PRIVATE "$<TARGET_PROPERTY:SDL3::${sdl_name_component},INCLUDE_DIRECTORIES>")
endmacro()
check_include_file(signal.h HAVE_SIGNAL_H)
if(HAVE_SIGNAL_H)
add_definitions(-DHAVE_SIGNAL_H)
endif()
check_include_file(libudev.h HAVE_LIBUDEV_H)
if(HAVE_LIBUDEV_H)
add_definitions(-DHAVE_LIBUDEV_H)
endif()
function(files2headers OUTPUT)
set(xxd "${SDL3_SOURCE_DIR}/cmake/xxd.py")
set(inputs ${ARGN})
set(outputs )
foreach(input IN LISTS inputs)
get_filename_component(file_we "${input}" NAME_WE)
set(intermediate "${CMAKE_CURRENT_BINARY_DIR}/${file_we}.h")
set(output "${CMAKE_CURRENT_SOURCE_DIR}/${file_we}.h")
list(APPEND outputs "${output}")
if(TARGET Python3::Interpreter AND NOT CMAKE_CROSSCOMPILING)
list(APPEND outputs "${intermediate}")
# Don't add the 'output' header to the output, to avoid marking them as GENERATED
# (generated files are removed when running the CLEAN target)
add_custom_command(OUTPUT "${intermediate}"
COMMAND Python3::Interpreter "${xxd}" -i "${CMAKE_CURRENT_SOURCE_DIR}/${input}" "-o" "${intermediate}"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${intermediate}" "${output}"
DEPENDS "${xxd}" "${bmp}"
)
endif()
endforeach()
set(${OUTPUT} "${outputs}" PARENT_SCOPE)
add_custom_target(generate-${OUTPUT} DEPENDS ${outputs})
endfunction()
files2headers(gamepad_image_headers
gamepad_axis_arrow.bmp
gamepad_axis.bmp
gamepad_back.bmp
gamepad_battery.bmp
gamepad_battery_wired.bmp
gamepad_button_background.bmp
gamepad_button.bmp
gamepad_button_small.bmp
gamepad_face_abxy.bmp
gamepad_face_bayx.bmp
gamepad_face_sony.bmp
gamepad_front.bmp
gamepad_touchpad.bmp
gamepad_wired.bmp
gamepad_wireless.bmp
)
files2headers(icon_bmp_header icon.bmp)
files2headers(glass_bmp_header glass.bmp)
set(FFmpeg_FIND_COMPONENTS AVCODEC AVFORMAT AVUTIL SWSCALE)
include("${CMAKE_CURRENT_LIST_DIR}/../cmake/FindFFmpeg.cmake")
if(FFmpeg_FOUND)
cmake_push_check_state()
list(APPEND CMAKE_REQUIRED_INCLUDES "${FFmpeg_AVUTIL_INCLUDE_DIRS}")
list(APPEND CMAKE_REQUIRED_INCLUDES "${SDL3_SOURCE_DIR}/src/video/khronos")
check_struct_has_member("AVFrame" "ch_layout" "libavutil/frame.h" LIBAVUTIL_AVFRAME_HAS_CH_LAYOUT)
check_struct_has_member("AVVulkanFramesContext" "format" "libavutil/hwcontext_vulkan.h" LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT)
cmake_pop_check_state()
endif()
if(FFmpeg_FOUND AND LIBAVUTIL_AVFRAME_HAS_CH_LAYOUT)
add_sdl_test_executable(testffmpeg NO_C90 SOURCES testffmpeg.c testffmpeg_vulkan.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header)
if(LIBAVUTIL_AVFULKANFRAMESCONTEXT_HAS_FORMAT)
target_compile_definitions(testffmpeg PRIVATE FFMPEG_VULKAN_SUPPORT)
endif()
if(APPLE)
target_link_options(testffmpeg PRIVATE "-Wl,-framework,CoreVideo")
endif()
if(TARGET OpenGL::EGL)
message(DEBUG "Enabling EGL support in testffmpeg")
target_link_libraries(testffmpeg PRIVATE OpenGL::EGL)
target_compile_definitions(testffmpeg PRIVATE HAVE_EGL)
endif()
target_include_directories(testffmpeg SYSTEM BEFORE PRIVATE ${SDL3_SOURCE_DIR}/src/video/khronos)
target_link_libraries(testffmpeg PRIVATE ${FFMPEG_LIBRARIES})
else()
message(STATUS "Can't find ffmpeg 5.1.3 or newer, skipping testffmpeg")
endif()
add_sdl_test_executable(checkkeys SOURCES checkkeys.c)
add_sdl_test_executable(loopwave NEEDS_RESOURCES TESTUTILS MAIN_CALLBACKS SOURCES loopwave.c)
add_sdl_test_executable(testsurround SOURCES testsurround.c)
add_sdl_test_executable(testresample NEEDS_RESOURCES SOURCES testresample.c)
add_sdl_test_executable(testaudioinfo SOURCES testaudioinfo.c)
add_sdl_test_executable(testaudiostreamdynamicresample NEEDS_RESOURCES TESTUTILS SOURCES testaudiostreamdynamicresample.c)
file(GLOB TESTAUTOMATION_SOURCE_FILES testautomation*.c)
add_sdl_test_executable(testautomation NONINTERACTIVE NONINTERACTIVE_TIMEOUT 120 NEEDS_RESOURCES BUILD_DEPENDENT NO_C90 SOURCES ${TESTAUTOMATION_SOURCE_FILES})
if(EMSCRIPTEN)
target_link_options(testautomation PRIVATE -sALLOW_MEMORY_GROWTH=1 -sMAXIMUM_MEMORY=1gb)
endif()
add_sdl_test_executable(testmultiaudio NEEDS_RESOURCES TESTUTILS SOURCES testmultiaudio.c)
add_sdl_test_executable(testaudiohotplug NEEDS_RESOURCES TESTUTILS SOURCES testaudiohotplug.c)
add_sdl_test_executable(testaudiorecording MAIN_CALLBACKS SOURCES testaudiorecording.c)
add_sdl_test_executable(testatomic NONINTERACTIVE DISABLE_THREADS_ARGS "--no-threads" SOURCES testatomic.c)
add_sdl_test_executable(testintersections SOURCES testintersections.c)
add_sdl_test_executable(testrelative SOURCES testrelative.c)
add_sdl_test_executable(testhittesting SOURCES testhittesting.c)
add_sdl_test_executable(testdraw SOURCES testdraw.c)
add_sdl_test_executable(testdrawchessboard SOURCES testdrawchessboard.c)
add_sdl_test_executable(testdropfile MAIN_CALLBACKS SOURCES testdropfile.c)
add_sdl_test_executable(testerror NONINTERACTIVE DISABLE_THREADS_ARGS "--no-threads" SOURCES testerror.c)
set(build_options_dependent_tests )
add_sdl_test_executable(testevdev BUILD_DEPENDENT NONINTERACTIVE NO_C90 SOURCES testevdev.c)
if(MACOS)
add_sdl_test_executable(testnative BUILD_DEPENDENT NEEDS_RESOURCES TESTUTILS
SOURCES
testnative.c
testnativecocoa.m
testnativex11.c
)
elseif(WINDOWS)
add_sdl_test_executable(testnative BUILD_DEPENDENT NEEDS_RESOURCES TESTUTILS SOURCES testnative.c testnativew32.c)
elseif(HAVE_X11 OR HAVE_WAYLAND)
add_sdl_test_executable(testnative BUILD_DEPENDENT NO_C90 NEEDS_RESOURCES TESTUTILS SOURCES testnative.c)
if(HAVE_X11)
target_sources(testnative PRIVATE testnativex11.c)
target_link_libraries(testnative PRIVATE X11)
endif()
if(HAVE_WAYLAND)
set_property(SOURCE ${SDL3_BINARY_DIR}/wayland-generated-protocols/xdg-shell-protocol.c PROPERTY GENERATED 1)
target_sources(testnative PRIVATE testnativewayland.c ${SDL3_BINARY_DIR}/wayland-generated-protocols/xdg-shell-protocol.c)
# Needed to silence the documentation warning in the generated header file
target_compile_options(testnative PRIVATE -Wno-documentation-unknown-command)
target_link_libraries(testnative PRIVATE wayland-client)
endif ()
endif()
add_sdl_test_executable(testasyncio MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testasyncio.c)
add_sdl_test_executable(testaudio MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testaudio.c)
add_sdl_test_executable(testcolorspace SOURCES testcolorspace.c)
add_sdl_test_executable(testfile NONINTERACTIVE SOURCES testfile.c)
add_sdl_test_executable(testcontroller TESTUTILS SOURCES testcontroller.c gamepadutils.c ${gamepad_image_headers} DEPENDS generate-gamepad_image_headers)
add_sdl_test_executable(testgeometry TESTUTILS SOURCES testgeometry.c)
add_sdl_test_executable(testgl SOURCES testgl.c)
add_sdl_test_executable(testgles SOURCES testgles.c)
add_sdl_test_executable(testgpu_simple_clear SOURCES testgpu_simple_clear.c)
add_sdl_test_executable(testgpu_spinning_cube SOURCES testgpu_spinning_cube.c)
if(ANDROID)
target_link_libraries(testgles PRIVATE GLESv1_CM)
elseif(IOS OR TVOS)
find_library(GLES_LIB OpenGLES REQUIRED)
target_link_libraries(testgles PRIVATE "${GLES_LIB}")
endif()
add_sdl_test_executable(testgles2 SOURCES testgles2.c)
add_sdl_test_executable(testhaptic SOURCES testhaptic.c)
add_sdl_test_executable(testhotplug SOURCES testhotplug.c)
add_sdl_test_executable(testpen SOURCES testpen.c)
add_sdl_test_executable(testrumble SOURCES testrumble.c)
add_sdl_test_executable(testthread NONINTERACTIVE THREADS NONINTERACTIVE_TIMEOUT 40 SOURCES testthread.c)
add_sdl_test_executable(testiconv NEEDS_RESOURCES TESTUTILS SOURCES testiconv.c)
add_sdl_test_executable(testime NEEDS_RESOURCES TESTUTILS SOURCES testime.c)
add_sdl_test_executable(testkeys SOURCES testkeys.c)
add_sdl_test_executable(testloadso SOURCES testloadso.c)
add_sdl_test_executable(testlocale NONINTERACTIVE SOURCES testlocale.c)
add_sdl_test_executable(testlock NO_C90 SOURCES testlock.c)
add_sdl_test_executable(testrwlock SOURCES testrwlock.c)
add_sdl_test_executable(testmouse SOURCES testmouse.c)
add_sdl_test_executable(testoverlay NEEDS_RESOURCES TESTUTILS SOURCES testoverlay.c)
add_sdl_test_executable(testplatform NONINTERACTIVE SOURCES testplatform.c)
add_sdl_test_executable(testpower NONINTERACTIVE SOURCES testpower.c)
add_sdl_test_executable(testfilesystem NONINTERACTIVE SOURCES testfilesystem.c)
if(WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 4)
add_sdl_test_executable(pretest SOURCES pretest.c NONINTERACTIVE NONINTERACTIVE_TIMEOUT 60)
endif()
add_sdl_test_executable(testrendertarget NEEDS_RESOURCES TESTUTILS SOURCES testrendertarget.c)
add_sdl_test_executable(testscale NEEDS_RESOURCES TESTUTILS SOURCES testscale.c)
add_sdl_test_executable(testsem NONINTERACTIVE DISABLE_THREADS_ARGS "--no-threads" NONINTERACTIVE_ARGS 10 NONINTERACTIVE_TIMEOUT 30 SOURCES testsem.c)
add_sdl_test_executable(testsensor SOURCES testsensor.c)
add_sdl_test_executable(testshader NEEDS_RESOURCES TESTUTILS SOURCES testshader.c)
if(EMSCRIPTEN)
target_link_options(testshader PRIVATE "-sLEGACY_GL_EMULATION")
endif()
add_sdl_test_executable(testshape NEEDS_RESOURCES SOURCES testshape.c ${glass_bmp_header} DEPENDS generate-glass_bmp_header)
add_sdl_test_executable(testsprite MAIN_CALLBACKS NEEDS_RESOURCES TESTUTILS SOURCES testsprite.c)
add_sdl_test_executable(testspriteminimal SOURCES testspriteminimal.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header)
add_sdl_test_executable(testspritesurface SOURCES testspritesurface.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header)
add_sdl_test_executable(teststreaming NEEDS_RESOURCES TESTUTILS SOURCES teststreaming.c)
add_sdl_test_executable(testtimer NONINTERACTIVE NONINTERACTIVE_ARGS --no-interactive NONINTERACTIVE_TIMEOUT 60 SOURCES testtimer.c)
add_sdl_test_executable(testurl SOURCES testurl.c)
add_sdl_test_executable(testver NONINTERACTIVE NOTRACKMEM SOURCES testver.c)
add_sdl_test_executable(testcamera MAIN_CALLBACKS SOURCES testcamera.c)
add_sdl_test_executable(testclipboard MAIN_CALLBACKS SOURCES testclipboard.c ${icon_bmp_header} DEPENDS generate-icon_bmp_header)
add_sdl_test_executable(testviewport NEEDS_RESOURCES TESTUTILS SOURCES testviewport.c)
add_sdl_test_executable(testwm SOURCES testwm.c)
add_sdl_test_executable(testyuv NONINTERACTIVE NONINTERACTIVE_ARGS "--automated" NEEDS_RESOURCES TESTUTILS SOURCES testyuv.c testyuv_cvt.c)
add_sdl_test_executable(torturethread NONINTERACTIVE THREADS NONINTERACTIVE_TIMEOUT 30 SOURCES torturethread.c)
add_sdl_test_executable(testrendercopyex NEEDS_RESOURCES TESTUTILS SOURCES testrendercopyex.c)
add_sdl_test_executable(testmessage SOURCES testmessage.c)
add_sdl_test_executable(testdisplayinfo SOURCES testdisplayinfo.c)
add_sdl_test_executable(testqsort NONINTERACTIVE SOURCES testqsort.c)
add_sdl_test_executable(testbounds NONINTERACTIVE SOURCES testbounds.c)
add_sdl_test_executable(testcustomcursor SOURCES testcustomcursor.c)
add_sdl_test_executable(testvulkan NO_C90 SOURCES testvulkan.c)
add_sdl_test_executable(testoffscreen SOURCES testoffscreen.c)
add_sdl_test_executable(testpopup SOURCES testpopup.c)
add_sdl_test_executable(testdialog SOURCES testdialog.c)
add_sdl_test_executable(testtime SOURCES testtime.c)
add_sdl_test_executable(testmanymouse SOURCES testmanymouse.c)
add_sdl_test_executable(testmodal SOURCES testmodal.c)
add_sdl_test_executable(testtray SOURCES testtray.c)
add_sdl_test_executable(testprocess
NONINTERACTIVE THREADS
NONINTERACTIVE_ARGS $<TARGET_FILE:childprocess>
INSTALLED_ARGS "${CMAKE_INSTALL_FULL_LIBEXECDIR}/installed-tests/SDL3/childprocess${CMAKE_EXECUTABLE_SUFFIX}"
SOURCES testprocess.c
)
add_sdl_test_executable(childprocess SOURCES childprocess.c)
add_dependencies(testprocess childprocess)
if (HAVE_WAYLAND)
# Set the GENERATED property on the protocol file, since it is first created at build time
set_property(SOURCE ${SDL3_BINARY_DIR}/wayland-generated-protocols/xdg-shell-protocol.c PROPERTY GENERATED 1)
add_sdl_test_executable(testwaylandcustom NO_C90 NEEDS_RESOURCES SOURCES testwaylandcustom.c ${SDL3_BINARY_DIR}/wayland-generated-protocols/xdg-shell-protocol.c)
# Needed to silence the documentation warning in the generated header file
target_compile_options(testwaylandcustom PRIVATE -Wno-documentation-unknown-command)
target_link_libraries(testwaylandcustom PRIVATE wayland-client)
endif()
check_c_compiler_flag(-Wformat-overflow HAVE_WFORMAT_OVERFLOW)
if(HAVE_WFORMAT_OVERFLOW)
target_compile_definitions(testautomation PRIVATE HAVE_WFORMAT_OVERFLOW)
endif()
check_c_compiler_flag(-Wformat HAVE_WFORMAT)
if(HAVE_WFORMAT)
target_compile_definitions(testautomation PRIVATE HAVE_WFORMAT)
endif()
cmake_push_check_state()
if(HAVE_WFORMAT)
# Some compilers ignore -Wformat-extra-args without -Wformat
string(APPEND CMAKE_REQUIRED_FLAGS " -Wformat")
endif()
check_c_compiler_flag(-Wformat-extra-args HAVE_WFORMAT_EXTRA_ARGS)
cmake_pop_check_state()
if(HAVE_WFORMAT_EXTRA_ARGS)
target_compile_definitions(testautomation PRIVATE HAVE_WFORMAT_EXTRA_ARGS)
endif()
if(SDL_DUMMYAUDIO)
set_property(TARGET testaudioinfo PROPERTY SDL_NONINTERACTIVE 1)
endif()
if(SDL_DUMMYVIDEO)
set_property(TARGET testkeys PROPERTY SDL_NONINTERACTIVE 1)
set_property(TARGET testbounds PROPERTY SDL_NONINTERACTIVE 1)
set_property(TARGET testdisplayinfo PROPERTY SDL_NONINTERACTIVE 1)
endif()
if(OPENGL_FOUND)
if(TARGET OpenGL::GL)
target_link_libraries(testshader PRIVATE OpenGL::GL)
target_link_libraries(testgl PRIVATE OpenGL::GL)
else()
if(EMSCRIPTEN AND OPENGL_gl_LIBRARY STREQUAL "nul")
set(OPENGL_gl_LIBRARY GL)
endif()
# emscripten's FindOpenGL.cmake does not create OpenGL::GL
target_link_libraries(testshader PRIVATE ${OPENGL_gl_LIBRARY})
target_link_libraries(testgl PRIVATE ${OPENGL_gl_LIBRARY})
endif()
endif()
if(MACOS)
target_link_options(testnative PRIVATE "-Wl,-framework,Cocoa")
endif()
if(APPLE)
cmake_push_check_state()
check_c_compiler_flag(-Wno-error=deprecated-declarations HAVE_WNO_ERROR_DEPRECATED_DECLARATIONS)
cmake_pop_check_state()
if(HAVE_WNO_ERROR_DEPRECATED_DECLARATIONS)
set_property(SOURCE "testnativecocoa.m" APPEND PROPERTY COMPILE_OPTIONS "-Wno-error=deprecated-declarations")
set_property(TARGET testgles APPEND PROPERTY COMPILE_OPTIONS "-Wno-error=deprecated-declarations")
endif()
endif()
if(PSP)
# Build EBOOT files if building for PSP
foreach(APP ${SDL_TEST_EXECUTABLES})
create_pbp_file(
TARGET ${APP}
TITLE SDL-${APP}
ICON_PATH NULL
BACKGROUND_PATH NULL
PREVIEW_PATH NULL
OUTPUT_DIR $<TARGET_FILE_DIR:${APP}>/sdl-${APP}
)
endforeach()
endif()
if(N3DS)
foreach(APP ${SDL_TEST_EXECUTABLES})
get_target_property(TARGET_BINARY_DIR ${APP} BINARY_DIR)
set(ROMFS_DIR "${TARGET_BINARY_DIR}/sdl-${APP}")
set(SMDH_FILE "${TARGET_BINARY_DIR}/${APP}.smdh")
file(MAKE_DIRECTORY ${ROMFS_DIR})
ctr_generate_smdh("${SMDH_FILE}"
NAME "SDL-${APP}"
DESCRIPTION "SDL3 Test suite"
AUTHOR "SDL3 Contributors"
ICON "${CMAKE_CURRENT_SOURCE_DIR}/n3ds/logo48x48.png"
)
ctr_create_3dsx(
${APP}
ROMFS "${ROMFS_DIR}"
SMDH "${SMDH_FILE}"
)
endforeach()
endif()
if(RISCOS)
set(SDL_TEST_EXECUTABLES_AIF)
foreach(APP ${SDL_TEST_EXECUTABLES})
set_property(TARGET ${APP} APPEND_STRING PROPERTY LINK_FLAGS " -static")
add_custom_command(
OUTPUT ${APP},ff8
COMMAND elf2aif ${APP} ${APP},ff8
DEPENDS ${APP}
)
add_custom_target(${APP}-aif ALL DEPENDS ${APP},ff8)
list(APPEND SDL_TEST_EXECUTABLES_AIF ${CMAKE_CURRENT_BINARY_DIR}/${APP},ff8)
endforeach()
endif()
# Set Apple App ID / Bundle ID. This is needed to launch apps on some Apple
# platforms (iOS, for example).
if(APPLE)
foreach(CURRENT_TARGET ${SDL_TEST_EXECUTABLES})
set_target_properties("${CURRENT_TARGET}" PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER "org.libsdl.${CURRENT_TARGET}"
MACOSX_BUNDLE_BUNDLE_VERSION "${SDL3_VERSION}"
MACOSX_BUNDLE_SHORT_VERSION_STRING "${SDL3_VERSION}"
)
endforeach()
endif()
set(SDLTEST_TIMEOUT_MULTIPLIER "1" CACHE STRING "SDL test time-out multiplier")
set(SDLTEST_AUDIO_DRIVER_DEFAULT "dummy")
set(SDLTEST_VIDEO_DRIVER_DEFAULT "dummy")
if(EMSCRIPTEN)
set(SDLTEST_AUDIO_DRIVER_DEFAULT "emscripten")
set(SDLTEST_VIDEO_DRIVER_DEFAULT "emscripten")
endif()
set(SDLTEST_AUDIO_DRIVER "${SDLTEST_AUDIO_DRIVER_DEFAULT}" CACHE STRING "SDL audio driver for CTest")
set(SDLTEST_VIDEO_DRIVER "${SDLTEST_VIDEO_DRIVER_DEFAULT}" CACHE STRING "SDL video driver for CTest")
set(TESTS_ENVIRONMENT
"SDL_AUDIO_DRIVER=${SDLTEST_AUDIO_DRIVER}"
"SDL_VIDEO_DRIVER=${SDLTEST_VIDEO_DRIVER}"
"SDL_ASSERT=abort"
)
function(add_sdl_test TEST TARGET)
cmake_parse_arguments(ast "INSTALL" "" "" ${ARGN})
get_property(noninteractive TARGET ${TARGET} PROPERTY SDL_NONINTERACTIVE)
if(noninteractive)
if(EMSCRIPTEN)
set(command "${PYTHON3_EXECUTABLE};${CMAKE_CURRENT_SOURCE_DIR}/emscripten/driver.py;--server;http://localhost:${SDLTEST_PORT};--browser;${SDLTEST_BROWSER}")
if(SDLTEST_CHROME_BINARY)
list(APPEND command "--chrome-binary;${SDLTEST_CHROME_BINARY}")
endif()
list(APPEND command "--;${TARGET}")
else()
set(command ${TARGET})
endif()
get_property(noninteractive_arguments TARGET ${TARGET} PROPERTY SDL_NONINTERACTIVE_ARGUMENTS)
get_property(installed_arguments TARGET ${TARGET} PROPERTY SDL_INSTALLED_ARGUMENTS)
get_property(disable_threads_args TARGET ${TARGET} PROPERTY SDL_DISABLE_THREADS_ARGS)
get_property(uses_threads TARGET ${TARGET} PROPERTY SDL_THREADS)
if(noninteractive_arguments)
list(APPEND command ${noninteractive_arguments})
endif()
if(SDLTEST_TRACKMEM)
get_property(notrackmem TARGET ${TARGET} PROPERTY SDL_NOTRACKMEM)
if(NOT notrackmem)
list(APPEND command --trackmem)
endif()
endif()
if(EMSCRIPTEN)
list(APPEND command ${disable_threads_args})
endif()
add_test(
NAME ${TEST}
COMMAND ${command}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
if(WIN32 AND CMAKE_VERSION VERSION_GREATER_EQUAL "3.27")
set_property(TEST ${TEST} APPEND PROPERTY ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<TARGET_RUNTIME_DLL_DIRS:${TARGET}>")
endif()
if(NOT notrackmem)
set_property(TEST ${TEST} PROPERTY FAIL_REGULAR_EXPRESSION "Total: [0-9]+\\.[0-9]+ Kb in [1-9][0-9]* allocations")
endif()
set_tests_properties(${TEST} PROPERTIES ENVIRONMENT "${TESTS_ENVIRONMENT}")
if(EMSCRIPTEN AND uses_threads)
set_tests_properties(${TEST} PROPERTIES DISABLED 1)
endif()
get_property(noninteractive_timeout TARGET ${TARGET} PROPERTY SDL_NONINTERACTIVE_TIMEOUT)
if(NOT noninteractive_timeout)
set(noninteractive_timeout 10)
endif()
math(EXPR noninteractive_timeout "${noninteractive_timeout}*${SDLTEST_TIMEOUT_MULTIPLIER}")
set_tests_properties(${TEST} PROPERTIES TIMEOUT "${noninteractive_timeout}")
if(ast_INSTALL AND SDL_INSTALL_TESTS)
set(exe ${TARGET})
set(installedtestsdir "${CMAKE_INSTALL_FULL_LIBEXECDIR}/installed-tests/SDL3")
configure_file(template.test.in "${exe}.test" @ONLY)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${exe}.test"
DESTINATION ${CMAKE_INSTALL_DATADIR}/installed-tests/SDL3
)
endif()
if(TARGET pretest AND NOT "${TARGET}" MATCHES "pretest")
set_property(TEST ${TEST} APPEND PROPERTY DEPENDS pretest)
endif()
endif()
endfunction()
foreach(TARGET ${SDL_TEST_EXECUTABLES})
add_sdl_test(${TARGET} ${TARGET} INSTALL)
endforeach()
if(NOT EMSCRIPTEN)
add_sdl_test(testautomation-no-simd testautomation)
add_sdl_test(testplatform-no-simd testplatform)
set_property(TEST testautomation-no-simd testplatform-no-simd APPEND PROPERTY ENVIRONMENT "SDL_CPU_FEATURE_MASK=-all")
# testautomation creates temporary files which might conflict
set_property(TEST testautomation-no-simd testautomation PROPERTY RUN_SERIAL TRUE)
endif()
if(SDL_INSTALL_TESTS)
if(RISCOS)
install(
FILES ${SDL_TEST_EXECUTABLES_AIF}
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3
)
else()
install(
TARGETS ${SDL_TEST_EXECUTABLES}
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3
)
endif()
if(MSVC)
foreach(test IN LISTS SDL_TEST_EXECUTABLES)
SDL_install_pdb(${test} "${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3")
endforeach()
endif()
install(
FILES ${RESOURCE_FILES}
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/installed-tests/SDL3
)
endif()
if(ANDROID AND TARGET SDL3::Jar)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../cmake/android")
find_package(SdlAndroid MODULE)
if(SdlAndroid_FOUND)
set(apks "")
set(packages "")
include(SdlAndroidFunctions)
sdl_create_android_debug_keystore(SDL_test-debug-keystore)
sdl_android_compile_resources(SDL_test-resources RESFOLDER android/res)
add_custom_target(sdl-test-apks)
foreach(TEST ${SDL_TEST_EXECUTABLES})
set(ANDROID_MANIFEST_APP_NAME "${TEST}")
set(ANDROID_MANIFEST_LABEL "${TEST}")
set(ANDROID_MANIFEST_LIB_NAME "$<TARGET_FILE_BASE_NAME:${TEST}>")
set(ANDROID_MANIFEST_PACKAGE "org.libsdl.sdl.test.${TEST}")
set(generated_manifest_path "${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-src/AndroidManifest.xml")
string(REPLACE "." "/" JAVA_PACKAGE_DIR "${ANDROID_MANIFEST_PACKAGE}")
set(GENERATED_SRC_FOLDER "${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-src")
set(GENERATED_RES_FOLDER "${GENERATED_SRC_FOLDER}/res")
set(JAVA_PACKAGE_DIR "${GENERATED_SRC_FOLDER}/${JAVA_PACKAGE_DIR}")
configure_file(android/cmake/SDLEntryTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java" @ONLY)
configure_file(android/cmake/SDLTestActivity.java.cmake "${JAVA_PACKAGE_DIR}/SDLTestActivity.java" @ONLY)
configure_file(android/cmake/res/values/strings.xml.cmake android/res/values/strings-${TEST}.xml @ONLY)
configure_file(android/cmake/res/xml/shortcuts.xml.cmake "${GENERATED_RES_FOLDER}/xml/shortcuts.xml" @ONLY)
configure_file(android/cmake/AndroidManifest.xml.cmake "${generated_manifest_path}" @ONLY)
file(GENERATE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-$<CONFIG>/res/values/strings.xml"
INPUT "${CMAKE_CURRENT_BINARY_DIR}/android/res/values/strings-${TEST}.xml"
)
sdl_android_compile_resources(${TEST}-resources
RESOURCES
"${CMAKE_CURRENT_BINARY_DIR}/android/${TEST}-$<CONFIG>/res/values/strings.xml"
"${GENERATED_RES_FOLDER}/xml/shortcuts.xml"
)
sdl_android_link_resources(${TEST}-apk-linked
MANIFEST "${generated_manifest_path}"
PACKAGE ${ANDROID_MANIFEST_PACKAGE}
RES_TARGETS SDL_test-resources ${TEST}-resources
TARGET_SDK_VERSION 31
)
set(CMAKE_JAVA_COMPILE_FLAGS "-encoding;utf-8")
set(classes_path "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TEST}-java.dir/classes")
# Some CMake versions have a slow `cmake -E make_directory` implementation
if(NOT IS_DIRECTORY "${classes_path}")
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}")
endif()
set(OUT_JAR "${CMAKE_CURRENT_BINARY_DIR}/${TEST}.jar")
add_custom_command(
OUTPUT "${OUT_JAR}"
COMMAND ${CMAKE_COMMAND} -E rm -rf "${classes_path}"
COMMAND ${CMAKE_COMMAND} -E make_directory "${classes_path}"
COMMAND ${Java_JAVAC_EXECUTABLE}
-source 1.8 -target 1.8
-bootclasspath "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>"
"${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java"
"${JAVA_PACKAGE_DIR}/SDLTestActivity.java"
$<TARGET_PROPERTY:${TEST}-apk-linked,JAVA_R>
-cp "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>:${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
-d "${classes_path}"
COMMAND ${Java_JAR_EXECUTABLE} cf "${OUT_JAR}" -C "${classes_path}" .
DEPENDS $<TARGET_PROPERTY:${TEST}-apk-linked,OUTPUTS> "$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>" "${JAVA_PACKAGE_DIR}/SDLTestActivity.java" "${JAVA_PACKAGE_DIR}/SDLEntryTestActivity.java"
)
add_custom_target(${TEST}-jar DEPENDS "${OUT_JAR}")
set_property(TARGET ${TEST}-jar PROPERTY OUTPUT "${OUT_JAR}")
set(dexworkdir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TEST}-dex.dir")
# Some CMake versions have a slow `cmake -E make_directory` implementation
if(NOT IS_DIRECTORY "${dexworkdir}")
execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${dexworkdir}")
endif()
set(classes_dex_base_name "classes.dex")
set(classes_dex "${dexworkdir}/${classes_dex_base_name}")
add_custom_command(
OUTPUT "${classes_dex}"
COMMAND SdlAndroid::d8
$<TARGET_PROPERTY:${TEST}-jar,OUTPUT>
$<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
--lib "${SDL_ANDROID_PLATFORM_ANDROID_JAR}"
--output "${dexworkdir}"
DEPENDS $<TARGET_PROPERTY:${TEST}-jar,OUTPUT> $<TARGET_PROPERTY:SDL3::Jar,JAR_FILE>
)
add_custom_target(${TEST}-dex DEPENDS "${classes_dex}")
set_property(TARGET ${TEST}-dex PROPERTY OUTPUT "${classes_dex}")
set_property(TARGET ${TEST}-dex PROPERTY OUTPUT_BASE_NAME "${classes_dex_base_name}")
sdl_add_to_apk_unaligned(${TEST}-unaligned-apk
APK_IN ${TEST}-apk-linked
OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
ASSETS ${RESOURCE_FILES}
NATIVE_LIBS SDL3::SDL3-shared ${TEST}
DEX ${TEST}-dex
)
sdl_apk_align(${TEST}-aligned-apk ${TEST}-unaligned-apk
OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/intermediates"
)
sdl_apk_sign(${TEST}-apk ${TEST}-aligned-apk
KEYSTORE SDL_test-debug-keystore
)
add_dependencies(sdl-test-apks ${TEST}-apk)
if(TARGET SdlAndroid::adb)
add_custom_target(install-${TEST}
COMMAND "${CMAKE_COMMAND}" -DACTION=install "-DAPKS=$<TARGET_PROPERTY:${TEST}-apk,OUTPUT>" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
DEPENDS "${TEST}-apk"
)
add_custom_target(start-${TEST}
COMMAND "${ADB_BIN}" shell am start-activity -S "${ANDROID_MANIFEST_PACKAGE}/.SDLTestActivity"
)
add_custom_target(build-install-start-${TEST}
COMMAND "${CMAKE_COMMAND}" -DACTION=build-install-run "-DEXECUTABLES=${TEST}" "-DBUILD_FOLDER=${CMAKE_BINARY_DIR}" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
)
endif()
list(APPEND packages "${ANDROID_MANIFEST_PACKAGE}")
list(APPEND install_targets install-${TEST})
endforeach()
if(TARGET SdlAndroid::adb)
add_custom_target(install-sdl-test-apks
DEPENDS ${install_targets}
VERBATIM
)
add_custom_target(uninstall-sdl-test-apks
COMMAND "${CMAKE_COMMAND}" "-DADB=$<TARGET_FILE:SdlAndroid::adb>" -DACTION=uninstall "-DPACKAGES=${packages}" -P "${SDL3_SOURCE_DIR}/cmake/android/SdlAndroidScript.cmake"
VERBATIM
)
endif()
endif()
endif()

8
3rdparty/sdl/SDL/test/COPYING vendored Normal file
View File

@@ -0,0 +1,8 @@
The test programs in this directory tree are for demonstrating and
testing the functionality of the SDL library, and are placed in the
public domain.
October 28, 1997
--
Sam Lantinga (slouken@libsdl.org)

49
3rdparty/sdl/SDL/test/LICENSE.txt vendored Normal file
View File

@@ -0,0 +1,49 @@
Source code in this directory, unless otherwise noted, falls under the
following license, which is different (more permissive) than SDL's usual
license.
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
This directory contains sample.wav, which is a sample from Will Provost's
song, The Living Proof:
From the album The Living Proof
Publisher: 5 Guys Named Will
Copyright 1996 Will Provost
You can get a copy of the full song (and album!) from iTunes...
https://itunes.apple.com/us/album/the-living-proof/id4153978
or Amazon...
http://www.amazon.com/The-Living-Proof-Will-Provost/dp/B00004R8RH
Thanks to Will for permitting us to distribute this sample with SDL!
This directory contains sword.wav:
sword04.wav by Erdie
Original: https://freesound.org/s/27858/
License: https://creativecommons.org/licenses/by/4.0/
The .bmp files used by testaudio.c were made by AlDraw:
https://linktr.ee/AlexDraw
These bitmaps may be distributed as public domain files!

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="@ANDROID_MANIFEST_PACKAGE@">
<!-- OpenGL ES 2.0 -->
<uses-feature android:glEsVersion="0x00020000" />
<!-- Touchscreen support -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<!-- Game controller support -->
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />
<!-- External mouse input events -->
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />
<!-- Allow access to the vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- Allow access to the microphone -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Allow access to the camera -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<application
android:allowBackup="true"
android:icon="@mipmap/sdl-test"
android:roundIcon="@mipmap/sdl-test_round"
android:label="@string/label"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:hardwareAccelerated="true">
<activity
android:name="@ANDROID_MANIFEST_PACKAGE@.SDLTestActivity"
android:exported="true"
android:label="@string/label"
android:alwaysRetainTaskState="true"
android:launchMode="singleInstance"
android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:preferMinimalPostProcessing="true"
android:screenOrientation="fullSensor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.app.shortcuts"
android:resource="@xml/shortcuts" />
</activity>
<activity
android:name="@ANDROID_MANIFEST_PACKAGE@.SDLEntryTestActivity"
android:exported="false"
android:label="@string/label">
</activity>
</application>
</manifest>

View File

@@ -0,0 +1,121 @@
package @ANDROID_MANIFEST_PACKAGE@;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import org.libsdl.app.SDL;
import org.libsdl.app.SDLActivity;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
public class SDLEntryTestActivity extends Activity {
public String MODIFY_ARGUMENTS = "@ANDROID_MANIFEST_PACKAGE@.MODIFY_ARGUMENTS";
boolean isModifyingArguments;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.v("SDL", "SDLEntryTestActivity onCreate");
super.onCreate(savedInstanceState);
String intent_action = getIntent().getAction();
Log.v("SDL", "SDLEntryTestActivity intent.action = " + intent_action);
if (intent_action == MODIFY_ARGUMENTS) {
isModifyingArguments = true;
createArgumentLayout();
} else {
startChildActivityAndFinish();
}
}
protected void createArgumentLayout() {
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.arguments_layout, null);
setContentView(view);
Button button = (Button)requireViewById(R.id.arguments_start_button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startChildActivityAndFinish();
}
});
}
protected String[] getArguments() {
if (!isModifyingArguments) {
return new String[0];
}
EditText editText = (EditText)findViewById(R.id.arguments_edit);
String text = editText.getText().toString();
String new_text = text.replace("[ \t]*[ \t\n]+[ \t]+", "\n").strip();
Log.v("SDL", "text = " + text + "\n becomes \n" + new_text);
return new_text.split("\n", 0);
}
@Override
protected void onStart() {
Log.v("SDL", "SDLEntryTestActivity onStart");
super.onStart();
}
@Override
protected void onResume() {
Log.v("SDL", "SDLEntryTestActivity onResume");
super.onResume();
}
@Override
protected void onPause() {
Log.v("SDL", "SDLEntryTestActivity onPause");
super.onPause();
}
@Override
protected void onStop() {
Log.v("SDL", "SDLEntryTestActivity onStop");
super.onStop();
}
@Override
protected void onDestroy() {
Log.v("SDL", "SDLEntryTestActivity onDestroy");
super.onDestroy();
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
Log.v("SDL", "SDLEntryTestActivity onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
EditText editText = (EditText)findViewById(R.id.arguments_edit);
editText.setText(savedInstanceState.getCharSequence("args", ""), TextView.BufferType.EDITABLE);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.v("SDL", "SDLEntryTestActivity onSaveInstanceState");
EditText editText = (EditText)findViewById(R.id.arguments_edit);
outState.putCharSequence("args", editText.getText());
super.onSaveInstanceState(outState);
}
private void startChildActivityAndFinish() {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName("@ANDROID_MANIFEST_PACKAGE@", "@ANDROID_MANIFEST_PACKAGE@.SDLTestActivity");
intent.putExtra("arguments", getArguments());
startActivity(intent);
finish();
}
}

View File

@@ -0,0 +1,33 @@
package @ANDROID_MANIFEST_PACKAGE@;
import org.libsdl.app.SDLActivity;
import android.os.Bundle;
import android.util.Log;
public class SDLTestActivity extends SDLActivity {
private String[] m_arguments;
@Override
protected void onCreate(Bundle savedInstanceState) {
m_arguments = getIntent().getStringArrayExtra("arguments");
if (m_arguments == null) {
m_arguments = new String[0];
}
super.onCreate(savedInstanceState);
}
@Override
protected String[] getLibraries() {
return new String[] { getString(R.string.lib_name) };
}
@Override
protected String[] getArguments() {
Log.v("SDLTest", "#arguments = " + m_arguments.length);
for(int i = 0; i < m_arguments.length; i++) {
Log.v("SDLTest", "argument[" + i + "] = " + m_arguments[i]);
}
return m_arguments;
}
}

View File

@@ -0,0 +1,5 @@
<resources>
<string name="app_name">@ANDROID_MANIFEST_APP_NAME@</string>
<string name="lib_name">@ANDROID_MANIFEST_LIB_NAME@</string>
<string name="label">@ANDROID_MANIFEST_LABEL@</string>
</resources>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
<shortcut
android:shortcutId="modifyArguments"
android:enabled="true"
android:icon="@drawable/sdl-test_foreground"
android:shortcutShortLabel="@string/shortcutModifyArgumentsShortLabel">
<intent
android:action="@ANDROID_MANIFEST_PACKAGE@.MODIFY_ARGUMENTS"
android:targetPackage="@ANDROID_MANIFEST_PACKAGE@"
android:targetClass="@ANDROID_MANIFEST_PACKAGE@.SDLEntryTestActivity" />
</shortcut>
<shortcut
android:shortcutId="intermediateActivity"
android:enabled="true"
android:icon="@drawable/sdl-test_foreground"
android:shortcutShortLabel="@string/shortcutIntermediateActivityShortLabel">
<intent
android:action="android.intent.action.MAIN"
android:targetPackage="@ANDROID_MANIFEST_PACKAGE@"
android:targetClass="@ANDROID_MANIFEST_PACKAGE@.SDLEntryTestActivity" />
</shortcut>
<!-- Specify more shortcuts here. -->
</shortcuts>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical" >
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:inputType="textImeMultiLine|textNoSuggestions"
android:text="@string/label_enter_arguments" />
<EditText
android:id="@+id/arguments_edit"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="top"
android:hint="@string/hint_enter_arguments_here" />
<Button
android:id="@+id/arguments_start_button"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/button_start_app" />
</LinearLayout>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/sdl-test_background"/>
<foreground android:drawable="@drawable/sdl-test_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/sdl-test_background"/>
<foreground android:drawable="@drawable/sdl-test_foreground"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -0,0 +1,7 @@
<resources>
<string name="label_enter_arguments">Arguments</string>
<string name="hint_enter_arguments_here">One argument per line.\ne.g.\n--track-mem\n--windows\n3</string>
<string name="button_start_app">Start</string>
<string name="shortcutModifyArgumentsShortLabel">Modify arguments</string>
<string name="shortcutIntermediateActivityShortLabel">Pass through activity</string>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="sdl-test_background">#FFFFFF</color>
</resources>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.NoTitleBar.Fullscreen">
<!-- Customize your theme here. -->
</style>
</resources>

BIN
3rdparty/sdl/SDL/test/audiofile.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

531
3rdparty/sdl/SDL/test/checkkeys.c vendored Normal file
View File

@@ -0,0 +1,531 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
/* Simple program: Loop, watching keystrokes
Note that you need to call SDL_PollEvent() or SDL_WaitEvent() to
pump the event loop and catch keystrokes.
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
#ifdef SDL_PLATFORM_EMSCRIPTEN
#include <emscripten/emscripten.h>
#endif
#define TEXT_WINDOW_OFFSET_X 2.0f
#define TEXT_WINDOW_OFFSET_Y (2.0f + FONT_LINE_HEIGHT)
#define CURSOR_BLINK_INTERVAL_MS 500
typedef struct
{
SDLTest_TextWindow *textwindow;
char *edit_text;
int edit_cursor;
int edit_length;
} TextWindowState;
static SDLTest_CommonState *state;
static TextWindowState *windowstates;
static bool escape_pressed;
static bool cursor_visible;
static Uint64 last_cursor_change;
static int done;
static TextWindowState *GetTextWindowStateForWindowID(SDL_WindowID id)
{
int i;
for (i = 0; i < state->num_windows; ++i) {
if (id == SDL_GetWindowID(state->windows[i])) {
return &windowstates[i];
}
}
return NULL;
}
static SDLTest_TextWindow *GetTextWindowForWindowID(SDL_WindowID id)
{
TextWindowState *windowstate = GetTextWindowStateForWindowID(id);
if (windowstate) {
return windowstate->textwindow;
}
return NULL;
}
static void UpdateTextWindowInputRect(SDL_WindowID id)
{
int i;
for (i = 0; i < state->num_windows; ++i) {
if (id == SDL_GetWindowID(state->windows[i])) {
SDLTest_TextWindow *textwindow = windowstates[i].textwindow;
int w, h;
SDL_Rect rect;
int cursor = 0;
int current = textwindow->current;
const char *current_line = textwindow->lines[current];
SDL_GetWindowSize(state->windows[i], &w, &h);
if (current_line) {
cursor = (int)SDL_utf8strlen(current_line) * FONT_CHARACTER_SIZE;
}
rect.x = (int)TEXT_WINDOW_OFFSET_X;
rect.y = (int)TEXT_WINDOW_OFFSET_Y + current * FONT_LINE_HEIGHT;
rect.w = (int)(w - (2 * TEXT_WINDOW_OFFSET_X));
rect.h = FONT_CHARACTER_SIZE;
SDL_SetTextInputArea(state->windows[i], &rect, cursor);
return;
}
}
}
static void print_string(char **text, size_t *maxlen, const char *fmt, ...)
{
int len;
va_list ap;
va_start(ap, fmt);
len = SDL_vsnprintf(*text, *maxlen, fmt, ap);
if (len > 0) {
*text += len;
if (((size_t)len) < *maxlen) {
*maxlen -= (size_t)len;
} else {
*maxlen = 0;
}
}
va_end(ap);
}
static void print_modifiers(char **text, size_t *maxlen, SDL_Keymod mod)
{
print_string(text, maxlen, " modifiers:");
if (mod == SDL_KMOD_NONE) {
print_string(text, maxlen, " (none)");
return;
}
if ((mod & SDL_KMOD_SHIFT) == SDL_KMOD_SHIFT) {
print_string(text, maxlen, " SHIFT");
} else {
if (mod & SDL_KMOD_LSHIFT) {
print_string(text, maxlen, " LSHIFT");
}
if (mod & SDL_KMOD_RSHIFT) {
print_string(text, maxlen, " RSHIFT");
}
}
if ((mod & SDL_KMOD_CTRL) == SDL_KMOD_CTRL) {
print_string(text, maxlen, " CTRL");
} else {
if (mod & SDL_KMOD_LCTRL) {
print_string(text, maxlen, " LCTRL");
}
if (mod & SDL_KMOD_RCTRL) {
print_string(text, maxlen, " RCTRL");
}
}
if ((mod & SDL_KMOD_ALT) == SDL_KMOD_ALT) {
print_string(text, maxlen, " ALT");
} else {
if (mod & SDL_KMOD_LALT) {
print_string(text, maxlen, " LALT");
}
if (mod & SDL_KMOD_RALT) {
print_string(text, maxlen, " RALT");
}
}
if ((mod & SDL_KMOD_GUI) == SDL_KMOD_GUI) {
print_string(text, maxlen, " GUI");
} else {
if (mod & SDL_KMOD_LGUI) {
print_string(text, maxlen, " LGUI");
}
if (mod & SDL_KMOD_RGUI) {
print_string(text, maxlen, " RGUI");
}
}
if (mod & SDL_KMOD_NUM) {
print_string(text, maxlen, " NUM");
}
if (mod & SDL_KMOD_CAPS) {
print_string(text, maxlen, " CAPS");
}
if (mod & SDL_KMOD_MODE) {
print_string(text, maxlen, " MODE");
}
if (mod & SDL_KMOD_LEVEL5) {
print_string(text, maxlen, " LEVEL5");
}
if (mod & SDL_KMOD_SCROLL) {
print_string(text, maxlen, " SCROLL");
}
}
static void PrintModifierState(void)
{
char message[512];
char *spot;
size_t left;
spot = message;
left = sizeof(message);
print_modifiers(&spot, &left, SDL_GetModState());
SDL_Log("Initial state:%s", message);
}
static void PrintKey(SDL_KeyboardEvent *event)
{
char message[512];
char *spot;
size_t left;
spot = message;
left = sizeof(message);
/* Print the keycode, name and state */
if (event->key) {
print_string(&spot, &left,
"Key %s: raw 0x%.2x, scancode %d = %s, keycode 0x%08X = %s ",
event->down ? "pressed " : "released",
event->raw,
event->scancode,
event->scancode == SDL_SCANCODE_UNKNOWN ? "UNKNOWN" : SDL_GetScancodeName(event->scancode),
event->key, SDL_GetKeyName(event->key));
} else {
print_string(&spot, &left,
"Unknown Key (raw 0x%.2x, scancode %d = %s) %s ",
event->raw,
event->scancode,
event->scancode == SDL_SCANCODE_UNKNOWN ? "UNKNOWN" : SDL_GetScancodeName(event->scancode),
event->down ? "pressed " : "released");
}
print_modifiers(&spot, &left, event->mod);
if (event->repeat) {
print_string(&spot, &left, " (repeat)");
}
SDL_Log("%s", message);
}
static void PrintText(const char *eventtype, const char *text)
{
const char *spot;
char expanded[1024];
expanded[0] = '\0';
for (spot = text; *spot; ++spot) {
size_t length = SDL_strlen(expanded);
(void)SDL_snprintf(expanded + length, sizeof(expanded) - length, "\\x%.2x", (unsigned char)*spot);
}
SDL_Log("%s Text (%s): \"%s%s\"", eventtype, expanded, *text == '"' ? "\\" : "", text);
}
static void CountKeysDown(void)
{
int i, count = 0, max_keys = 0;
const bool *keystate = SDL_GetKeyboardState(&max_keys);
for (i = 0; i < max_keys; ++i) {
if (keystate[i]) {
++count;
}
}
SDL_Log("Keys down: %d", count);
}
static void DrawCursor(int i)
{
SDL_FRect rect;
TextWindowState *windowstate = &windowstates[i];
SDLTest_TextWindow *textwindow = windowstate->textwindow;
int current = textwindow->current;
const char *current_line = textwindow->lines[current];
rect.x = TEXT_WINDOW_OFFSET_X;
if (current_line) {
rect.x += SDL_utf8strlen(current_line) * FONT_CHARACTER_SIZE;
}
if (windowstate->edit_cursor > 0) {
rect.x += (float)windowstate->edit_cursor * FONT_CHARACTER_SIZE;
}
rect.y = TEXT_WINDOW_OFFSET_Y + current * FONT_LINE_HEIGHT;
rect.w = FONT_CHARACTER_SIZE * 0.75f;
rect.h = (float)FONT_CHARACTER_SIZE;
SDL_SetRenderDrawColor(state->renderers[i], 0xAA, 0xAA, 0xAA, 255);
SDL_RenderFillRect(state->renderers[i], &rect);
}
static void DrawEditText(int i)
{
SDL_FRect rect;
TextWindowState *windowstate = &windowstates[i];
SDLTest_TextWindow *textwindow = windowstate->textwindow;
int current = textwindow->current;
const char *current_line = textwindow->lines[current];
if (windowstate->edit_text == NULL) {
return;
}
/* Draw the highlight under the selected text */
if (windowstate->edit_length > 0) {
rect.x = TEXT_WINDOW_OFFSET_X;
if (current_line) {
rect.x += SDL_utf8strlen(current_line) * FONT_CHARACTER_SIZE;
}
if (windowstate->edit_cursor > 0) {
rect.x += (float)windowstate->edit_cursor * FONT_CHARACTER_SIZE;
}
rect.y = TEXT_WINDOW_OFFSET_Y + current * FONT_LINE_HEIGHT;
rect.w = (float)windowstate->edit_length * FONT_CHARACTER_SIZE;
rect.h = (float)FONT_CHARACTER_SIZE;
SDL_SetRenderDrawColor(state->renderers[i], 0xAA, 0xAA, 0xAA, 255);
SDL_RenderFillRect(state->renderers[i], &rect);
}
/* Draw the edit text */
rect.x = TEXT_WINDOW_OFFSET_X;
if (current_line) {
rect.x += SDL_utf8strlen(current_line) * FONT_CHARACTER_SIZE;
}
rect.y = TEXT_WINDOW_OFFSET_Y + current * FONT_LINE_HEIGHT;
SDL_SetRenderDrawColor(state->renderers[i], 255, 255, 0, 255);
SDLTest_DrawString(state->renderers[i], rect.x, rect.y, windowstate->edit_text);
}
static void loop(void)
{
SDL_Event event;
Uint64 now;
int i;
char line[1024];
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_EVENT_KEY_DOWN:
case SDL_EVENT_KEY_UP:
PrintKey(&event.key);
if (event.type == SDL_EVENT_KEY_DOWN) {
switch (event.key.key) {
case SDLK_BACKSPACE:
SDLTest_TextWindowAddText(GetTextWindowForWindowID(event.key.windowID), "\b");
UpdateTextWindowInputRect(event.key.windowID);
break;
case SDLK_RETURN:
SDLTest_TextWindowAddText(GetTextWindowForWindowID(event.key.windowID), "\n");
UpdateTextWindowInputRect(event.key.windowID);
break;
default:
break;
}
if (event.key.key == SDLK_ESCAPE) {
/* Pressing escape twice will stop the application */
if (escape_pressed) {
done = 1;
} else {
escape_pressed = true;
}
} else {
escape_pressed = true;
}
}
CountKeysDown();
break;
case SDL_EVENT_TEXT_EDITING:
{
TextWindowState *windowstate = GetTextWindowStateForWindowID(event.edit.windowID);
if (windowstate->edit_text) {
SDL_free(windowstate->edit_text);
windowstate->edit_text = NULL;
}
if (event.edit.text && *event.edit.text) {
windowstate->edit_text = SDL_strdup(event.edit.text);
}
windowstate->edit_cursor = event.edit.start;
windowstate->edit_length = event.edit.length;
SDL_snprintf(line, sizeof(line), "EDIT %" SDL_PRIs32 ":%" SDL_PRIs32, event.edit.start, event.edit.length);
PrintText(line, event.edit.text);
break;
}
case SDL_EVENT_TEXT_INPUT:
PrintText("INPUT", event.text.text);
SDLTest_TextWindowAddText(GetTextWindowForWindowID(event.text.windowID), "%s", event.text.text);
UpdateTextWindowInputRect(event.text.windowID);
break;
case SDL_EVENT_FINGER_DOWN:
{
SDL_Window *window = SDL_GetWindowFromEvent(&event);
if (SDL_TextInputActive(window)) {
SDL_Log("Stopping text input for window %" SDL_PRIu32, event.tfinger.windowID);
SDL_StopTextInput(window);
} else {
SDL_Log("Starting text input for window %" SDL_PRIu32, event.tfinger.windowID);
SDL_StartTextInput(window);
}
break;
}
case SDL_EVENT_MOUSE_BUTTON_DOWN:
if (event.button.button == SDL_BUTTON_RIGHT) {
SDL_Window *window = SDL_GetWindowFromEvent(&event);
if (SDL_TextInputActive(window)) {
SDL_Log("Stopping text input for window %" SDL_PRIu32, event.button.windowID);
SDL_StopTextInput(window);
} else {
SDL_Log("Starting text input for window %" SDL_PRIu32, event.button.windowID);
SDL_StartTextInput(window);
}
}
break;
case SDL_EVENT_KEYMAP_CHANGED:
SDL_Log("Keymap changed!");
break;
case SDL_EVENT_QUIT:
done = 1;
break;
default:
break;
}
}
now = SDL_GetTicks();
for (i = 0; i < state->num_windows; i++) {
char caption[1024];
/* Clear the window */
SDL_SetRenderDrawColor(state->renderers[i], 0, 0, 0, 255);
SDL_RenderClear(state->renderers[i]);
/* Draw the text */
SDL_SetRenderDrawColor(state->renderers[i], 255, 255, 255, 255);
SDL_snprintf(caption, sizeof(caption), "Text input %s (click right mouse button to toggle)\n", SDL_TextInputActive(state->windows[i]) ? "enabled" : "disabled");
SDLTest_DrawString(state->renderers[i], TEXT_WINDOW_OFFSET_X, TEXT_WINDOW_OFFSET_X, caption);
SDLTest_TextWindowDisplay(windowstates[i].textwindow, state->renderers[i]);
/* Draw the cursor */
if ((now - last_cursor_change) >= CURSOR_BLINK_INTERVAL_MS) {
cursor_visible = !cursor_visible;
last_cursor_change = now;
}
if (cursor_visible) {
DrawCursor(i);
}
/* Draw the composition text */
DrawEditText(i);
SDL_RenderPresent(state->renderers[i]);
}
/* Slow down framerate */
SDL_Delay(100);
#ifdef SDL_PLATFORM_EMSCRIPTEN
if (done) {
emscripten_cancel_main_loop();
}
#endif
}
int main(int argc, char *argv[])
{
int i;
SDL_SetHint(SDL_HINT_WINDOWS_RAW_KEYBOARD, "1");
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
if (!state) {
return 1;
}
state->window_title = "CheckKeys Test";
/* Parse commandline */
if (!SDLTest_CommonDefaultArgs(state, argc, argv)) {
return 1;
}
/* Disable mouse emulation */
SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "0");
/* Initialize SDL */
if (!SDLTest_CommonInit(state)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return 1;
}
windowstates = (TextWindowState *)SDL_calloc(state->num_windows, sizeof(*windowstates));
if (!windowstates) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't allocate text windows: %s", SDL_GetError());
goto done;
}
for (i = 0; i < state->num_windows; ++i) {
int w, h;
SDL_FRect rect;
SDL_GetWindowSize(state->windows[i], &w, &h);
rect.x = TEXT_WINDOW_OFFSET_X;
rect.y = TEXT_WINDOW_OFFSET_Y;
rect.w = w - (2 * TEXT_WINDOW_OFFSET_X);
rect.h = h - TEXT_WINDOW_OFFSET_Y;
windowstates[i].textwindow = SDLTest_TextWindowCreate(rect.x, rect.y, rect.w, rect.h);
}
#ifdef SDL_PLATFORM_IOS
{
/* Creating the context creates the view, which we need to show keyboard */
for (i = 0; i < state->num_windows; i++) {
SDL_GL_CreateContext(state->windows[i]);
}
}
#endif
for (i = 0; i < state->num_windows; ++i) {
UpdateTextWindowInputRect(SDL_GetWindowID(state->windows[i]));
SDL_StartTextInput(state->windows[i]);
}
/* Print initial state */
SDL_PumpEvents();
PrintModifierState();
/* Watch keystrokes */
done = 0;
#ifdef SDL_PLATFORM_EMSCRIPTEN
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done) {
loop();
}
#endif
done:
if (windowstates) {
for (i = 0; i < state->num_windows; ++i) {
SDLTest_TextWindowDestroy(windowstates[i].textwindow);
}
SDL_free(windowstates);
}
SDLTest_CleanupTextDrawing();
SDLTest_CommonQuit(state);
return 0;
}

170
3rdparty/sdl/SDL/test/childprocess.c vendored Normal file
View File

@@ -0,0 +1,170 @@
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[]) {
SDLTest_CommonState *state;
int i;
bool print_arguments = false;
bool print_environment = false;
bool stdin_to_stdout = false;
bool read_stdin = false;
bool stdin_to_stderr = false;
SDL_IOStream *log_stdin = NULL;
int exit_code = 0;
state = SDLTest_CommonCreateState(argv, 0);
for (i = 1; i < argc;) {
int consumed = SDLTest_CommonArg(state, i);
if (!consumed) {
if (SDL_strcmp(argv[i], "--print-arguments") == 0) {
print_arguments = true;
consumed = 1;
} else if (SDL_strcmp(argv[i], "--print-environment") == 0) {
print_environment = true;
consumed = 1;
} else if (SDL_strcmp(argv[i], "--stdin-to-stdout") == 0) {
stdin_to_stdout = true;
consumed = 1;
} else if (SDL_strcmp(argv[i], "--stdin-to-stderr") == 0) {
stdin_to_stderr = true;
consumed = 1;
} else if (SDL_strcmp(argv[i], "--stdin") == 0) {
read_stdin = true;
consumed = 1;
} else if (SDL_strcmp(argv[i], "--stdout") == 0) {
if (i + 1 < argc) {
fprintf(stdout, "%s", argv[i + 1]);
consumed = 2;
}
} else if (SDL_strcmp(argv[i], "--stderr") == 0) {
if (i + 1 < argc) {
fprintf(stderr, "%s", argv[i + 1]);
consumed = 2;
}
} else if (SDL_strcmp(argv[i], "--log-stdin") == 0) {
if (i + 1 < argc) {
log_stdin = SDL_IOFromFile(argv[i + 1], "w");
if (!log_stdin) {
fprintf(stderr, "Couldn't open %s\n", argv[i + 1]);
return 2;
}
consumed = 2;
}
} else if (SDL_strcmp(argv[i], "--exit-code") == 0) {
if (i + 1 < argc) {
char *endptr = NULL;
exit_code = SDL_strtol(argv[i + 1], &endptr, 0);
if (endptr && *endptr == '\0') {
consumed = 2;
}
}
} else if (SDL_strcmp(argv[i], "--version") == 0) {
int version = SDL_GetVersion();
fprintf(stdout, "SDL version %d.%d.%d",
SDL_VERSIONNUM_MAJOR(version),
SDL_VERSIONNUM_MINOR(version),
SDL_VERSIONNUM_MICRO(version));
fprintf(stderr, "SDL version %d.%d.%d",
SDL_VERSIONNUM_MAJOR(version),
SDL_VERSIONNUM_MINOR(version),
SDL_VERSIONNUM_MICRO(version));
consumed = 1;
break;
} else if (SDL_strcmp(argv[i], "--") == 0) {
i++;
break;
}
}
if (consumed <= 0) {
const char *args[] = {
"[--print-arguments]",
"[--print-environment]",
"[--stdin]",
"[--log-stdin FILE]",
"[--stdin-to-stdout]",
"[--stdout TEXT]",
"[--stdin-to-stderr]",
"[--stderr TEXT]",
"[--exit-code EXIT_CODE]",
"[--] [ARG [ARG ...]]",
NULL
};
SDLTest_CommonLogUsage(state, argv[0], args);
return 1;
}
i += consumed;
}
if (print_arguments) {
int print_i;
for (print_i = 0; i + print_i < argc; print_i++) {
fprintf(stdout, "|%d=%s|\r\n", print_i, argv[i + print_i]);
}
fflush(stdout);
}
if (print_environment) {
char **env = SDL_GetEnvironmentVariables(SDL_GetEnvironment());
if (env) {
for (i = 0; env[i]; ++i) {
fprintf(stdout, "%s\n", env[i]);
}
SDL_free(env);
}
fflush(stdout);
}
if (stdin_to_stdout || stdin_to_stderr || read_stdin) {
for (;;) {
char buffer[4 * 4096];
size_t result;
result = fread(buffer, 1, sizeof(buffer), stdin);
if (result == 0) {
if (!feof(stdin)) {
char error[128];
if (errno == EAGAIN) {
clearerr(stdin);
SDL_Delay(20);
continue;
}
#ifdef SDL_PLATFORM_WINDOWS
if (strerror_s(error, sizeof(error), errno) != 0) {
SDL_strlcpy(error, "Unknown error", sizeof(error));
}
#else
SDL_strlcpy(error, strerror(errno), sizeof(error));
#endif
SDL_Log("Error reading from stdin: %s", error);
}
break;
}
if (log_stdin) {
SDL_WriteIO(log_stdin, buffer, result);
SDL_FlushIO(log_stdin);
}
if (stdin_to_stdout) {
fwrite(buffer, 1, result, stdout);
fflush(stdout);
}
if (stdin_to_stderr) {
fwrite(buffer, 1, result, stderr);
}
}
}
if (log_stdin) {
SDL_CloseIO(log_stdin);
}
SDLTest_CommonDestroyState(state);
return exit_code;
}

184
3rdparty/sdl/SDL/test/emscripten/driver.py vendored Executable file
View File

@@ -0,0 +1,184 @@
#!/usr/bin/env python
import argparse
import contextlib
import logging
import os
import pathlib
import shlex
import sys
import time
from typing import Optional
import urllib.parse
from selenium import webdriver
import selenium.common.exceptions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
logger = logging.getLogger(__name__)
class SDLSeleniumTestDriver:
def __init__(self, server: str, test: str, arguments: list[str], browser: str, firefox_binary: Optional[str]=None, chrome_binary: Optional[str]=None):
self. server = server
self.test = test
self.arguments = arguments
self.chrome_binary = chrome_binary
self.firefox_binary = firefox_binary
self.driver = None
self.stdout_printed = False
self.failed_messages: list[str] = []
self.return_code = None
options = [
"--headless",
]
driver_contructor = None
match browser:
case "firefox":
driver_contructor = webdriver.Firefox
driver_options = webdriver.FirefoxOptions()
if self.firefox_binary:
driver_options.binary_location = self.firefox_binary
case "chrome":
driver_contructor = webdriver.Chrome
driver_options = webdriver.ChromeOptions()
if self.chrome_binary:
driver_options.binary_location = self.chrome_binary
options.append("--no-sandbox")
if driver_contructor is None:
raise ValueError(f"Invalid {browser=}")
for o in options:
driver_options.add_argument(o)
logger.debug("About to create driver")
self.driver = driver_contructor(options=driver_options)
@property
def finished(self):
return len(self.failed_messages) > 0 or self.return_code is not None
def __del__(self):
if self.driver:
self.driver.quit()
@property
def url(self):
req = {
"loghtml": "1",
"SDL_ASSERT": "abort",
}
for key, value in os.environ.items():
if key.startswith("SDL_"):
req[key] = value
req.update({f"arg_{i}": a for i, a in enumerate(self.arguments, 1) })
req_str = urllib.parse.urlencode(req)
return f"{self.server}/{self.test}.html?{req_str}"
@contextlib.contextmanager
def _selenium_catcher(self):
try:
yield
success = True
except selenium.common.exceptions.UnexpectedAlertPresentException as e:
# FIXME: switch context, verify text of dialog and answer "a" for abort
wait = WebDriverWait(self.driver, timeout=2)
try:
alert = wait.until(lambda d: d.switch_to.alert)
except selenium.common.exceptions.NoAlertPresentException:
self.failed_messages.append(e.msg)
return False
self.failed_messages.append(alert)
if "Assertion failure" in e.msg and "[ariA]" in e.msg:
alert.send_keys("a")
alert.accept()
else:
self.failed_messages.append(e.msg)
success = False
return success
def get_stdout_and_print(self):
if self.stdout_printed:
return
with self._selenium_catcher():
div_terminal = self.driver.find_element(by=By.ID, value="terminal")
assert div_terminal
text = div_terminal.text
print(text)
self.stdout_printed = True
def update_return_code(self):
with self._selenium_catcher():
div_process_quit = self.driver.find_element(by=By.ID, value="process-quit")
if not div_process_quit:
return
if div_process_quit.text != "":
try:
self.return_code = int(div_process_quit.text)
except ValueError:
raise ValueError(f"process-quit element contains invalid data: {div_process_quit.text:r}")
def loop(self):
print(f"Connecting to \"{self.url}\"", file=sys.stderr)
self.driver.get(url=self.url)
self.driver.implicitly_wait(0.2)
while True:
self.update_return_code()
if self.finished:
break
time.sleep(0.1)
self.get_stdout_and_print()
if not self.stdout_printed:
self.failed_messages.append("Failed to get stdout/stderr")
def main() -> int:
parser = argparse.ArgumentParser(allow_abbrev=False, description="Selenium SDL test driver")
parser.add_argument("--browser", default="firefox", choices=["firefox", "chrome"], help="browser")
parser.add_argument("--server", default="http://localhost:8080", help="Server where SDL tests live")
parser.add_argument("--verbose", action="store_true", help="Verbose logging")
parser.add_argument("--chrome-binary", help="Chrome binary")
parser.add_argument("--firefox-binary", help="Firefox binary")
index_double_dash = sys.argv.index("--")
if index_double_dash < 0:
parser.error("Missing test arguments. Need -- <FILENAME> <ARGUMENTS>")
driver_arguments = sys.argv[1:index_double_dash]
test = pathlib.Path(sys.argv[index_double_dash+1]).name
test_arguments = sys.argv[index_double_dash+2:]
args = parser.parse_args(args=driver_arguments)
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
logger.debug("driver_arguments=%r test=%r test_arguments=%r", driver_arguments, test, test_arguments)
sdl_test_driver = SDLSeleniumTestDriver(
server=args.server,
test=test,
arguments=test_arguments,
browser=args.browser,
chrome_binary=args.chrome_binary,
firefox_binary=args.firefox_binary,
)
sdl_test_driver.loop()
rc = sdl_test_driver.return_code
if sdl_test_driver.failed_messages:
for msg in sdl_test_driver.failed_messages:
print(f"FAILURE MESSAGE: {msg}", file=sys.stderr)
if rc == 0:
print(f"Test signaled success (rc=0) but a failure happened", file=sys.stderr)
rc = 1
sys.stdout.flush()
logger.info("Exit code = %d", rc)
return rc
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -0,0 +1,25 @@
Module['arguments'] = ['0'];
//Gamepads don't appear until a button is pressed and the joystick/gamepad tests expect one to be connected
Module['preRun'].push(function()
{
Module['print']("Waiting for gamepad...");
Module['addRunDependency']("gamepad");
window.addEventListener('gamepadconnected', function()
{
//OK, got one
Module['removeRunDependency']("gamepad");
}, false);
//chrome
if(!!navigator.webkitGetGamepads)
{
var timeout = function()
{
if(navigator.webkitGetGamepads()[0] !== undefined)
Module['removeRunDependency']("gamepad");
else
setTimeout(timeout, 100);
}
setTimeout(timeout, 100);
}
});

54
3rdparty/sdl/SDL/test/emscripten/pre.js vendored Normal file
View File

@@ -0,0 +1,54 @@
const searchParams = new URLSearchParams(window.location.search);
Module.preRun = () => {
};
const arguments = [];
for (let i = 1; true; i++) {
const arg_i = searchParams.get(`arg_${i}`);
if (arg_i == null) {
break;
}
arguments.push(arg_i);
}
Module.arguments = arguments;
if (searchParams.get("loghtml") === "1") {
const divTerm = document.createElement("div");
divTerm.id = "terminal";
document.body.append(divTerm);
function printToStdOut(msg, id) {
const divMsg = document.createElement("div", {class: "stdout"});
divMsg.id = id;
divMsg.append(document.createTextNode(msg));
divTerm.append(divMsg);
return divMsg;
}
Module.print = (msg) => {
console.log(msg);
printToStdOut(msg, "stdout");
}
Module.printErr = (msg) => {
console.error(msg);
const e = printToStdOut(msg, "stderr");
e.style = "color:red";
}
const divQuit = document.createElement("div");
divQuit.id = "process-quit";
document.body.append(divQuit);
Module.quit = (msg) => {
divQuit.innerText = msg;
console.log(`QUIT: ${msg}`)
}
Module.onabort = (msg) => {
printToStdOut(`ABORT: ${msg}`, "stderr");
console.log(`ABORT: ${msg}`);
}
}

102
3rdparty/sdl/SDL/test/emscripten/server.py vendored Executable file
View File

@@ -0,0 +1,102 @@
#!/usr/bin/env python
# Based on http/server.py from Python
from argparse import ArgumentParser
import contextlib
from http.server import SimpleHTTPRequestHandler
from http.server import ThreadingHTTPServer
import os
import socket
class MyHTTPRequestHandler(SimpleHTTPRequestHandler):
extensions_map = {
".manifest": "text/cache-manifest",
".html": "text/html",
".png": "image/png",
".jpg": "image/jpg",
".svg": "image/svg+xml",
".css": "text/css",
".js": "application/x-javascript",
".wasm": "application/wasm",
"": "application/octet-stream",
}
def __init__(self, *args, maps=None, **kwargs):
self.maps = maps or []
SimpleHTTPRequestHandler.__init__(self, *args, **kwargs)
def end_headers(self):
self.send_my_headers()
SimpleHTTPRequestHandler.end_headers(self)
def send_my_headers(self):
self.send_header("Cache-Control", "no-cache, no-store, must-revalidate")
self.send_header("Pragma", "no-cache")
self.send_header("Expires", "0")
def translate_path(self, path):
for map_path, map_prefix in self.maps:
if path.startswith(map_prefix):
res = os.path.join(map_path, path.removeprefix(map_prefix).lstrip("/"))
break
else:
res = super().translate_path(path)
return res
def serve_forever(port: int, ServerClass):
handler = MyHTTPRequestHandler
addr = ("0.0.0.0", port)
with ServerClass(addr, handler) as httpd:
host, port = httpd.socket.getsockname()[:2]
url_host = f"[{host}]" if ":" in host else host
print(f"Serving HTTP on {host} port {port} (http://{url_host}:{port}/) ...")
try:
httpd.serve_forever()
except KeyboardInterrupt:
print("\nKeyboard interrupt received, exiting.")
return 0
def main():
parser = ArgumentParser(allow_abbrev=False)
parser.add_argument("port", nargs="?", type=int, default=8080)
parser.add_argument("-d", dest="directory", type=str, default=None)
parser.add_argument("--map", dest="maps", nargs="+", type=str, help="Mappings, used as e.g. \"$HOME/projects/SDL:/sdl\"")
args = parser.parse_args()
maps = []
for m in args.maps:
try:
path, uri = m.split(":", 1)
except ValueError:
parser.error(f"Invalid mapping: \"{m}\"")
maps.append((path, uri))
class DualStackServer(ThreadingHTTPServer):
def server_bind(self):
# suppress exception when protocol is IPv4
with contextlib.suppress(Exception):
self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
return super().server_bind()
def finish_request(self, request, client_address):
self.RequestHandlerClass(
request,
client_address,
self,
directory=args.directory,
maps=maps,
)
return serve_forever(
port=args.port,
ServerClass=DualStackServer,
)
if __name__ == "__main__":
raise SystemExit(main())

BIN
3rdparty/sdl/SDL/test/gamepad_axis.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

847
3rdparty/sdl/SDL/test/gamepad_axis.h vendored Normal file
View File

@@ -0,0 +1,847 @@
unsigned char gamepad_axis_bmp[] = {
0x42, 0x4d, 0x8a, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00,
0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x20, 0x6e,
0x69, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff,
0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff,
0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff,
0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x01, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff,
0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff,
0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x20, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
0xff, 0xf8, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xf9, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff,
0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe5, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x20, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff,
0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfd, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf9, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x91, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x24, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x26, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xd5, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xd0, 0xff, 0xff, 0xff, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int gamepad_axis_bmp_len = 10122;

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 B

View File

@@ -0,0 +1,38 @@
unsigned char gamepad_axis_arrow_bmp[] = {
0x42, 0x4d, 0x9a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00,
0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x20, 0x6e,
0x69, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc7, 0xc7, 0xc7, 0x7f, 0xc7, 0xc7, 0xc7, 0x02, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x02, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0x7f, 0xc7, 0xc7,
0xc7, 0x02, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0x7f, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0x7f, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0x7f, 0xc7, 0xc7,
0xc7, 0x02, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0x7f, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0x80, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0x80, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0x80, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0x80, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0x80, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x80, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7, 0xc7, 0x01, 0xc7, 0xc7,
0xc7, 0x02
};
unsigned int gamepad_axis_arrow_bmp_len = 410;

BIN
3rdparty/sdl/SDL/test/gamepad_back.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

1499
3rdparty/sdl/SDL/test/gamepad_back.h vendored Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

180
3rdparty/sdl/SDL/test/gamepad_battery.h vendored Normal file
View File

@@ -0,0 +1,180 @@
unsigned char gamepad_battery_bmp[] = {
0x42, 0x4d, 0x4a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x07,
0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x42, 0x47,
0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x26, 0x26, 0xbc, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x1a, 0x1a, 0x1a, 0xfb, 0x30, 0x30,
0x30, 0x59, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff,
0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff,
0xff, 0x00, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
0x03, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xc2, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff,
0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01,
0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x06, 0x06, 0x00, 0x4a, 0x4a, 0x4a, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x23,
0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x17, 0x17,
0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff,
0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x23, 0x23,
0x23, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x44, 0x44,
0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x2e, 0x2e,
0x2e, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x02, 0x02, 0x02, 0x00, 0x0b, 0x0b,
0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x32, 0x32, 0x32, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff,
0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x02, 0x02, 0x02, 0x00, 0x1a, 0x1a,
0x1a, 0x00, 0x45, 0x45, 0x45, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0x15, 0xff, 0x0a, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xd6, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x0d, 0x0d, 0x0d, 0xaf, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x0a, 0x0a,
0x0a, 0x52, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00
};
unsigned int gamepad_battery_bmp_len = 2122;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,179 @@
unsigned char gamepad_battery_unknown_bmp[] = {
0x42, 0x4d, 0x3a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00,
0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x20, 0x6e,
0x69, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x26, 0x26, 0x26, 0xbc, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x1a, 0x1a, 0x1a, 0xfb, 0x30, 0x30, 0x30, 0x59, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xf5, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00,
0x00, 0xed, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x56, 0x56,
0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0xd5, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xeb, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
0x06, 0x00, 0x4a, 0x4a, 0x4a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x23, 0x23, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
0x02, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01,
0x01, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x95, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00,
0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00,
0x00, 0xac, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x23, 0x23, 0x23, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00,
0x00, 0xeb, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00,
0x00, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x3e, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00,
0x00, 0x1d, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xac, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01,
0x01, 0x00, 0x32, 0x32, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x92, 0x92, 0x92, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x42, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x02, 0x02, 0x02, 0x00, 0x1a, 0x1a, 0x1a, 0x00, 0x45, 0x45,
0x45, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xc2, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x53, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00,
0x00, 0xf3, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x49, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x0d, 0x0d, 0x0d, 0xaf, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x0a, 0x0a, 0x0a, 0x52, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00
};
unsigned int gamepad_battery_unknown_bmp_len = 2106;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,179 @@
unsigned char gamepad_battery_wired_bmp[] = {
0x42, 0x4d, 0x3a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00,
0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x20, 0x6e,
0x69, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x26, 0x26, 0x26, 0xbc, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x1a, 0x1a, 0x1a, 0xfb, 0x30, 0x30, 0x30, 0x59, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xf5, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x56, 0x56,
0x56, 0x3d, 0x00, 0x00, 0x00, 0x14, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01,
0x01, 0x1f, 0x00, 0x00, 0x00, 0x8f, 0x03, 0x03, 0x03, 0x0a, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xeb, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x02, 0x02, 0x02, 0x0a, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00,
0x00, 0xb8, 0x01, 0x01, 0x01, 0x66, 0x01, 0x01, 0x01, 0x14, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x01, 0x01, 0x01, 0x7b, 0x00, 0x00, 0x00, 0xff, 0x06, 0x06,
0x06, 0xcd, 0x4a, 0x4a, 0x4a, 0x28, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x52, 0x23, 0x23, 0x23, 0xf4, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x66, 0x01, 0x01,
0x01, 0x14, 0xff, 0xff, 0xff, 0x00, 0x17, 0x17, 0x17, 0xba, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x02, 0x02,
0x02, 0x5c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01,
0x01, 0x1f, 0x03, 0x03, 0x03, 0xc2, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xa3, 0x01, 0x01,
0x01, 0x0a, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x85, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x1f, 0x1f, 0x1f, 0xda, 0x23, 0x23, 0x23, 0x33, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x44, 0x44, 0x44, 0x43, 0x00, 0x00,
0x00, 0xe0, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x2e, 0x2e, 0x2e, 0x2f, 0x0b, 0x0b,
0x0b, 0x7b, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xf5, 0x00, 0x00, 0x00, 0x70, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x02, 0x02, 0x02, 0x14, 0x0b, 0x0b, 0x0b, 0xb8, 0x00, 0x00,
0x00, 0xff, 0x11, 0x11, 0x11, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01,
0x01, 0x1f, 0x32, 0x32, 0x32, 0x77, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00,
0x00, 0xad, 0x92, 0x92, 0x92, 0x12, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x03, 0x03, 0x03, 0x70, 0x00, 0x00, 0x00, 0x3d, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x02, 0x02, 0x02, 0x14, 0x1a, 0x1a, 0x1a, 0x48, 0x45, 0x45,
0x45, 0x0a, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xc2, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xcc, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0x00, 0x0d, 0x0d, 0x0d, 0xaf, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xf5, 0x0a, 0x0a, 0x0a, 0x52, 0xff, 0xff,
0xff, 0x00, 0xff, 0xff, 0xff, 0x00
};
unsigned int gamepad_battery_wired_bmp_len = 2106;

BIN
3rdparty/sdl/SDL/test/gamepad_button.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

847
3rdparty/sdl/SDL/test/gamepad_button.h vendored Normal file
View File

@@ -0,0 +1,847 @@
unsigned char gamepad_button_bmp[] = {
0x42, 0x4d, 0x8a, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x00,
0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x20, 0x6e,
0x69, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x2d, 0x2d, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x31, 0x31,
0x31, 0xff, 0x31, 0x31, 0x31, 0xff, 0x31, 0x31, 0x31, 0xff, 0x31, 0x31,
0x31, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2c, 0x2c, 0x2c, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x32, 0x32, 0x32, 0xff, 0x35, 0x35, 0x35, 0xff, 0x36, 0x36,
0x36, 0xff, 0x38, 0x38, 0x38, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x3e, 0x3e,
0x3e, 0xff, 0x3e, 0x3e, 0x3e, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x40, 0x40,
0x40, 0xff, 0x40, 0x40, 0x40, 0xff, 0x42, 0x42, 0x42, 0xff, 0x3f, 0x3f,
0x3f, 0xff, 0x36, 0x36, 0x36, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x23, 0x23,
0x23, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x31, 0x31, 0x31, 0xff, 0x31, 0x31, 0x31, 0xff, 0x32, 0x32,
0x32, 0xff, 0x36, 0x36, 0x36, 0xff, 0x39, 0x39, 0x39, 0xff, 0x38, 0x38,
0x38, 0xff, 0x36, 0x36, 0x36, 0xff, 0x34, 0x34, 0x34, 0xff, 0x33, 0x33,
0x33, 0xff, 0x36, 0x36, 0x36, 0xff, 0x3a, 0x3a, 0x3a, 0xff, 0x3d, 0x3d,
0x3d, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x3e, 0x3e, 0x3e, 0xff, 0x43, 0x43,
0x43, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x3d, 0x3d, 0x3d, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x1d, 0x1d, 0x1d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x30, 0x30,
0x30, 0xff, 0x34, 0x34, 0x34, 0xff, 0x30, 0x30, 0x30, 0xff, 0x21, 0x21,
0x21, 0xff, 0x14, 0x14, 0x14, 0xff, 0x0a, 0x0a, 0x0a, 0xff, 0x05, 0x05,
0x05, 0xff, 0x04, 0x04, 0x04, 0xff, 0x04, 0x04, 0x04, 0xff, 0x04, 0x04,
0x04, 0xff, 0x08, 0x08, 0x08, 0xff, 0x11, 0x11, 0x11, 0xff, 0x1f, 0x1f,
0x1f, 0xff, 0x30, 0x30, 0x30, 0xff, 0x3a, 0x3a, 0x3a, 0xff, 0x3a, 0x3a,
0x3a, 0xff, 0x42, 0x42, 0x42, 0xff, 0x48, 0x48, 0x48, 0xff, 0x37, 0x37,
0x37, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0x29, 0x29, 0x29, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x2d, 0x2d, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x30, 0x30, 0x30, 0xff, 0x29, 0x29, 0x29, 0xff, 0x12, 0x12,
0x12, 0xff, 0x09, 0x09, 0x09, 0xff, 0x15, 0x15, 0x15, 0xff, 0x2e, 0x2e,
0x2e, 0xff, 0x57, 0x57, 0x57, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x91, 0x91,
0x91, 0xff, 0x95, 0x95, 0x95, 0xff, 0x89, 0x89, 0x89, 0xff, 0x6d, 0x6d,
0x6d, 0xff, 0x42, 0x42, 0x42, 0xff, 0x1c, 0x1c, 0x1c, 0xff, 0x0d, 0x0d,
0x0d, 0xff, 0x10, 0x10, 0x10, 0xff, 0x25, 0x25, 0x25, 0xff, 0x34, 0x34,
0x34, 0xff, 0x3a, 0x3a, 0x3a, 0xff, 0x45, 0x45, 0x45, 0xff, 0x3f, 0x3f,
0x3f, 0xff, 0x35, 0x35, 0x35, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x30, 0x30, 0x30, 0xff, 0x25, 0x25, 0x25, 0xff, 0x0f, 0x0f,
0x0f, 0xff, 0x13, 0x13, 0x13, 0xff, 0x47, 0x47, 0x47, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0xa8, 0xa8,
0xa8, 0xff, 0x99, 0x99, 0x99, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x8d, 0x8d,
0x8d, 0xff, 0x95, 0x95, 0x95, 0xff, 0xa3, 0xa3, 0xa3, 0xff, 0xb3, 0xb3,
0xb3, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0x9a, 0x9a, 0x9a, 0xff, 0x65, 0x65,
0x65, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x0b, 0x0b, 0x0b, 0xff, 0x21, 0x21,
0x21, 0xff, 0x34, 0x34, 0x34, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x43, 0x43,
0x43, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x30, 0x30, 0x30, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x14, 0x14,
0x14, 0xff, 0x0d, 0x0d, 0x0d, 0xff, 0x47, 0x47, 0x47, 0xff, 0x8e, 0x8e,
0x8e, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x85, 0x85, 0x85, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7b, 0x7b,
0x7b, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x88, 0x88, 0x88, 0xff, 0x99, 0x99, 0x99, 0xff, 0xa6, 0xa6,
0xa6, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x1d, 0x1d, 0x1d, 0xff, 0x0e, 0x0e,
0x0e, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x3c, 0x3c, 0x3c, 0xff, 0x44, 0x44,
0x44, 0xff, 0x38, 0x38, 0x38, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x0c, 0x0c, 0x0c, 0xff, 0x18, 0x18, 0x18, 0xff, 0x63, 0x63,
0x63, 0xff, 0x87, 0x87, 0x87, 0xff, 0x69, 0x69, 0x69, 0xff, 0x75, 0x75,
0x75, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x79, 0x79,
0x79, 0xff, 0x79, 0x79, 0x79, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x79, 0x79,
0x79, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7e, 0x7e,
0x7e, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x91, 0x91,
0x91, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x04, 0x04,
0x04, 0xff, 0x28, 0x28, 0x28, 0xff, 0x38, 0x38, 0x38, 0xff, 0x47, 0x47,
0x47, 0xff, 0x39, 0x39, 0x39, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2e, 0x2e,
0x2e, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x0f, 0x0f, 0x0f, 0xff, 0x23, 0x23,
0x23, 0xff, 0x5d, 0x5d, 0x5d, 0xff, 0x69, 0x69, 0x69, 0xff, 0x67, 0x67,
0x67, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7b, 0x7b,
0x7b, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x80, 0x80, 0x80, 0xff, 0x81, 0x81,
0x81, 0xff, 0x81, 0x81, 0x81, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81,
0x81, 0xff, 0x81, 0x81, 0x81, 0xff, 0x81, 0x81, 0x81, 0xff, 0x80, 0x80,
0x80, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0x67, 0x67, 0x67, 0xff, 0x0b, 0x0b,
0x0b, 0xff, 0x28, 0x28, 0x28, 0xff, 0x38, 0x38, 0x38, 0xff, 0x44, 0x44,
0x44, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2a, 0x2a, 0x2a, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x30, 0x30, 0x30, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x12, 0x12,
0x12, 0xff, 0x25, 0x25, 0x25, 0xff, 0x48, 0x48, 0x48, 0xff, 0x57, 0x57,
0x57, 0xff, 0x6d, 0x6d, 0x6d, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x80, 0x80, 0x80, 0xff, 0x81, 0x81,
0x81, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81, 0x81, 0xff, 0x81, 0x81,
0x81, 0xff, 0x81, 0x81, 0x81, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81,
0x81, 0xff, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0xff, 0x81, 0x81,
0x81, 0xff, 0x81, 0x81, 0x81, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x79, 0x79,
0x79, 0xff, 0xab, 0xab, 0xab, 0xff, 0x74, 0x74, 0x74, 0xff, 0x0c, 0x0c,
0x0c, 0xff, 0x28, 0x28, 0x28, 0xff, 0x3c, 0x3c, 0x3c, 0xff, 0x42, 0x42,
0x42, 0xff, 0x36, 0x36, 0x36, 0xff, 0x25, 0x25, 0x25, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x32, 0x32,
0x32, 0xff, 0x13, 0x13, 0x13, 0xff, 0x20, 0x20, 0x20, 0xff, 0x39, 0x39,
0x39, 0xff, 0x50, 0x50, 0x50, 0xff, 0x74, 0x74, 0x74, 0xff, 0x7b, 0x7b,
0x7b, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x80, 0x80, 0x80, 0xff, 0x81, 0x81,
0x81, 0xff, 0x81, 0x81, 0x81, 0xff, 0x82, 0x82, 0x82, 0xff, 0x83, 0x83,
0x83, 0xff, 0x84, 0x84, 0x84, 0xff, 0x83, 0x83, 0x83, 0xff, 0x84, 0x84,
0x84, 0xff, 0x84, 0x84, 0x84, 0xff, 0x83, 0x83, 0x83, 0xff, 0x82, 0x82,
0x82, 0xff, 0x81, 0x81, 0x81, 0xff, 0x81, 0x81, 0x81, 0xff, 0x80, 0x80,
0x80, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80,
0x80, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0x60, 0x60, 0x60, 0xff, 0x06, 0x06,
0x06, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x3f, 0x3f,
0x3f, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x31, 0x31, 0x31, 0xff, 0x1e, 0x1e, 0x1e, 0xff, 0x1a, 0x1a,
0x1a, 0xff, 0x33, 0x33, 0x33, 0xff, 0x44, 0x44, 0x44, 0xff, 0x72, 0x72,
0x72, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7f, 0x7f,
0x7f, 0xff, 0x81, 0x81, 0x81, 0xff, 0x82, 0x82, 0x82, 0xff, 0x84, 0x84,
0x84, 0xff, 0x85, 0x85, 0x85, 0xff, 0x86, 0x86, 0x86, 0xff, 0x86, 0x86,
0x86, 0xff, 0x87, 0x87, 0x87, 0xff, 0x86, 0x86, 0x86, 0xff, 0x86, 0x86,
0x86, 0xff, 0x86, 0x86, 0x86, 0xff, 0x84, 0x84, 0x84, 0xff, 0x84, 0x84,
0x84, 0xff, 0x83, 0x83, 0x83, 0xff, 0x81, 0x81, 0x81, 0xff, 0x81, 0x81,
0x81, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7f, 0x7f,
0x7f, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x80, 0x80, 0x80, 0xff, 0x79, 0x79,
0x79, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0x34, 0x34, 0x34, 0xff, 0x0f, 0x0f,
0x0f, 0xff, 0x35, 0x35, 0x35, 0xff, 0x44, 0x44, 0x44, 0xff, 0x37, 0x37,
0x37, 0xff, 0x1e, 0x1e, 0x1e, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x2c,
0x2c, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x19, 0x19, 0x19, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0x35, 0x35,
0x35, 0xff, 0x68, 0x68, 0x68, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x82, 0x82, 0x82, 0xff, 0x85, 0x85,
0x85, 0xff, 0x86, 0x86, 0x86, 0xff, 0x87, 0x87, 0x87, 0xff, 0x88, 0x88,
0x88, 0xff, 0x89, 0x89, 0x89, 0xff, 0x8a, 0x8a, 0x8a, 0xff, 0x8b, 0x8b,
0x8b, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x89, 0x89, 0x89, 0xff, 0x87, 0x87, 0x87, 0xff, 0x86, 0x86,
0x86, 0xff, 0x84, 0x84, 0x84, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81,
0x81, 0xff, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x80, 0x80,
0x80, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x14, 0x14, 0x14, 0xff, 0x24, 0x24,
0x24, 0xff, 0x39, 0x39, 0x39, 0xff, 0x47, 0x47, 0x47, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2b, 0x2b, 0x2b, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x31, 0x31, 0x31, 0xff, 0x25, 0x25, 0x25, 0xff, 0x23, 0x23,
0x23, 0xff, 0x25, 0x25, 0x25, 0xff, 0x55, 0x55, 0x55, 0xff, 0x78, 0x78,
0x78, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x81, 0x81,
0x81, 0xff, 0x84, 0x84, 0x84, 0xff, 0x87, 0x87, 0x87, 0xff, 0x89, 0x89,
0x89, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x8d, 0x8d,
0x8d, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8d, 0x8d,
0x8d, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x89, 0x89, 0x89, 0xff, 0x87, 0x87,
0x87, 0xff, 0x85, 0x85, 0x85, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81,
0x81, 0xff, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x79, 0x79, 0x79, 0xff, 0x94, 0x94,
0x94, 0xff, 0x74, 0x74, 0x74, 0xff, 0x0c, 0x0c, 0x0c, 0xff, 0x36, 0x36,
0x36, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x25, 0x25,
0x25, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2a,
0x2a, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x36, 0x36,
0x36, 0xff, 0x1f, 0x1f, 0x1f, 0xff, 0x22, 0x22, 0x22, 0xff, 0x36, 0x36,
0x36, 0xff, 0x72, 0x72, 0x72, 0xff, 0x79, 0x79, 0x79, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x81, 0x81, 0x81, 0xff, 0x84, 0x84, 0x84, 0xff, 0x88, 0x88,
0x88, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x91, 0x91, 0x91, 0xff, 0x91, 0x91, 0x91, 0xff, 0x92, 0x92,
0x92, 0xff, 0x94, 0x94, 0x94, 0xff, 0x94, 0x94, 0x94, 0xff, 0x94, 0x94,
0x94, 0xff, 0x92, 0x92, 0x92, 0xff, 0x91, 0x91, 0x91, 0xff, 0x90, 0x90,
0x90, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x88, 0x88,
0x88, 0xff, 0x85, 0x85, 0x85, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81,
0x81, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x9c, 0x9c,
0x9c, 0xff, 0x1f, 0x1f, 0x1f, 0xff, 0x29, 0x29, 0x29, 0xff, 0x37, 0x37,
0x37, 0xff, 0x47, 0x47, 0x47, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x33, 0x33, 0x33, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x25, 0x25,
0x25, 0xff, 0x1f, 0x1f, 0x1f, 0xff, 0x59, 0x59, 0x59, 0xff, 0x77, 0x77,
0x77, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x84, 0x84,
0x84, 0xff, 0x88, 0x88, 0x88, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x8c, 0x8c,
0x8c, 0xff, 0x90, 0x90, 0x90, 0xff, 0x91, 0x91, 0x91, 0xff, 0x93, 0x93,
0x93, 0xff, 0x96, 0x96, 0x96, 0xff, 0x97, 0x97, 0x97, 0xff, 0x98, 0x98,
0x98, 0xff, 0x98, 0x98, 0x98, 0xff, 0x98, 0x98, 0x98, 0xff, 0x97, 0x97,
0x97, 0xff, 0x96, 0x96, 0x96, 0xff, 0x94, 0x94, 0x94, 0xff, 0x91, 0x91,
0x91, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x88, 0x88,
0x88, 0xff, 0x85, 0x85, 0x85, 0xff, 0x81, 0x81, 0x81, 0xff, 0x80, 0x80,
0x80, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x92, 0x92, 0x92, 0xff, 0x4f, 0x4f,
0x4f, 0xff, 0x12, 0x12, 0x12, 0xff, 0x39, 0x39, 0x39, 0xff, 0x3d, 0x3d,
0x3d, 0xff, 0x34, 0x34, 0x34, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2a,
0x2a, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x3b, 0x3b,
0x3b, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x27, 0x27, 0x27, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x6a, 0x6a, 0x6a, 0xff, 0x79, 0x79, 0x79, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x81, 0x81, 0x81, 0xff, 0x86, 0x86, 0x86, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x90, 0x90, 0x90, 0xff, 0x93, 0x93,
0x93, 0xff, 0x95, 0x95, 0x95, 0xff, 0x98, 0x98, 0x98, 0xff, 0x99, 0x99,
0x99, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9c, 0x9c,
0x9c, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x99, 0x99,
0x99, 0xff, 0x97, 0x97, 0x97, 0xff, 0x94, 0x94, 0x94, 0xff, 0x91, 0x91,
0x91, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x87, 0x87,
0x87, 0xff, 0x83, 0x83, 0x83, 0xff, 0x81, 0x81, 0x81, 0xff, 0x80, 0x80,
0x80, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x83, 0x83, 0x83, 0xff, 0x75, 0x75, 0x75, 0xff, 0x0a, 0x0a,
0x0a, 0xff, 0x33, 0x33, 0x33, 0xff, 0x38, 0x38, 0x38, 0xff, 0x3a, 0x3a,
0x3a, 0xff, 0x29, 0x29, 0x29, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2a, 0x2a, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x3d, 0x3d, 0x3d, 0xff, 0x34, 0x34,
0x34, 0xff, 0x22, 0x22, 0x22, 0xff, 0x40, 0x40, 0x40, 0xff, 0x71, 0x71,
0x71, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x84, 0x84,
0x84, 0xff, 0x89, 0x89, 0x89, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x90, 0x90,
0x90, 0xff, 0x92, 0x92, 0x92, 0xff, 0x96, 0x96, 0x96, 0xff, 0x98, 0x98,
0x98, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9f, 0x9f,
0x9f, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0xa0, 0xa0,
0xa0, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0x9b, 0x9b,
0x9b, 0xff, 0x97, 0x97, 0x97, 0xff, 0x94, 0x94, 0x94, 0xff, 0x90, 0x90,
0x90, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x88, 0x88, 0x88, 0xff, 0x85, 0x85,
0x85, 0xff, 0x82, 0x82, 0x82, 0xff, 0x80, 0x80, 0x80, 0xff, 0x80, 0x80,
0x80, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x79, 0x79, 0x79, 0xff, 0x79, 0x79,
0x79, 0xff, 0x90, 0x90, 0x90, 0xff, 0x14, 0x14, 0x14, 0xff, 0x23, 0x23,
0x23, 0xff, 0x38, 0x38, 0x38, 0xff, 0x39, 0x39, 0x39, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x2a, 0x2a, 0x2a, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x34, 0x34,
0x34, 0xff, 0x40, 0x40, 0x40, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x1c, 0x1c,
0x1c, 0xff, 0x4e, 0x4e, 0x4e, 0xff, 0x74, 0x74, 0x74, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x80, 0x80, 0x80, 0xff, 0x86, 0x86, 0x86, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x91, 0x91, 0x91, 0xff, 0x95, 0x95,
0x95, 0xff, 0x98, 0x98, 0x98, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x9e, 0x9e,
0x9e, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0xa4, 0xa4,
0xa4, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa4, 0xa4,
0xa4, 0xff, 0xa1, 0xa1, 0xa1, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0x9b, 0x9b,
0x9b, 0xff, 0x96, 0x96, 0x96, 0xff, 0x93, 0x93, 0x93, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x87, 0x87, 0x87, 0xff, 0x83, 0x83,
0x83, 0xff, 0x82, 0x82, 0x82, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x79, 0x79, 0x79, 0xff, 0x75, 0x75, 0x75, 0xff, 0x91, 0x91,
0x91, 0xff, 0x24, 0x24, 0x24, 0xff, 0x17, 0x17, 0x17, 0xff, 0x38, 0x38,
0x38, 0xff, 0x36, 0x36, 0x36, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2a,
0x2a, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x38, 0x38, 0x38, 0xff, 0x4b, 0x4b,
0x4b, 0xff, 0x44, 0x44, 0x44, 0xff, 0x1c, 0x1c, 0x1c, 0xff, 0x56, 0x56,
0x56, 0xff, 0x77, 0x77, 0x77, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x81, 0x81,
0x81, 0xff, 0x87, 0x87, 0x87, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x90, 0x90,
0x90, 0xff, 0x93, 0x93, 0x93, 0xff, 0x96, 0x96, 0x96, 0xff, 0x99, 0x99,
0x99, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0xa3, 0xa3,
0xa3, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xa7, 0xa7,
0xa7, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0xa4, 0xa4,
0xa4, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0x99, 0x99,
0x99, 0xff, 0x94, 0x94, 0x94, 0xff, 0x91, 0x91, 0x91, 0xff, 0x8c, 0x8c,
0x8c, 0xff, 0x87, 0x87, 0x87, 0xff, 0x84, 0x84, 0x84, 0xff, 0x82, 0x82,
0x82, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x73, 0x73, 0x73, 0xff, 0x88, 0x88, 0x88, 0xff, 0x34, 0x34,
0x34, 0xff, 0x0e, 0x0e, 0x0e, 0xff, 0x37, 0x37, 0x37, 0xff, 0x34, 0x34,
0x34, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x2f, 0x2f, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x5e, 0x5e, 0x5e, 0xff, 0x45, 0x45,
0x45, 0xff, 0x1d, 0x1d, 0x1d, 0xff, 0x5b, 0x5b, 0x5b, 0xff, 0x78, 0x78,
0x78, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x82, 0x82, 0x82, 0xff, 0x88, 0x88,
0x88, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x91, 0x91, 0x91, 0xff, 0x94, 0x94,
0x94, 0xff, 0x97, 0x97, 0x97, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x9e, 0x9e,
0x9e, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa8, 0xa8,
0xa8, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0xab, 0xab, 0xab, 0xff, 0xab, 0xab,
0xab, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0xa3, 0xa3,
0xa3, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0x9a, 0x9a, 0x9a, 0xff, 0x96, 0x96,
0x96, 0xff, 0x92, 0x92, 0x92, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x89, 0x89,
0x89, 0xff, 0x86, 0x86, 0x86, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81,
0x81, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x73, 0x73,
0x73, 0xff, 0x77, 0x77, 0x77, 0xff, 0x3d, 0x3d, 0x3d, 0xff, 0x0b, 0x0b,
0x0b, 0xff, 0x35, 0x35, 0x35, 0xff, 0x32, 0x32, 0x32, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x33, 0x33, 0x33, 0xff, 0x31, 0x31, 0x31, 0xff, 0x3c, 0x3c,
0x3c, 0xff, 0x79, 0x79, 0x79, 0xff, 0x4a, 0x4a, 0x4a, 0xff, 0x1d, 0x1d,
0x1d, 0xff, 0x5f, 0x5f, 0x5f, 0xff, 0x79, 0x79, 0x79, 0xff, 0x7e, 0x7e,
0x7e, 0xff, 0x82, 0x82, 0x82, 0xff, 0x89, 0x89, 0x89, 0xff, 0x8e, 0x8e,
0x8e, 0xff, 0x92, 0x92, 0x92, 0xff, 0x95, 0x95, 0x95, 0xff, 0x98, 0x98,
0x98, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0xa2, 0xa2,
0xa2, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xac, 0xac,
0xac, 0xff, 0xaf, 0xaf, 0xaf, 0xff, 0xaf, 0xaf, 0xaf, 0xff, 0xab, 0xab,
0xab, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa0, 0xa0,
0xa0, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x97, 0x97, 0x97, 0xff, 0x94, 0x94,
0x94, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x8a, 0x8a, 0x8a, 0xff, 0x87, 0x87,
0x87, 0xff, 0x83, 0x83, 0x83, 0xff, 0x82, 0x82, 0x82, 0xff, 0x7f, 0x7f,
0x7f, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x73, 0x73, 0x73, 0xff, 0x64, 0x64,
0x64, 0xff, 0x3e, 0x3e, 0x3e, 0xff, 0x0b, 0x0b, 0x0b, 0xff, 0x32, 0x32,
0x32, 0xff, 0x31, 0x31, 0x31, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36,
0x36, 0xff, 0x35, 0x35, 0x35, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x96, 0x96,
0x96, 0xff, 0x56, 0x56, 0x56, 0xff, 0x1c, 0x1c, 0x1c, 0xff, 0x60, 0x60,
0x60, 0xff, 0x78, 0x78, 0x78, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x82, 0x82,
0x82, 0xff, 0x8a, 0x8a, 0x8a, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x92, 0x92,
0x92, 0xff, 0x96, 0x96, 0x96, 0xff, 0x99, 0x99, 0x99, 0xff, 0x9c, 0x9c,
0x9c, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0xa6, 0xa6,
0xa6, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xac, 0xac, 0xac, 0xff, 0xae, 0xae,
0xae, 0xff, 0xaf, 0xaf, 0xaf, 0xff, 0xab, 0xab, 0xab, 0xff, 0xa8, 0xa8,
0xa8, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x9c, 0x9c,
0x9c, 0xff, 0x99, 0x99, 0x99, 0xff, 0x94, 0x94, 0x94, 0xff, 0x90, 0x90,
0x90, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x88, 0x88, 0x88, 0xff, 0x83, 0x83,
0x83, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x73, 0x73, 0x73, 0xff, 0x5b, 0x5b, 0x5b, 0xff, 0x37, 0x37,
0x37, 0xff, 0x0d, 0x0d, 0x0d, 0xff, 0x33, 0x33, 0x33, 0xff, 0x30, 0x30,
0x30, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x3d, 0x3d, 0xff, 0x3b, 0x3b,
0x3b, 0xff, 0x47, 0x47, 0x47, 0xff, 0xac, 0xac, 0xac, 0xff, 0x71, 0x71,
0x71, 0xff, 0x1a, 0x1a, 0x1a, 0xff, 0x66, 0x66, 0x66, 0xff, 0x77, 0x77,
0x77, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x82, 0x82, 0x82, 0xff, 0x89, 0x89,
0x89, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x92, 0x92, 0x92, 0xff, 0x95, 0x95,
0x95, 0xff, 0x99, 0x99, 0x99, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9f, 0x9f,
0x9f, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa8, 0xa8,
0xa8, 0xff, 0xab, 0xab, 0xab, 0xff, 0xac, 0xac, 0xac, 0xff, 0xac, 0xac,
0xac, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xa4, 0xa4,
0xa4, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x98, 0x98,
0x98, 0xff, 0x94, 0x94, 0x94, 0xff, 0x90, 0x90, 0x90, 0xff, 0x8b, 0x8b,
0x8b, 0xff, 0x88, 0x88, 0x88, 0xff, 0x83, 0x83, 0x83, 0xff, 0x82, 0x82,
0x82, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x71, 0x71,
0x71, 0xff, 0x50, 0x50, 0x50, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x0e, 0x0e,
0x0e, 0xff, 0x34, 0x34, 0x34, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x44, 0x44, 0x44, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x4d, 0x4d,
0x4d, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0x15, 0x15,
0x15, 0xff, 0x6c, 0x6c, 0x6c, 0xff, 0x76, 0x76, 0x76, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x80, 0x80, 0x80, 0xff, 0x88, 0x88, 0x88, 0xff, 0x8e, 0x8e,
0x8e, 0xff, 0x92, 0x92, 0x92, 0xff, 0x95, 0x95, 0x95, 0xff, 0x98, 0x98,
0x98, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x9e, 0x9e, 0x9e, 0xff, 0xa1, 0xa1,
0xa1, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0xa8, 0xa8,
0xa8, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xa8, 0xa8,
0xa8, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0x9f, 0x9f,
0x9f, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x97, 0x97, 0x97, 0xff, 0x93, 0x93,
0x93, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x88, 0x88,
0x88, 0xff, 0x84, 0x84, 0x84, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7e, 0x7e,
0x7e, 0xff, 0x79, 0x79, 0x79, 0xff, 0x6d, 0x6d, 0x6d, 0xff, 0x45, 0x45,
0x45, 0xff, 0x24, 0x24, 0x24, 0xff, 0x13, 0x13, 0x13, 0xff, 0x35, 0x35,
0x35, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x4b,
0x4b, 0xff, 0x45, 0x45, 0x45, 0xff, 0x58, 0x58, 0x58, 0xff, 0x88, 0x88,
0x88, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0x18, 0x18, 0x18, 0xff, 0x79, 0x79,
0x79, 0xff, 0x73, 0x73, 0x73, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7f, 0x7f,
0x7f, 0xff, 0x87, 0x87, 0x87, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x91, 0x91,
0x91, 0xff, 0x95, 0x95, 0x95, 0xff, 0x98, 0x98, 0x98, 0xff, 0x99, 0x99,
0x99, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0xa1, 0xa1,
0xa1, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa7, 0xa7,
0xa7, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xa3, 0xa3,
0xa3, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x9e, 0x9e, 0x9e, 0xff, 0x9a, 0x9a,
0x9a, 0xff, 0x97, 0x97, 0x97, 0xff, 0x93, 0x93, 0x93, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x86, 0x86, 0x86, 0xff, 0x84, 0x84,
0x84, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x79, 0x79,
0x79, 0xff, 0x64, 0x64, 0x64, 0xff, 0x39, 0x39, 0x39, 0xff, 0x1b, 0x1b,
0x1b, 0xff, 0x1b, 0x1b, 0x1b, 0xff, 0x34, 0x34, 0x34, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0xff, 0x53, 0x53,
0x53, 0xff, 0x6d, 0x6d, 0x6d, 0xff, 0x70, 0x70, 0x70, 0xff, 0xef, 0xef,
0xef, 0xff, 0x3a, 0x3a, 0x3a, 0xff, 0x6f, 0x6f, 0x6f, 0xff, 0x81, 0x81,
0x81, 0xff, 0x78, 0x78, 0x78, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x83, 0x83,
0x83, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x90, 0x90, 0x90, 0xff, 0x93, 0x93,
0x93, 0xff, 0x95, 0x95, 0x95, 0xff, 0x98, 0x98, 0x98, 0xff, 0x9b, 0x9b,
0x9b, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0xa1, 0xa1,
0xa1, 0xff, 0xa3, 0xa3, 0xa3, 0xff, 0xa3, 0xa3, 0xa3, 0xff, 0xa3, 0xa3,
0xa3, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x9f, 0x9f,
0x9f, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x98, 0x98, 0x98, 0xff, 0x95, 0x95,
0x95, 0xff, 0x91, 0x91, 0x91, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x89, 0x89,
0x89, 0xff, 0x86, 0x86, 0x86, 0xff, 0x82, 0x82, 0x82, 0xff, 0x7f, 0x7f,
0x7f, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x77, 0x77, 0x77, 0xff, 0x54, 0x54,
0x54, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x13, 0x13, 0x13, 0xff, 0x29, 0x29,
0x29, 0xff, 0x30, 0x30, 0x30, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5f, 0x5f, 0x5f, 0xff, 0x67, 0x67, 0x67, 0xff, 0x70, 0x70,
0x70, 0xff, 0x77, 0x77, 0x77, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0x81, 0x81,
0x81, 0xff, 0x40, 0x40, 0x40, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0x71, 0x71,
0x71, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x80, 0x80, 0x80, 0xff, 0x88, 0x88,
0x88, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x92, 0x92, 0x92, 0xff, 0x94, 0x94,
0x94, 0xff, 0x97, 0x97, 0x97, 0xff, 0x99, 0x99, 0x99, 0xff, 0x9c, 0x9c,
0x9c, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0x9e, 0x9e, 0x9e, 0xff, 0x9f, 0x9f,
0x9f, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0x9f, 0x9f,
0x9f, 0xff, 0x9e, 0x9e, 0x9e, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x99, 0x99,
0x99, 0xff, 0x96, 0x96, 0x96, 0xff, 0x93, 0x93, 0x93, 0xff, 0x90, 0x90,
0x90, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x89, 0x89, 0x89, 0xff, 0x85, 0x85,
0x85, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x75, 0x75, 0x75, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x26, 0x26,
0x26, 0xff, 0x11, 0x11, 0x11, 0xff, 0x34, 0x34, 0x34, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x79, 0x79, 0x79, 0xff, 0x66, 0x66, 0x66, 0xff, 0x8d, 0x8d,
0x8d, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0x27, 0x27,
0x27, 0xff, 0xac, 0xac, 0xac, 0xff, 0x81, 0x81, 0x81, 0xff, 0x78, 0x78,
0x78, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x83, 0x83, 0x83, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x92, 0x92, 0x92, 0xff, 0x96, 0x96,
0x96, 0xff, 0x97, 0x97, 0x97, 0xff, 0x99, 0x99, 0x99, 0xff, 0x9a, 0x9a,
0x9a, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9c, 0x9c,
0x9c, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x9a, 0x9a,
0x9a, 0xff, 0x99, 0x99, 0x99, 0xff, 0x97, 0x97, 0x97, 0xff, 0x94, 0x94,
0x94, 0xff, 0x92, 0x92, 0x92, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8b, 0x8b,
0x8b, 0xff, 0x87, 0x87, 0x87, 0xff, 0x83, 0x83, 0x83, 0xff, 0x80, 0x80,
0x80, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x63, 0x63,
0x63, 0xff, 0x26, 0x26, 0x26, 0xff, 0x1f, 0x1f, 0x1f, 0xff, 0x20, 0x20,
0x20, 0xff, 0x32, 0x32, 0x32, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x84,
0x84, 0xff, 0x74, 0x74, 0x74, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x8e, 0x8e,
0x8e, 0xff, 0xec, 0xec, 0xec, 0xff, 0x50, 0x50, 0x50, 0xff, 0x69, 0x69,
0x69, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0x75, 0x75, 0x75, 0xff, 0x7b, 0x7b,
0x7b, 0xff, 0x80, 0x80, 0x80, 0xff, 0x86, 0x86, 0x86, 0xff, 0x8b, 0x8b,
0x8b, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x92, 0x92, 0x92, 0xff, 0x95, 0x95,
0x95, 0xff, 0x97, 0x97, 0x97, 0xff, 0x98, 0x98, 0x98, 0xff, 0x99, 0x99,
0x99, 0xff, 0x9a, 0x9a, 0x9a, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x9b, 0x9b,
0x9b, 0xff, 0x99, 0x99, 0x99, 0xff, 0x98, 0x98, 0x98, 0xff, 0x96, 0x96,
0x96, 0xff, 0x94, 0x94, 0x94, 0xff, 0x92, 0x92, 0x92, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x89, 0x89, 0x89, 0xff, 0x85, 0x85,
0x85, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x75, 0x75, 0x75, 0xff, 0x39, 0x39, 0x39, 0xff, 0x21, 0x21,
0x21, 0xff, 0x1b, 0x1b, 0x1b, 0xff, 0x32, 0x32, 0x32, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x97, 0x97, 0xff, 0x91, 0x91,
0x91, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0x21, 0x21, 0x21, 0xff, 0xa7, 0xa7,
0xa7, 0xff, 0x95, 0x95, 0x95, 0xff, 0x77, 0x77, 0x77, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x81, 0x81, 0x81, 0xff, 0x87, 0x87, 0x87, 0xff, 0x8b, 0x8b,
0x8b, 0xff, 0x90, 0x90, 0x90, 0xff, 0x92, 0x92, 0x92, 0xff, 0x94, 0x94,
0x94, 0xff, 0x95, 0x95, 0x95, 0xff, 0x96, 0x96, 0x96, 0xff, 0x97, 0x97,
0x97, 0xff, 0x97, 0x97, 0x97, 0xff, 0x97, 0x97, 0x97, 0xff, 0x96, 0x96,
0x96, 0xff, 0x95, 0x95, 0x95, 0xff, 0x93, 0x93, 0x93, 0xff, 0x91, 0x91,
0x91, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x86, 0x86, 0x86, 0xff, 0x82, 0x82, 0x82, 0xff, 0x7e, 0x7e,
0x7e, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x78, 0x78, 0x78, 0xff, 0x55, 0x55,
0x55, 0xff, 0x1d, 0x1d, 0x1d, 0xff, 0x25, 0x25, 0x25, 0xff, 0x26, 0x26,
0x26, 0xff, 0x32, 0x32, 0x32, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0xa7, 0xa7, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0xac, 0xac, 0xac, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0xf1, 0xf1,
0xf1, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x3c, 0x3c, 0x3c, 0xff, 0xb7, 0xb7,
0xb7, 0xff, 0x83, 0x83, 0x83, 0xff, 0x79, 0x79, 0x79, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x81, 0x81, 0x81, 0xff, 0x87, 0x87, 0x87, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x90, 0x90, 0x90, 0xff, 0x92, 0x92,
0x92, 0xff, 0x93, 0x93, 0x93, 0xff, 0x93, 0x93, 0x93, 0xff, 0x94, 0x94,
0x94, 0xff, 0x94, 0x94, 0x94, 0xff, 0x93, 0x93, 0x93, 0xff, 0x91, 0x91,
0x91, 0xff, 0x90, 0x90, 0x90, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8c, 0x8c,
0x8c, 0xff, 0x89, 0x89, 0x89, 0xff, 0x86, 0x86, 0x86, 0xff, 0x82, 0x82,
0x82, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x78, 0x78,
0x78, 0xff, 0x64, 0x64, 0x64, 0xff, 0x25, 0x25, 0x25, 0xff, 0x25, 0x25,
0x25, 0xff, 0x29, 0x29, 0x29, 0xff, 0x31, 0x31, 0x31, 0xff, 0x2e, 0x2e,
0x2e, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xb4, 0xb4, 0xb4, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xa1, 0xa1,
0xa1, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0xfb, 0xfb,
0xfb, 0xff, 0x54, 0x54, 0x54, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0xba, 0xba,
0xba, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x79, 0x79, 0x79, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x80, 0x80, 0x80, 0xff, 0x86, 0x86, 0x86, 0xff, 0x88, 0x88,
0x88, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x90, 0x90, 0x90, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x8d, 0x8d,
0x8d, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x88, 0x88, 0x88, 0xff, 0x85, 0x85,
0x85, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7a, 0x7a,
0x7a, 0xff, 0x77, 0x77, 0x77, 0xff, 0x6a, 0x6a, 0x6a, 0xff, 0x32, 0x32,
0x32, 0xff, 0x1f, 0x1f, 0x1f, 0xff, 0x33, 0x33, 0x33, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x33, 0x33, 0x33, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xb7, 0xb7, 0xb7, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xb7, 0xb7,
0xb7, 0xff, 0x94, 0x94, 0x94, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0x43, 0x43, 0x43, 0xff, 0x83, 0x83, 0x83, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0x86, 0x86, 0x86, 0xff, 0x79, 0x79, 0x79, 0xff, 0x78, 0x78,
0x78, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x82, 0x82, 0x82, 0xff, 0x85, 0x85,
0x85, 0xff, 0x86, 0x86, 0x86, 0xff, 0x89, 0x89, 0x89, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x8a, 0x8a,
0x8a, 0xff, 0x88, 0x88, 0x88, 0xff, 0x87, 0x87, 0x87, 0xff, 0x84, 0x84,
0x84, 0xff, 0x83, 0x83, 0x83, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7b, 0x7b,
0x7b, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x77, 0x77, 0x77, 0xff, 0x67, 0x67,
0x67, 0xff, 0x37, 0x37, 0x37, 0xff, 0x1a, 0x1a, 0x1a, 0xff, 0x3a, 0x3a,
0x3a, 0xff, 0x38, 0x38, 0x38, 0xff, 0x38, 0x38, 0x38, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc7, 0xc7,
0xc7, 0xff, 0xb3, 0xb3, 0xb3, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0xb7, 0xb7,
0xb7, 0xff, 0x92, 0x92, 0x92, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0x45, 0x45, 0x45, 0xff, 0x6a, 0x6a, 0x6a, 0xff, 0xb8, 0xb8,
0xb8, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x77, 0x77,
0x77, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x80, 0x80,
0x80, 0xff, 0x81, 0x81, 0x81, 0xff, 0x82, 0x82, 0x82, 0xff, 0x83, 0x83,
0x83, 0xff, 0x83, 0x83, 0x83, 0xff, 0x82, 0x82, 0x82, 0xff, 0x81, 0x81,
0x81, 0xff, 0x80, 0x80, 0x80, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7c, 0x7c,
0x7c, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x79, 0x79, 0x79, 0xff, 0x73, 0x73,
0x73, 0xff, 0x5b, 0x5b, 0x5b, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x18, 0x18,
0x18, 0xff, 0x42, 0x42, 0x42, 0xff, 0x4a, 0x4a, 0x4a, 0xff, 0x3b, 0x3b,
0x3b, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xbf,
0xbf, 0xff, 0xad, 0xad, 0xad, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xb9, 0xb9,
0xb9, 0xff, 0x99, 0x99, 0x99, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xea, 0xea,
0xea, 0xff, 0x5f, 0x5f, 0x5f, 0xff, 0x3e, 0x3e, 0x3e, 0xff, 0xab, 0xab,
0xab, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x75, 0x75,
0x75, 0xff, 0x78, 0x78, 0x78, 0xff, 0x7d, 0x7d, 0x7d, 0xff, 0x7e, 0x7e,
0x7e, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x7f, 0x7f,
0x7f, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x79, 0x79, 0x79, 0xff, 0x73, 0x73,
0x73, 0xff, 0x67, 0x67, 0x67, 0xff, 0x45, 0x45, 0x45, 0xff, 0x1a, 0x1a,
0x1a, 0xff, 0x1d, 0x1d, 0x1d, 0xff, 0x5c, 0x5c, 0x5c, 0xff, 0x63, 0x63,
0x63, 0xff, 0x41, 0x41, 0x41, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0xbc,
0xbc, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0xa3, 0xa3, 0xa3, 0xff, 0xba, 0xba,
0xba, 0xff, 0x92, 0x92, 0x92, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xfd, 0xfd,
0xfd, 0xff, 0x90, 0x90, 0x90, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0x7d, 0x7d,
0x7d, 0xff, 0xb6, 0xb6, 0xb6, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x96, 0x96,
0x96, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x78, 0x78, 0x78, 0xff, 0x79, 0x79,
0x79, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x79, 0x79,
0x79, 0xff, 0x76, 0x76, 0x76, 0xff, 0x73, 0x73, 0x73, 0xff, 0x71, 0x71,
0x71, 0xff, 0x66, 0x66, 0x66, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x25, 0x25,
0x25, 0xff, 0x12, 0x12, 0x12, 0xff, 0x3a, 0x3a, 0x3a, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0x85, 0x85, 0x85, 0xff, 0x44, 0x44, 0x44, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xc1,
0xc1, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xb8, 0xb8,
0xb8, 0xff, 0x94, 0x94, 0x94, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0xf0, 0xf0,
0xf0, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0x60, 0x60, 0x60, 0xff, 0x47, 0x47,
0x47, 0xff, 0x66, 0x66, 0x66, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0xa2, 0xa2,
0xa2, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x9b, 0x9b,
0x9b, 0xff, 0x91, 0x91, 0x91, 0xff, 0x83, 0x83, 0x83, 0xff, 0x74, 0x74,
0x74, 0xff, 0x5a, 0x5a, 0x5a, 0xff, 0x39, 0x39, 0x39, 0xff, 0x1c, 0x1c,
0x1c, 0xff, 0x18, 0x18, 0x18, 0xff, 0x40, 0x40, 0x40, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x3d, 0x3d,
0x3d, 0xff, 0x2e, 0x2e, 0x2e, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0xbd,
0xbd, 0xff, 0xae, 0xae, 0xae, 0xff, 0xab, 0xab, 0xab, 0xff, 0xb8, 0xb8,
0xb8, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0x9e, 0x9e, 0x9e, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xa2, 0xa2,
0xa2, 0xff, 0x6c, 0x6c, 0x6c, 0xff, 0x45, 0x45, 0x45, 0xff, 0x35, 0x35,
0x35, 0xff, 0x31, 0x31, 0x31, 0xff, 0x31, 0x31, 0x31, 0xff, 0x2a, 0x2a,
0x2a, 0xff, 0x1f, 0x1f, 0x1f, 0xff, 0x16, 0x16, 0x16, 0xff, 0x1e, 0x1e,
0x1e, 0xff, 0x43, 0x43, 0x43, 0xff, 0x80, 0x80, 0x80, 0xff, 0xbf, 0xbf,
0xbf, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0x64, 0x64,
0x64, 0xff, 0x36, 0x36, 0x36, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0xbb,
0xbb, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0xab, 0xab, 0xab, 0xff, 0xaa, 0xaa,
0xaa, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xad, 0xad, 0xad, 0xff, 0x8f, 0x8f,
0x8f, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xf5, 0xf5,
0xf5, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xee, 0xee, 0xee, 0xff, 0xf7, 0xf7,
0xf7, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x42, 0x42, 0x42, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x2e, 0x2e,
0x2e, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x2b, 0x2b,
0x2b, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3,
0xc3, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0x9f, 0x9f,
0x9f, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xae, 0xae,
0xae, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0xa7, 0xa7,
0xa7, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0x84, 0x84, 0x84, 0xff, 0x61, 0x61,
0x61, 0xff, 0x45, 0x45, 0x45, 0xff, 0x30, 0x30, 0x30, 0xff, 0x2c, 0x2c,
0x2c, 0xff, 0x31, 0x31, 0x31, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x28, 0x28,
0x28, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xca, 0xca, 0xca, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xaa, 0xaa,
0xaa, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0xaf, 0xaf, 0xaf, 0xff, 0xbd, 0xbd,
0xbd, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0x98, 0x98,
0x98, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x89, 0x89, 0x89, 0xff, 0x82, 0x82,
0x82, 0xff, 0x73, 0x73, 0x73, 0xff, 0x66, 0x66, 0x66, 0xff, 0x59, 0x59,
0x59, 0xff, 0x47, 0x47, 0x47, 0xff, 0x37, 0x37, 0x37, 0xff, 0x2f, 0x2f,
0x2f, 0xff, 0x37, 0x37, 0x37, 0xff, 0x34, 0x34, 0x34, 0xff, 0x2d, 0x2d,
0x2d, 0xff, 0x29, 0x29, 0x29, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0xcb, 0xcb, 0xff, 0xc0, 0xc0,
0xc0, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xa5, 0xa5,
0xa5, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x97, 0x97,
0x97, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x81, 0x81, 0x81, 0xff, 0x68, 0x68,
0x68, 0xff, 0x56, 0x56, 0x56, 0xff, 0x47, 0x47, 0x47, 0xff, 0x43, 0x43,
0x43, 0xff, 0x42, 0x42, 0x42, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x31, 0x31,
0x31, 0xff, 0x2c, 0x2c, 0x2c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xd4, 0xd4, 0xd4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xb7, 0xb7,
0xb7, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x8e, 0x8e,
0x8e, 0xff, 0x80, 0x80, 0x80, 0xff, 0x6f, 0x6f, 0x6f, 0xff, 0x60, 0x60,
0x60, 0xff, 0x52, 0x52, 0x52, 0xff, 0x47, 0x47, 0x47, 0xff, 0x33, 0x33,
0x33, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int gamepad_button_bmp_len = 10122;

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@@ -0,0 +1,708 @@
unsigned char gamepad_button_background_bmp[] = {
0x42, 0x4d, 0x0a, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20,
0x00, 0x00, 0xd7, 0x0d, 0x00, 0x00, 0xd7, 0x0d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x42, 0x47,
0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x0a, 0x38, 0x38,
0x38, 0x53, 0x52, 0x52, 0x52, 0xc8, 0x69, 0x69, 0x69, 0xe7, 0x6d, 0x6d,
0x6d, 0xe9, 0x6d, 0x6d, 0x6d, 0xe9, 0x6d, 0x6d, 0x6d, 0xe9, 0x6c, 0x6c,
0x6c, 0xe9, 0x6c, 0x6c, 0x6c, 0xe9, 0x6c, 0x6c, 0x6c, 0xe9, 0x6c, 0x6c,
0x6c, 0xe9, 0x6c, 0x6c, 0x6c, 0xe9, 0x6b, 0x6b, 0x6b, 0xe9, 0x6b, 0x6b,
0x6b, 0xe9, 0x6a, 0x6a, 0x6a, 0xe9, 0x6a, 0x6a, 0x6a, 0xe9, 0x6a, 0x6a,
0x6a, 0xe9, 0x69, 0x69, 0x69, 0xe9, 0x69, 0x69, 0x69, 0xe9, 0x69, 0x69,
0x69, 0xe9, 0x68, 0x68, 0x68, 0xe9, 0x68, 0x68, 0x68, 0xe9, 0x68, 0x68,
0x68, 0xe9, 0x67, 0x67, 0x67, 0xe9, 0x67, 0x67, 0x67, 0xe9, 0x67, 0x67,
0x67, 0xe9, 0x66, 0x66, 0x66, 0xe9, 0x66, 0x66, 0x66, 0xe9, 0x66, 0x66,
0x66, 0xe9, 0x66, 0x66, 0x66, 0xe9, 0x65, 0x65, 0x65, 0xe9, 0x65, 0x65,
0x65, 0xe9, 0x65, 0x65, 0x65, 0xe9, 0x64, 0x64, 0x64, 0xe9, 0x64, 0x64,
0x64, 0xe9, 0x64, 0x64, 0x64, 0xe9, 0x64, 0x64, 0x64, 0xe9, 0x63, 0x63,
0x63, 0xe9, 0x63, 0x63, 0x63, 0xe9, 0x62, 0x62, 0x62, 0xe9, 0x62, 0x62,
0x62, 0xe9, 0x62, 0x62, 0x62, 0xe9, 0x62, 0x62, 0x62, 0xe9, 0x61, 0x61,
0x61, 0xe9, 0x61, 0x61, 0x61, 0xe9, 0x61, 0x61, 0x61, 0xe9, 0x60, 0x60,
0x60, 0xe9, 0x60, 0x60, 0x60, 0xe9, 0x60, 0x60, 0x60, 0xe9, 0x5f, 0x5f,
0x5f, 0xe9, 0x5f, 0x5f, 0x5f, 0xe9, 0x5f, 0x5f, 0x5f, 0xe9, 0x5f, 0x5f,
0x5f, 0xe9, 0x5e, 0x5e, 0x5e, 0xe9, 0x5e, 0x5e, 0x5e, 0xe9, 0x5e, 0x5e,
0x5e, 0xe9, 0x5d, 0x5d, 0x5d, 0xe9, 0x5d, 0x5d, 0x5d, 0xe9, 0x5d, 0x5d,
0x5d, 0xe9, 0x5c, 0x5c, 0x5c, 0xe9, 0x5c, 0x5c, 0x5c, 0xe9, 0x5a, 0x5a,
0x5a, 0xe8, 0x4c, 0x4c, 0x4c, 0xd8, 0x33, 0x33, 0x33, 0x7e, 0x1d, 0x1d,
0x1d, 0x15, 0x34, 0x34, 0x34, 0x39, 0x64, 0x64, 0x64, 0xee, 0xad, 0xad,
0xad, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc2, 0xc2,
0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xc0, 0xc0,
0xc0, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbe, 0xbe,
0xbe, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbd, 0xbd,
0xbd, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xba, 0xba, 0xba, 0xff, 0xb9, 0xb9,
0xb9, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0xb8, 0xb8,
0xb8, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0xb6, 0xb6,
0xb6, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0xb4, 0xb4,
0xb4, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0xb3, 0xb3, 0xb3, 0xff, 0xb2, 0xb2,
0xb2, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0xb1, 0xb1,
0xb1, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0xaf, 0xaf,
0xaf, 0xff, 0xaf, 0xaf, 0xaf, 0xff, 0xae, 0xae, 0xae, 0xff, 0xad, 0xad,
0xad, 0xff, 0xad, 0xad, 0xad, 0xff, 0xac, 0xac, 0xac, 0xff, 0xac, 0xac,
0xac, 0xff, 0xab, 0xab, 0xab, 0xff, 0xab, 0xab, 0xab, 0xff, 0xab, 0xab,
0xab, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xa9, 0xa9,
0xa9, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xa7, 0xa7,
0xa7, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0x9a, 0x9a,
0x9a, 0xff, 0x68, 0x68, 0x68, 0xfd, 0x31, 0x31, 0x31, 0x72, 0x3e, 0x3e,
0x3e, 0x82, 0x98, 0x98, 0x98, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca,
0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc1, 0xc1,
0xc1, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xbf, 0xbf,
0xbf, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbd, 0xbd,
0xbd, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbc, 0xbc,
0xbc, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xba, 0xba,
0xba, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0xb8, 0xb8,
0xb8, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0xb6, 0xb6,
0xb6, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0x95, 0x95,
0x95, 0xff, 0x44, 0x44, 0x44, 0xc3, 0x49, 0x49, 0x49, 0x92, 0xa7, 0xa7,
0xa7, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce,
0xce, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc2, 0xc2,
0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc0, 0xc0,
0xc0, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbe, 0xbe,
0xbe, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbc, 0xbc,
0xbc, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0xba, 0xba, 0xba, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xb9, 0xb9,
0xb9, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0xb7, 0xb7,
0xb7, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x4f, 0x4f,
0x4f, 0xcf, 0x4a, 0x4a, 0x4a, 0x92, 0xa9, 0xa9, 0xa9, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca,
0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc1, 0xc1,
0xc1, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbf, 0xbf,
0xbf, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbd, 0xbd,
0xbd, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xba, 0xba, 0xba, 0xff, 0xb9, 0xb9,
0xb9, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0xb7, 0xb7,
0xb7, 0xff, 0xa1, 0xa1, 0xa1, 0xff, 0x51, 0x51, 0x51, 0xd0, 0x4a, 0x4a,
0x4a, 0x92, 0xaa, 0xaa, 0xaa, 0xff, 0xda, 0xda, 0xda, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce,
0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca,
0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc1, 0xc1,
0xc1, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xbf, 0xbf,
0xbf, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbd, 0xbd,
0xbd, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbc, 0xbc,
0xbc, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xba, 0xba,
0xba, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0xa2, 0xa2,
0xa2, 0xff, 0x51, 0x51, 0x51, 0xd0, 0x4a, 0x4a, 0x4a, 0x92, 0xab, 0xab,
0xab, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2,
0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc0, 0xc0,
0xc0, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbe, 0xbe,
0xbe, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbc, 0xbc,
0xbc, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0xba, 0xba, 0xba, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0x53, 0x53,
0x53, 0xd0, 0x4b, 0x4b, 0x4b, 0x92, 0xac, 0xac, 0xac, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca,
0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc1, 0xc1,
0xc1, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbf, 0xbf,
0xbf, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbd, 0xbd,
0xbd, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0x53, 0x53, 0x53, 0xd0, 0x4c, 0x4c,
0x4c, 0x92, 0xad, 0xad, 0xad, 0xff, 0xde, 0xde, 0xde, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce,
0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca,
0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc1, 0xc1,
0xc1, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xbf, 0xbf,
0xbf, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xbd, 0xbd,
0xbd, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xa5, 0xa5,
0xa5, 0xff, 0x53, 0x53, 0x53, 0xd0, 0x4c, 0x4c, 0x4c, 0x92, 0xae, 0xae,
0xae, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2,
0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc0, 0xc0,
0xc0, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbe, 0xbe,
0xbe, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0x54, 0x54,
0x54, 0xd0, 0x4c, 0x4c, 0x4c, 0x92, 0xaf, 0xaf, 0xaf, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca,
0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc1, 0xc1,
0xc1, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xbe, 0xbe,
0xbe, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0x54, 0x54, 0x54, 0xd0, 0x4d, 0x4d,
0x4d, 0x92, 0xb0, 0xb0, 0xb0, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce,
0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca,
0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xc1, 0xc1,
0xc1, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0xa8, 0xa8,
0xa8, 0xff, 0x55, 0x55, 0x55, 0xd0, 0x4e, 0x4e, 0x4e, 0x92, 0xb1, 0xb1,
0xb1, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2,
0xc2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0x55, 0x55,
0x55, 0xd0, 0x4e, 0x4e, 0x4e, 0x92, 0xb2, 0xb2, 0xb2, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca,
0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xc2, 0xc2,
0xc2, 0xff, 0xab, 0xab, 0xab, 0xff, 0x56, 0x56, 0x56, 0xd0, 0x4e, 0x4e,
0x4e, 0x92, 0xb3, 0xb3, 0xb3, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce,
0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca,
0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xc3, 0xc3, 0xc3, 0xff, 0xac, 0xac,
0xac, 0xff, 0x56, 0x56, 0x56, 0xd0, 0x4f, 0x4f, 0x4f, 0x92, 0xb4, 0xb4,
0xb4, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xad, 0xad, 0xad, 0xff, 0x57, 0x57,
0x57, 0xd0, 0x4f, 0x4f, 0x4f, 0x92, 0xb5, 0xb5, 0xb5, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca,
0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc6, 0xc6,
0xc6, 0xff, 0xae, 0xae, 0xae, 0xff, 0x58, 0x58, 0x58, 0xd0, 0x4f, 0x4f,
0x4f, 0x92, 0xb6, 0xb6, 0xb6, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xeb, 0xeb,
0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea,
0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce,
0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca,
0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xaf, 0xaf,
0xaf, 0xff, 0x58, 0x58, 0x58, 0xd0, 0x50, 0x50, 0x50, 0x92, 0xb7, 0xb7,
0xb7, 0xff, 0xea, 0xea, 0xea, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec,
0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea,
0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0x58, 0x58,
0x58, 0xd0, 0x51, 0x51, 0x51, 0x92, 0xb8, 0xb8, 0xb8, 0xff, 0xeb, 0xeb,
0xeb, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed,
0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xeb, 0xeb,
0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0x59, 0x59, 0x59, 0xd0, 0x52, 0x52,
0x52, 0x92, 0xb9, 0xb9, 0xb9, 0xff, 0xec, 0xec, 0xec, 0xff, 0xef, 0xef,
0xef, 0xff, 0xee, 0xee, 0xee, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed,
0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb,
0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea,
0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce,
0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcc, 0xcc,
0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xb3, 0xb3,
0xb3, 0xff, 0x5a, 0x5a, 0x5a, 0xd0, 0x52, 0x52, 0x52, 0x92, 0xba, 0xba,
0xba, 0xff, 0xed, 0xed, 0xed, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xef, 0xef,
0xef, 0xff, 0xef, 0xef, 0xef, 0xff, 0xee, 0xee, 0xee, 0xff, 0xee, 0xee,
0xee, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec,
0xec, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea,
0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0x5a, 0x5a,
0x5a, 0xd0, 0x52, 0x52, 0x52, 0x92, 0xbb, 0xbb, 0xbb, 0xff, 0xef, 0xef,
0xef, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf0, 0xf0,
0xf0, 0xff, 0xef, 0xef, 0xef, 0xff, 0xef, 0xef, 0xef, 0xff, 0xee, 0xee,
0xee, 0xff, 0xee, 0xee, 0xee, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed,
0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb,
0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0x5b, 0x5b, 0x5b, 0xd0, 0x52, 0x52,
0x52, 0x92, 0xbc, 0xbc, 0xbc, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xf3, 0xf3,
0xf3, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf1, 0xf1,
0xf1, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xef, 0xef, 0xef, 0xff, 0xef, 0xef,
0xef, 0xff, 0xee, 0xee, 0xee, 0xff, 0xee, 0xee, 0xee, 0xff, 0xed, 0xed,
0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xec, 0xec,
0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea,
0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd0, 0xd0,
0xd0, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xb6, 0xb6,
0xb6, 0xff, 0x5c, 0x5c, 0x5c, 0xd0, 0x53, 0x53, 0x53, 0x92, 0xbd, 0xbd,
0xbd, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf4, 0xf4,
0xf4, 0xff, 0xf3, 0xf3, 0xf3, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xf1, 0xf1,
0xf1, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xef, 0xef,
0xef, 0xff, 0xef, 0xef, 0xef, 0xff, 0xee, 0xee, 0xee, 0xff, 0xee, 0xee,
0xee, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec,
0xec, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea,
0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x5c, 0x5c,
0x5c, 0xd0, 0x53, 0x53, 0x53, 0x92, 0xbe, 0xbe, 0xbe, 0xff, 0xf2, 0xf2,
0xf2, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf4, 0xf4,
0xf4, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf3, 0xf3, 0xf3, 0xff, 0xf2, 0xf2,
0xf2, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf0, 0xf0,
0xf0, 0xff, 0xef, 0xef, 0xef, 0xff, 0xef, 0xef, 0xef, 0xff, 0xee, 0xee,
0xee, 0xff, 0xee, 0xee, 0xee, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed,
0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb,
0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xb8, 0xb8, 0xb8, 0xff, 0x5d, 0x5d, 0x5d, 0xd0, 0x54, 0x54,
0x54, 0x92, 0xbf, 0xbf, 0xbf, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf6, 0xf6,
0xf6, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf5, 0xf5,
0xf5, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf3, 0xf3,
0xf3, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf1, 0xf1,
0xf1, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xef, 0xef, 0xef, 0xff, 0xef, 0xef,
0xef, 0xff, 0xee, 0xee, 0xee, 0xff, 0xee, 0xee, 0xee, 0xff, 0xed, 0xed,
0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xec, 0xec,
0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea,
0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda,
0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xb9, 0xb9,
0xb9, 0xff, 0x5e, 0x5e, 0x5e, 0xd0, 0x54, 0x54, 0x54, 0x92, 0xbf, 0xbf,
0xbf, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xf7, 0xf7,
0xf7, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xf5, 0xf5,
0xf5, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf4, 0xf4,
0xf4, 0xff, 0xf3, 0xf3, 0xf3, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xf2, 0xf2,
0xf2, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xef, 0xef,
0xef, 0xff, 0xef, 0xef, 0xef, 0xff, 0xee, 0xee, 0xee, 0xff, 0xee, 0xee,
0xee, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec,
0xec, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea,
0xea, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe7, 0xe7,
0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda,
0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xba, 0xba, 0xba, 0xff, 0x5e, 0x5e,
0x5e, 0xd0, 0x53, 0x53, 0x53, 0x92, 0xbf, 0xbf, 0xbf, 0xff, 0xf6, 0xf6,
0xf6, 0xff, 0xf9, 0xf9, 0xf9, 0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xf8, 0xf8,
0xf8, 0xff, 0xf7, 0xf7, 0xf7, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xf6, 0xf6,
0xf6, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf4, 0xf4,
0xf4, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf3, 0xf3, 0xf3, 0xff, 0xf2, 0xf2,
0xf2, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf0, 0xf0,
0xf0, 0xff, 0xef, 0xef, 0xef, 0xff, 0xef, 0xef, 0xef, 0xff, 0xee, 0xee,
0xee, 0xff, 0xee, 0xee, 0xee, 0xff, 0xed, 0xed, 0xed, 0xff, 0xed, 0xed,
0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xec, 0xec, 0xec, 0xff, 0xeb, 0xeb,
0xeb, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xba, 0xba, 0xba, 0xff, 0x5d, 0x5d, 0x5d, 0xcf, 0x49, 0x49,
0x49, 0x82, 0xb0, 0xb0, 0xb0, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xfa, 0xfa,
0xfa, 0xff, 0xf9, 0xf9, 0xf9, 0xff, 0xf9, 0xf9, 0xf9, 0xff, 0xf8, 0xf8,
0xf8, 0xff, 0xf7, 0xf7, 0xf7, 0xff, 0xf7, 0xf7, 0xf7, 0xff, 0xf6, 0xf6,
0xf6, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xf5, 0xf5,
0xf5, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xf3, 0xf3, 0xf3, 0xff, 0xf3, 0xf3,
0xf3, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xf1, 0xf1, 0xf1, 0xff, 0xf1, 0xf1,
0xf1, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xef, 0xef, 0xef, 0xff, 0xef, 0xef,
0xef, 0xff, 0xee, 0xee, 0xee, 0xff, 0xee, 0xee, 0xee, 0xff, 0xed, 0xed,
0xed, 0xff, 0xed, 0xed, 0xed, 0xff, 0xec, 0xec, 0xec, 0xff, 0xec, 0xec,
0xec, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xea, 0xea, 0xea, 0xff, 0xea, 0xea,
0xea, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe8, 0xe8,
0xe8, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe7, 0xe7, 0xe7, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xe2, 0xe2,
0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd,
0xdd, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xb0, 0xb0,
0xb0, 0xff, 0x51, 0x51, 0x51, 0xc3, 0x3e, 0x3e, 0x3e, 0x3a, 0x75, 0x75,
0x75, 0xee, 0xc9, 0xc9, 0xc9, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe5, 0xe5,
0xe5, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xe1, 0xe1,
0xe1, 0xff, 0xe1, 0xe1, 0xe1, 0xff, 0xe0, 0xe0, 0xe0, 0xff, 0xe0, 0xe0,
0xe0, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd9, 0xd9,
0xd9, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0xd6, 0xd6,
0xd6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd3, 0xd3, 0xd3, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xcf, 0xcf,
0xcf, 0xff, 0xce, 0xce, 0xce, 0xff, 0xce, 0xce, 0xce, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xcb, 0xcb,
0xcb, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xca, 0xca, 0xca, 0xff, 0xca, 0xca,
0xca, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xc8, 0xc8,
0xc8, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xc5, 0xc5,
0xc5, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0x7c, 0x7c, 0x7c, 0xfd, 0x3b, 0x3b,
0x3b, 0x72, 0x1b, 0x1b, 0x1b, 0x0a, 0x44, 0x44, 0x44, 0x55, 0x61, 0x61,
0x61, 0xc9, 0x7b, 0x7b, 0x7b, 0xe7, 0x81, 0x81, 0x81, 0xe9, 0x81, 0x81,
0x81, 0xe9, 0x80, 0x80, 0x80, 0xe9, 0x80, 0x80, 0x80, 0xe9, 0x80, 0x80,
0x80, 0xe9, 0x7f, 0x7f, 0x7f, 0xe9, 0x7f, 0x7f, 0x7f, 0xe9, 0x7f, 0x7f,
0x7f, 0xe9, 0x7e, 0x7e, 0x7e, 0xe9, 0x7e, 0x7e, 0x7e, 0xe9, 0x7e, 0x7e,
0x7e, 0xe9, 0x7d, 0x7d, 0x7d, 0xe9, 0x7d, 0x7d, 0x7d, 0xe9, 0x7d, 0x7d,
0x7d, 0xe9, 0x7c, 0x7c, 0x7c, 0xe9, 0x7c, 0x7c, 0x7c, 0xe9, 0x7c, 0x7c,
0x7c, 0xe9, 0x7b, 0x7b, 0x7b, 0xe9, 0x7b, 0x7b, 0x7b, 0xe9, 0x7a, 0x7a,
0x7a, 0xe9, 0x7a, 0x7a, 0x7a, 0xe9, 0x7a, 0x7a, 0x7a, 0xe9, 0x7a, 0x7a,
0x7a, 0xe9, 0x79, 0x79, 0x79, 0xe9, 0x79, 0x79, 0x79, 0xe9, 0x79, 0x79,
0x79, 0xe9, 0x79, 0x79, 0x79, 0xe9, 0x78, 0x78, 0x78, 0xe9, 0x78, 0x78,
0x78, 0xe9, 0x77, 0x77, 0x77, 0xe9, 0x77, 0x77, 0x77, 0xe9, 0x77, 0x77,
0x77, 0xe9, 0x77, 0x77, 0x77, 0xe9, 0x76, 0x76, 0x76, 0xe9, 0x76, 0x76,
0x76, 0xe9, 0x76, 0x76, 0x76, 0xe9, 0x76, 0x76, 0x76, 0xe9, 0x75, 0x75,
0x75, 0xe9, 0x75, 0x75, 0x75, 0xe9, 0x74, 0x74, 0x74, 0xe9, 0x74, 0x74,
0x74, 0xe9, 0x74, 0x74, 0x74, 0xe9, 0x73, 0x73, 0x73, 0xe9, 0x73, 0x73,
0x73, 0xe9, 0x73, 0x73, 0x73, 0xe9, 0x72, 0x72, 0x72, 0xe9, 0x72, 0x72,
0x72, 0xe9, 0x72, 0x72, 0x72, 0xe9, 0x71, 0x71, 0x71, 0xe9, 0x71, 0x71,
0x71, 0xe9, 0x71, 0x71, 0x71, 0xe9, 0x71, 0x71, 0x71, 0xe9, 0x70, 0x70,
0x70, 0xe9, 0x70, 0x70, 0x70, 0xe9, 0x70, 0x70, 0x70, 0xe9, 0x6f, 0x6f,
0x6f, 0xe9, 0x6f, 0x6f, 0x6f, 0xe9, 0x6d, 0x6d, 0x6d, 0xe8, 0x5c, 0x5c,
0x5c, 0xd9, 0x3e, 0x3e, 0x3e, 0x7e, 0x26, 0x26, 0x26, 0x15
};
unsigned int gamepad_button_background_bmp_len = 8458;

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

View File

@@ -0,0 +1,63 @@
unsigned char gamepad_button_small_bmp[] = {
0x42, 0x4d, 0xca, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02,
0x00, 0x00, 0xd7, 0x0d, 0x00, 0x00, 0xd7, 0x0d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x42, 0x47,
0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x5d, 0x5d, 0x34, 0x5e, 0x5e,
0x5e, 0x7d, 0x5d, 0x5d, 0x5d, 0x7d, 0x5b, 0x5b, 0x5b, 0x7d, 0x57, 0x57,
0x57, 0x7d, 0x56, 0x56, 0x56, 0x7d, 0x55, 0x55, 0x55, 0x7d, 0x53, 0x53,
0x53, 0x7d, 0x52, 0x52, 0x52, 0x7d, 0x51, 0x51, 0x51, 0x7d, 0x4f, 0x4f,
0x4f, 0x7d, 0x4e, 0x4e, 0x4e, 0x34, 0x97, 0x97, 0x97, 0xc3, 0xc6, 0xc6,
0xc6, 0xf3, 0xc3, 0xc3, 0xc3, 0xf3, 0xc0, 0xc0, 0xc0, 0xf3, 0xbc, 0xbc,
0xbc, 0xf3, 0xba, 0xba, 0xba, 0xf3, 0xb7, 0xb7, 0xb7, 0xf3, 0xb3, 0xb3,
0xb3, 0xf3, 0xaf, 0xaf, 0xaf, 0xf3, 0xad, 0xad, 0xad, 0xf3, 0xaa, 0xaa,
0xaa, 0xf3, 0x7f, 0x7f, 0x7f, 0xc2, 0xa9, 0xa9, 0xa9, 0xdd, 0xd8, 0xd8,
0xd8, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xce, 0xce,
0xce, 0xff, 0xcb, 0xcb, 0xcb, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xc4, 0xc4,
0xc4, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0xbb, 0xbb,
0xbb, 0xff, 0x8e, 0x8e, 0x8e, 0xdd, 0xad, 0xad, 0xad, 0xde, 0xde, 0xde,
0xde, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0xd3, 0xd3,
0xd3, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcc, 0xcc, 0xcc, 0xff, 0xc9, 0xc9,
0xc9, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0xbf, 0xbf,
0xbf, 0xff, 0x92, 0x92, 0x92, 0xde, 0xb0, 0xb0, 0xb0, 0xde, 0xe1, 0xe1,
0xe1, 0xff, 0xde, 0xde, 0xde, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd7, 0xd7,
0xd7, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd0, 0xd0, 0xd0, 0xff, 0xcd, 0xcd,
0xcd, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xc3, 0xc3,
0xc3, 0xff, 0x94, 0x94, 0x94, 0xde, 0xb2, 0xb2, 0xb2, 0xde, 0xe5, 0xe5,
0xe5, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xde, 0xde, 0xde, 0xff, 0xdb, 0xdb,
0xdb, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0xd1, 0xd1,
0xd1, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xca, 0xca, 0xca, 0xff, 0xc7, 0xc7,
0xc7, 0xff, 0x97, 0x97, 0x97, 0xde, 0xb5, 0xb5, 0xb5, 0xde, 0xe9, 0xe9,
0xe9, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xdf, 0xdf,
0xdf, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd5, 0xd5,
0xd5, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xce, 0xce, 0xce, 0xff, 0xca, 0xca,
0xca, 0xff, 0x9a, 0x9a, 0x9a, 0xde, 0xb8, 0xb8, 0xb8, 0xde, 0xed, 0xed,
0xed, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe6, 0xe6, 0xe6, 0xff, 0xe3, 0xe3,
0xe3, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xd8, 0xd8,
0xd8, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd1, 0xd1, 0xd1, 0xff, 0xce, 0xce,
0xce, 0xff, 0x9d, 0x9d, 0x9d, 0xde, 0xbb, 0xbb, 0xbb, 0xde, 0xf1, 0xf1,
0xf1, 0xff, 0xed, 0xed, 0xed, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xe6, 0xe6,
0xe6, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xdf, 0xdf, 0xdf, 0xff, 0xdc, 0xdc,
0xdc, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xd2, 0xd2,
0xd2, 0xff, 0xa0, 0xa0, 0xa0, 0xde, 0xbc, 0xbc, 0xbc, 0xdd, 0xf3, 0xf3,
0xf3, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xec, 0xec, 0xec, 0xff, 0xe9, 0xe9,
0xe9, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0xde, 0xde,
0xde, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xd4, 0xd4,
0xd4, 0xff, 0xa1, 0xa1, 0xa1, 0xdd, 0xae, 0xae, 0xae, 0xc3, 0xe4, 0xe4,
0xe4, 0xf3, 0xe2, 0xe2, 0xe2, 0xf3, 0xde, 0xde, 0xde, 0xf3, 0xdb, 0xdb,
0xdb, 0xf3, 0xd8, 0xd8, 0xd8, 0xf3, 0xd6, 0xd6, 0xd6, 0xf3, 0xd2, 0xd2,
0xd2, 0xf3, 0xce, 0xce, 0xce, 0xf3, 0xcc, 0xcc, 0xcc, 0xf3, 0xc9, 0xc9,
0xc9, 0xf3, 0x95, 0x95, 0x95, 0xc2, 0x6b, 0x6b, 0x6b, 0x34, 0x6e, 0x6e,
0x6e, 0x7d, 0x6d, 0x6d, 0x6d, 0x7d, 0x6a, 0x6a, 0x6a, 0x7d, 0x68, 0x68,
0x68, 0x7d, 0x67, 0x67, 0x67, 0x7d, 0x66, 0x66, 0x66, 0x7d, 0x64, 0x64,
0x64, 0x7d, 0x62, 0x62, 0x62, 0x7d, 0x61, 0x61, 0x61, 0x7d, 0x60, 0x60,
0x60, 0x7d, 0x5c, 0x5c, 0x5c, 0x34
};
unsigned int gamepad_button_small_bmp_len = 714;

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

2756
3rdparty/sdl/SDL/test/gamepad_face_abxy.h vendored Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

2756
3rdparty/sdl/SDL/test/gamepad_face_bayx.h vendored Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

2756
3rdparty/sdl/SDL/test/gamepad_face_sony.h vendored Normal file

File diff suppressed because it is too large Load Diff

BIN
3rdparty/sdl/SDL/test/gamepad_front.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

2828
3rdparty/sdl/SDL/test/gamepad_front.h vendored Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

314
3rdparty/sdl/SDL/test/gamepad_touchpad.h vendored Normal file
View File

@@ -0,0 +1,314 @@
unsigned char gamepad_touchpad_bmp[] = {
0x42, 0x4d, 0x8c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x04,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x9f, 0x00,
0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x0a,
0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x47,
0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x01, 0x00, 0x02, 0x02, 0x02, 0x00, 0x03, 0x03, 0x03, 0x00, 0x04, 0x04,
0x04, 0x00, 0x05, 0x05, 0x05, 0x00, 0x06, 0x06, 0x06, 0x00, 0x07, 0x07,
0x07, 0x00, 0x08, 0x08, 0x08, 0x00, 0x09, 0x09, 0x09, 0x00, 0x0a, 0x0a,
0x0a, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0c, 0x0c, 0x0c, 0x00, 0x0d, 0x0d,
0x0d, 0x00, 0x0e, 0x0e, 0x0e, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x10, 0x10,
0x10, 0x00, 0x11, 0x11, 0x11, 0x00, 0x12, 0x12, 0x12, 0x00, 0x13, 0x13,
0x13, 0x00, 0x14, 0x14, 0x14, 0x00, 0x15, 0x15, 0x15, 0x00, 0x16, 0x16,
0x16, 0x00, 0x17, 0x17, 0x17, 0x00, 0x18, 0x18, 0x18, 0x00, 0x19, 0x19,
0x19, 0x00, 0x1a, 0x1a, 0x1a, 0x00, 0x1b, 0x1b, 0x1b, 0x00, 0x1c, 0x1c,
0x1c, 0x00, 0x1d, 0x1d, 0x1d, 0x00, 0x1e, 0x1e, 0x1e, 0x00, 0x1f, 0x1f,
0x1f, 0x00, 0x20, 0x20, 0x20, 0x00, 0x21, 0x21, 0x21, 0x00, 0x22, 0x22,
0x22, 0x00, 0x23, 0x23, 0x23, 0x00, 0x24, 0x24, 0x24, 0x00, 0x25, 0x25,
0x25, 0x00, 0x26, 0x26, 0x26, 0x00, 0x27, 0x27, 0x27, 0x00, 0x28, 0x28,
0x28, 0x00, 0x29, 0x29, 0x29, 0x00, 0x2a, 0x2a, 0x2a, 0x00, 0x2b, 0x2b,
0x2b, 0x00, 0x2c, 0x2c, 0x2c, 0x00, 0x2d, 0x2d, 0x2d, 0x00, 0x2e, 0x2e,
0x2e, 0x00, 0x2f, 0x2f, 0x2f, 0x00, 0x30, 0x30, 0x30, 0x00, 0x31, 0x31,
0x31, 0x00, 0x32, 0x32, 0x32, 0x00, 0x33, 0x33, 0x33, 0x00, 0x34, 0x34,
0x34, 0x00, 0x35, 0x35, 0x35, 0x00, 0x36, 0x36, 0x36, 0x00, 0x37, 0x37,
0x37, 0x00, 0x38, 0x38, 0x38, 0x00, 0x39, 0x39, 0x39, 0x00, 0x3a, 0x3a,
0x3a, 0x00, 0x3b, 0x3b, 0x3b, 0x00, 0x3c, 0x3c, 0x3c, 0x00, 0x3d, 0x3d,
0x3d, 0x00, 0x3e, 0x3e, 0x3e, 0x00, 0x3f, 0x3f, 0x3f, 0x00, 0x40, 0x40,
0x40, 0x00, 0x41, 0x41, 0x41, 0x00, 0x42, 0x42, 0x42, 0x00, 0x43, 0x43,
0x43, 0x00, 0x44, 0x44, 0x44, 0x00, 0x45, 0x45, 0x45, 0x00, 0x46, 0x46,
0x46, 0x00, 0x47, 0x47, 0x47, 0x00, 0x48, 0x48, 0x48, 0x00, 0x49, 0x49,
0x49, 0x00, 0x4a, 0x4a, 0x4a, 0x00, 0x4b, 0x4b, 0x4b, 0x00, 0x4c, 0x4c,
0x4c, 0x00, 0x4d, 0x4d, 0x4d, 0x00, 0x4e, 0x4e, 0x4e, 0x00, 0x4f, 0x4f,
0x4f, 0x00, 0x50, 0x50, 0x50, 0x00, 0x51, 0x51, 0x51, 0x00, 0x52, 0x52,
0x52, 0x00, 0x53, 0x53, 0x53, 0x00, 0x54, 0x54, 0x54, 0x00, 0x55, 0x55,
0x55, 0x00, 0x56, 0x56, 0x56, 0x00, 0x57, 0x57, 0x57, 0x00, 0x58, 0x58,
0x58, 0x00, 0x59, 0x59, 0x59, 0x00, 0x5a, 0x5a, 0x5a, 0x00, 0x5b, 0x5b,
0x5b, 0x00, 0x5c, 0x5c, 0x5c, 0x00, 0x5d, 0x5d, 0x5d, 0x00, 0x5e, 0x5e,
0x5e, 0x00, 0x5f, 0x5f, 0x5f, 0x00, 0x60, 0x60, 0x60, 0x00, 0x61, 0x61,
0x61, 0x00, 0x62, 0x62, 0x62, 0x00, 0x63, 0x63, 0x63, 0x00, 0x64, 0x64,
0x64, 0x00, 0x65, 0x65, 0x65, 0x00, 0x66, 0x66, 0x66, 0x00, 0x67, 0x67,
0x67, 0x00, 0x68, 0x68, 0x68, 0x00, 0x69, 0x69, 0x69, 0x00, 0x6a, 0x6a,
0x6a, 0x00, 0x6b, 0x6b, 0x6b, 0x00, 0x6c, 0x6c, 0x6c, 0x00, 0x6d, 0x6d,
0x6d, 0x00, 0x6e, 0x6e, 0x6e, 0x00, 0x6f, 0x6f, 0x6f, 0x00, 0x70, 0x70,
0x70, 0x00, 0x71, 0x71, 0x71, 0x00, 0x72, 0x72, 0x72, 0x00, 0x73, 0x73,
0x73, 0x00, 0x74, 0x74, 0x74, 0x00, 0x75, 0x75, 0x75, 0x00, 0x76, 0x76,
0x76, 0x00, 0x77, 0x77, 0x77, 0x00, 0x78, 0x78, 0x78, 0x00, 0x79, 0x79,
0x79, 0x00, 0x7a, 0x7a, 0x7a, 0x00, 0x7b, 0x7b, 0x7b, 0x00, 0x7c, 0x7c,
0x7c, 0x00, 0x7d, 0x7d, 0x7d, 0x00, 0x7e, 0x7e, 0x7e, 0x00, 0x7f, 0x7f,
0x7f, 0x00, 0x80, 0x80, 0x80, 0x00, 0x81, 0x81, 0x81, 0x00, 0x82, 0x82,
0x82, 0x00, 0x83, 0x83, 0x83, 0x00, 0x84, 0x84, 0x84, 0x00, 0x85, 0x85,
0x85, 0x00, 0x86, 0x86, 0x86, 0x00, 0x87, 0x87, 0x87, 0x00, 0x88, 0x88,
0x88, 0x00, 0x89, 0x89, 0x89, 0x00, 0x8a, 0x8a, 0x8a, 0x00, 0x8b, 0x8b,
0x8b, 0x00, 0x8c, 0x8c, 0x8c, 0x00, 0x8d, 0x8d, 0x8d, 0x00, 0x8e, 0x8e,
0x8e, 0x00, 0x8f, 0x8f, 0x8f, 0x00, 0x90, 0x90, 0x90, 0x00, 0x91, 0x91,
0x91, 0x00, 0x92, 0x92, 0x92, 0x00, 0x93, 0x93, 0x93, 0x00, 0x94, 0x94,
0x94, 0x00, 0x95, 0x95, 0x95, 0x00, 0x96, 0x96, 0x96, 0x00, 0x97, 0x97,
0x97, 0x00, 0x98, 0x98, 0x98, 0x00, 0x99, 0x99, 0x99, 0x00, 0x9a, 0x9a,
0x9a, 0x00, 0x9b, 0x9b, 0x9b, 0x00, 0x9c, 0x9c, 0x9c, 0x00, 0x9d, 0x9d,
0x9d, 0x00, 0x9e, 0x9e, 0x9e, 0x00, 0x9f, 0x9f, 0x9f, 0x00, 0xa0, 0xa0,
0xa0, 0x00, 0xa1, 0xa1, 0xa1, 0x00, 0xa2, 0xa2, 0xa2, 0x00, 0xa3, 0xa3,
0xa3, 0x00, 0xa4, 0xa4, 0xa4, 0x00, 0xa5, 0xa5, 0xa5, 0x00, 0xa6, 0xa6,
0xa6, 0x00, 0xa7, 0xa7, 0xa7, 0x00, 0xa8, 0xa8, 0xa8, 0x00, 0xa9, 0xa9,
0xa9, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0xab, 0xab, 0xab, 0x00, 0xac, 0xac,
0xac, 0x00, 0xad, 0xad, 0xad, 0x00, 0xae, 0xae, 0xae, 0x00, 0xaf, 0xaf,
0xaf, 0x00, 0xb0, 0xb0, 0xb0, 0x00, 0xb1, 0xb1, 0xb1, 0x00, 0xb2, 0xb2,
0xb2, 0x00, 0xb3, 0xb3, 0xb3, 0x00, 0xb4, 0xb4, 0xb4, 0x00, 0xb5, 0xb5,
0xb5, 0x00, 0xb6, 0xb6, 0xb6, 0x00, 0xb7, 0xb7, 0xb7, 0x00, 0xb8, 0xb8,
0xb8, 0x00, 0xb9, 0xb9, 0xb9, 0x00, 0xba, 0xba, 0xba, 0x00, 0xbb, 0xbb,
0xbb, 0x00, 0xbc, 0xbc, 0xbc, 0x00, 0xbd, 0xbd, 0xbd, 0x00, 0xbe, 0xbe,
0xbe, 0x00, 0xbf, 0xbf, 0xbf, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0xc1, 0xc1,
0xc1, 0x00, 0xc2, 0xc2, 0xc2, 0x00, 0xc3, 0xc3, 0xc3, 0x00, 0xc4, 0xc4,
0xc4, 0x00, 0xc5, 0xc5, 0xc5, 0x00, 0xc6, 0xc6, 0xc6, 0x00, 0xc7, 0xc7,
0xc7, 0x00, 0xc8, 0xc8, 0xc8, 0x00, 0xc9, 0xc9, 0xc9, 0x00, 0xca, 0xca,
0xca, 0x00, 0xcb, 0xcb, 0xcb, 0x00, 0xcc, 0xcc, 0xcc, 0x00, 0xcd, 0xcd,
0xcd, 0x00, 0xce, 0xce, 0xce, 0x00, 0xcf, 0xcf, 0xcf, 0x00, 0xd0, 0xd0,
0xd0, 0x00, 0xd1, 0xd1, 0xd1, 0x00, 0xd2, 0xd2, 0xd2, 0x00, 0xd3, 0xd3,
0xd3, 0x00, 0xd4, 0xd4, 0xd4, 0x00, 0xd5, 0xd5, 0xd5, 0x00, 0xd6, 0xd6,
0xd6, 0x00, 0xd7, 0xd7, 0xd7, 0x00, 0xd8, 0xd8, 0xd8, 0x00, 0xd9, 0xd9,
0xd9, 0x00, 0xda, 0xda, 0xda, 0x00, 0xdb, 0xdb, 0xdb, 0x00, 0xdc, 0xdc,
0xdc, 0x00, 0xdd, 0xdd, 0xdd, 0x00, 0xde, 0xde, 0xde, 0x00, 0xdf, 0xdf,
0xdf, 0x00, 0xe0, 0xe0, 0xe0, 0x00, 0xe1, 0xe1, 0xe1, 0x00, 0xe2, 0xe2,
0xe2, 0x00, 0xe3, 0xe3, 0xe3, 0x00, 0xe4, 0xe4, 0xe4, 0x00, 0xe5, 0xe5,
0xe5, 0x00, 0xe6, 0xe6, 0xe6, 0x00, 0xe7, 0xe7, 0xe7, 0x00, 0xe8, 0xe8,
0xe8, 0x00, 0xe9, 0xe9, 0xe9, 0x00, 0xea, 0xea, 0xea, 0x00, 0xeb, 0xeb,
0xeb, 0x00, 0xec, 0xec, 0xec, 0x00, 0xed, 0xed, 0xed, 0x00, 0xee, 0xee,
0xee, 0x00, 0xef, 0xef, 0xef, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0xf1, 0xf1,
0xf1, 0x00, 0xf2, 0xf2, 0xf2, 0x00, 0xf3, 0xf3, 0xf3, 0x00, 0xf4, 0xf4,
0xf4, 0x00, 0xf5, 0xf5, 0xf5, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0xf7, 0xf7,
0xf7, 0x00, 0xf8, 0xf8, 0xf8, 0x00, 0xf9, 0xf9, 0xf9, 0x00, 0xfa, 0xfa,
0xfa, 0x00, 0xfb, 0xfb, 0xfb, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0xfd, 0xfd,
0xfd, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff,
0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff,
0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff,
0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0x96, 0xff, 0x01, 0xfb, 0xd0, 0xff,
0x01, 0xfb, 0x98, 0xff, 0x00, 0x00, 0x97, 0xff, 0x01, 0x53, 0x01, 0x17,
0xce, 0x00, 0x01, 0x17, 0x01, 0x53, 0x97, 0xff, 0x00, 0x00, 0x94, 0xff,
0x00, 0x06, 0xfe, 0xc1, 0x17, 0x74, 0xbc, 0xc8, 0xcc, 0xc7, 0x00, 0x06,
0xc8, 0xbc, 0x74, 0x17, 0xc1, 0xfe, 0x94, 0xff, 0x00, 0x00, 0x95, 0xff,
0x00, 0x03, 0x3a, 0x86, 0xc6, 0x00, 0xd0, 0xc7, 0x00, 0x03, 0xc6, 0x86,
0x3a, 0x00, 0x95, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x05, 0xfd, 0xff,
0x9d, 0x5e, 0xc2, 0x00, 0xd2, 0xc7, 0x00, 0x03, 0xc2, 0x5e, 0x9d, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfb, 0xff, 0x5f, 0xa1,
0xd4, 0xc7, 0x01, 0xa1, 0x01, 0x5f, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x25, 0xba, 0xd4, 0xc7, 0x01, 0xba, 0x01, 0x25,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3, 0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x00, 0xc3,
0xd4, 0xc7, 0x01, 0xc3, 0x01, 0x00, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x04, 0xfa, 0xff, 0x00, 0xc0, 0xd4, 0xc7, 0x01, 0xc0, 0x01, 0x00,
0x94, 0xff, 0x00, 0x00, 0x92, 0xff, 0x00, 0x04, 0xfa, 0xff, 0x4d, 0xb0,
0xd4, 0xc7, 0x01, 0xb0, 0x01, 0x4d, 0x94, 0xff, 0x00, 0x00, 0x92, 0xff,
0x00, 0x05, 0xfc, 0xff, 0x7a, 0x86, 0xc6, 0x00, 0xd2, 0xc7, 0x00, 0x03,
0xc6, 0x86, 0x7a, 0x00, 0x94, 0xff, 0x00, 0x00, 0x94, 0xff, 0x00, 0x03,
0xc3, 0x36, 0xb2, 0x00, 0xd2, 0xc7, 0x00, 0x03, 0xb2, 0x36, 0xc3, 0x00,
0x94, 0xff, 0x00, 0x00, 0x94, 0xff, 0x00, 0x04, 0xf7, 0x77, 0x43, 0xb1,
0xd0, 0xc7, 0x00, 0x04, 0xb1, 0x43, 0x77, 0xf7, 0x94, 0xff, 0x00, 0x00,
0x95, 0xff, 0x00, 0x06, 0xf1, 0x76, 0x25, 0x00, 0xaf, 0xc5, 0xca, 0xc8,
0x00, 0x06, 0xc5, 0xaf, 0x00, 0x25, 0x76, 0xf1, 0x95, 0xff, 0x00, 0x00,
0x96, 0xff, 0x00, 0x04, 0xfa, 0xcc, 0x76, 0x07, 0xcc, 0x00, 0x00, 0x04,
0x07, 0x76, 0xcc, 0xfa, 0x96, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff,
0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff,
0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff,
0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff,
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x01, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff,
0x01, 0xff, 0x00, 0x01
};
unsigned int gamepad_touchpad_bmp_len = 3724;

BIN
3rdparty/sdl/SDL/test/gamepad_wired.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

106
3rdparty/sdl/SDL/test/gamepad_wired.h vendored Normal file
View File

@@ -0,0 +1,106 @@
unsigned char gamepad_wired_bmp[] = {
0x42, 0x4d, 0xca, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x04,
0x00, 0x00, 0xd7, 0x0d, 0x00, 0x00, 0xd7, 0x0d, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x42, 0x47,
0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00,
0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
0x00, 0x5e, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00,
0x00, 0xa9, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00,
0x00, 0xc5, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x13, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00,
0x00, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00,
0x00, 0xf3, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x71, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00,
0x00, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00,
0x00, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xe1, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x25, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00,
0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00,
0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x56, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00,
0x00, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00,
0x00, 0xed, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1a, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0xed, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x8d, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00,
0x00, 0xdf, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00,
0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00,
0x00, 0xf2, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00,
0x00, 0xed, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
0x00, 0x5a, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x5b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00,
0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00,
0x00, 0x55, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00
};
unsigned int gamepad_wired_bmp_len = 1226;

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

100
3rdparty/sdl/SDL/test/gamepad_wireless.h vendored Normal file
View File

@@ -0,0 +1,100 @@
unsigned char gamepad_wireless_bmp[] = {
0x42, 0x4d, 0x8a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00,
0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04,
0x00, 0x00, 0x23, 0x2e, 0x00, 0x00, 0x23, 0x2e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x42, 0x47,
0x52, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0a, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00,
0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00,
0x00, 0xea, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00,
0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0e, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xf5, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xf5, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00,
0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00,
0x00, 0x84, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00,
0x00, 0x9a, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x69, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7b, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00,
0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00,
0x00, 0xac, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00,
0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00,
0x00, 0x99, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00,
0x00, 0x09, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00,
0x00, 0xf0, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00,
0x00, 0xe9, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xef, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
0x00, 0xf0, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00,
0x00, 0xf5, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00,
0x00, 0xf5, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x28, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xf3, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00,
0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00,
0x00, 0xac, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xcc, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x4a, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00,
0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00,
0x00, 0x34, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
unsigned int gamepad_wireless_bmp_len = 1162;

2972
3rdparty/sdl/SDL/test/gamepadutils.c vendored Normal file

File diff suppressed because it is too large Load Diff

169
3rdparty/sdl/SDL/test/gamepadutils.h vendored Normal file
View File

@@ -0,0 +1,169 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
/* Gamepad image */
typedef struct GamepadImage GamepadImage;
typedef enum
{
CONTROLLER_MODE_TESTING,
CONTROLLER_MODE_BINDING,
} ControllerDisplayMode;
enum
{
SDL_GAMEPAD_ELEMENT_INVALID = -1,
/* ... SDL_GamepadButton ... */
SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_NEGATIVE = SDL_GAMEPAD_BUTTON_COUNT,
SDL_GAMEPAD_ELEMENT_AXIS_LEFTX_POSITIVE,
SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_NEGATIVE,
SDL_GAMEPAD_ELEMENT_AXIS_LEFTY_POSITIVE,
SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_NEGATIVE,
SDL_GAMEPAD_ELEMENT_AXIS_RIGHTX_POSITIVE,
SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_NEGATIVE,
SDL_GAMEPAD_ELEMENT_AXIS_RIGHTY_POSITIVE,
SDL_GAMEPAD_ELEMENT_AXIS_LEFT_TRIGGER,
SDL_GAMEPAD_ELEMENT_AXIS_RIGHT_TRIGGER,
SDL_GAMEPAD_ELEMENT_AXIS_MAX,
SDL_GAMEPAD_ELEMENT_NAME = SDL_GAMEPAD_ELEMENT_AXIS_MAX,
SDL_GAMEPAD_ELEMENT_TYPE,
SDL_GAMEPAD_ELEMENT_MAX,
};
#define HIGHLIGHT_COLOR 224, 255, 255, SDL_ALPHA_OPAQUE
#define HIGHLIGHT_TEXTURE_MOD 224, 255, 255
#define PRESSED_COLOR 175, 238, 238, SDL_ALPHA_OPAQUE
#define PRESSED_TEXTURE_MOD 175, 238, 238
#define SELECTED_COLOR 224, 255, 224, SDL_ALPHA_OPAQUE
/* Gamepad image display */
extern GamepadImage *CreateGamepadImage(SDL_Renderer *renderer);
extern void SetGamepadImagePosition(GamepadImage *ctx, float x, float y);
extern void GetGamepadImageArea(GamepadImage *ctx, SDL_FRect *area);
extern void GetGamepadTouchpadArea(GamepadImage *ctx, SDL_FRect *area);
extern void SetGamepadImageShowingFront(GamepadImage *ctx, bool showing_front);
extern SDL_GamepadType GetGamepadImageType(GamepadImage *ctx);
extern void SetGamepadImageDisplayMode(GamepadImage *ctx, ControllerDisplayMode display_mode);
extern float GetGamepadImageButtonWidth(GamepadImage *ctx);
extern float GetGamepadImageButtonHeight(GamepadImage *ctx);
extern float GetGamepadImageAxisWidth(GamepadImage *ctx);
extern float GetGamepadImageAxisHeight(GamepadImage *ctx);
extern int GetGamepadImageElementAt(GamepadImage *ctx, float x, float y);
extern void ClearGamepadImage(GamepadImage *ctx);
extern void SetGamepadImageElement(GamepadImage *ctx, int element, bool active);
extern void UpdateGamepadImageFromGamepad(GamepadImage *ctx, SDL_Gamepad *gamepad);
extern void RenderGamepadImage(GamepadImage *ctx);
extern void DestroyGamepadImage(GamepadImage *ctx);
/* Gamepad element display */
typedef struct GamepadDisplay GamepadDisplay;
extern GamepadDisplay *CreateGamepadDisplay(SDL_Renderer *renderer);
extern void SetGamepadDisplayDisplayMode(GamepadDisplay *ctx, ControllerDisplayMode display_mode);
extern void SetGamepadDisplayArea(GamepadDisplay *ctx, const SDL_FRect *area);
extern int GetGamepadDisplayElementAt(GamepadDisplay *ctx, SDL_Gamepad *gamepad, float x, float y);
extern void SetGamepadDisplayHighlight(GamepadDisplay *ctx, int element, bool pressed);
extern void SetGamepadDisplaySelected(GamepadDisplay *ctx, int element);
extern void RenderGamepadDisplay(GamepadDisplay *ctx, SDL_Gamepad *gamepad);
extern void DestroyGamepadDisplay(GamepadDisplay *ctx);
/* Gamepad type display */
enum
{
SDL_GAMEPAD_TYPE_UNSELECTED = -1
};
typedef struct GamepadTypeDisplay GamepadTypeDisplay;
extern GamepadTypeDisplay *CreateGamepadTypeDisplay(SDL_Renderer *renderer);
extern void SetGamepadTypeDisplayArea(GamepadTypeDisplay *ctx, const SDL_FRect *area);
extern int GetGamepadTypeDisplayAt(GamepadTypeDisplay *ctx, float x, float y);
extern void SetGamepadTypeDisplayHighlight(GamepadTypeDisplay *ctx, int type, bool pressed);
extern void SetGamepadTypeDisplaySelected(GamepadTypeDisplay *ctx, int type);
extern void SetGamepadTypeDisplayRealType(GamepadTypeDisplay *ctx, SDL_GamepadType type);
extern void RenderGamepadTypeDisplay(GamepadTypeDisplay *ctx);
extern void DestroyGamepadTypeDisplay(GamepadTypeDisplay *ctx);
/* Joystick element display */
typedef struct JoystickDisplay JoystickDisplay;
extern JoystickDisplay *CreateJoystickDisplay(SDL_Renderer *renderer);
extern void SetJoystickDisplayArea(JoystickDisplay *ctx, const SDL_FRect *area);
extern char *GetJoystickDisplayElementAt(JoystickDisplay *ctx, SDL_Joystick *joystick, float x, float y);
extern void SetJoystickDisplayHighlight(JoystickDisplay *ctx, const char *element, bool pressed);
extern void RenderJoystickDisplay(JoystickDisplay *ctx, SDL_Joystick *joystick);
extern void DestroyJoystickDisplay(JoystickDisplay *ctx);
/* Simple buttons */
typedef struct GamepadButton GamepadButton;
extern GamepadButton *CreateGamepadButton(SDL_Renderer *renderer, const char *label);
extern void SetGamepadButtonArea(GamepadButton *ctx, const SDL_FRect *area);
extern void GetGamepadButtonArea(GamepadButton *ctx, SDL_FRect *area);
extern void SetGamepadButtonHighlight(GamepadButton *ctx, bool highlight, bool pressed);
extern float GetGamepadButtonLabelWidth(GamepadButton *ctx);
extern float GetGamepadButtonLabelHeight(GamepadButton *ctx);
extern bool GamepadButtonContains(GamepadButton *ctx, float x, float y);
extern void RenderGamepadButton(GamepadButton *ctx);
extern void DestroyGamepadButton(GamepadButton *ctx);
/* Working with mappings and bindings */
/* Return whether a mapping has any bindings */
extern bool MappingHasBindings(const char *mapping);
/* Return true if the mapping has a controller name */
extern bool MappingHasName(const char *mapping);
/* Return the name from a mapping, which should be freed using SDL_free(), or NULL if there is no name specified */
extern char *GetMappingName(const char *mapping);
/* Set the name in a mapping, freeing the mapping passed in and returning a new mapping */
extern char *SetMappingName(char *mapping, const char *name);
/* Get the friendly string for an SDL_GamepadType */
extern const char *GetGamepadTypeString(SDL_GamepadType type);
/* Return the type from a mapping, which should be freed using SDL_free(), or NULL if there is no type specified */
extern SDL_GamepadType GetMappingType(const char *mapping);
/* Set the type in a mapping, freeing the mapping passed in and returning a new mapping */
extern char *SetMappingType(char *mapping, SDL_GamepadType type);
/* Return true if a mapping has this element bound */
extern bool MappingHasElement(const char *mapping, int element);
/* Get the binding for an element, which should be freed using SDL_free(), or NULL if the element isn't bound */
extern char *GetElementBinding(const char *mapping, int element);
/* Set the binding for an element, or NULL to clear it, freeing the mapping passed in and returning a new mapping */
extern char *SetElementBinding(char *mapping, int element, const char *binding);
/* Get the element for a binding, or SDL_GAMEPAD_ELEMENT_INVALID if that binding isn't used */
extern int GetElementForBinding(char *mapping, const char *binding);
/* Return true if a mapping contains this binding */
extern bool MappingHasBinding(const char *mapping, const char *binding);
/* Clear any previous binding */
extern char *ClearMappingBinding(char *mapping, const char *binding);

BIN
3rdparty/sdl/SDL/test/glass.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

128148
3rdparty/sdl/SDL/test/glass.h vendored Normal file

File diff suppressed because it is too large Load Diff

BIN
3rdparty/sdl/SDL/test/icon.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

52
3rdparty/sdl/SDL/test/icon.h vendored Normal file
View File

@@ -0,0 +1,52 @@
unsigned char icon_bmp[] = {
0x42, 0x4d, 0x42, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,
0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
0x00, 0x00, 0x6d, 0x0b, 0x00, 0x00, 0x6d, 0x0b, 0x00, 0x00, 0x03, 0x00,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x22, 0x22, 0x22,
0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22,
0x21, 0x11, 0x11, 0x12, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x21, 0x11, 0x11, 0x11, 0x11, 0x12, 0x21, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x21, 0x11,
0x22, 0x22, 0x22, 0x22, 0x11, 0x12, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22,
0x22, 0x21, 0x12, 0x22, 0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00,
0x01, 0x22, 0x22, 0x22, 0x22, 0x21, 0x12, 0x22, 0x22, 0x22, 0x22, 0x10,
0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00,
0x01, 0x22, 0x22, 0x11, 0x11, 0x22, 0x22, 0x11, 0x11, 0x22, 0x22, 0x10,
0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x11, 0x01, 0x22, 0x22, 0x11,
0x01, 0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x22, 0x11,
0x11, 0x22, 0x22, 0x11, 0x11, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x12, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x10, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x22, 0x22, 0x22, 0x22,
0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00
};
unsigned int icon_bmp_len = 578;

BIN
3rdparty/sdl/SDL/test/icon2x.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
3rdparty/sdl/SDL/test/logaudiodev.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

137
3rdparty/sdl/SDL/test/loopwave.c vendored Normal file
View File

@@ -0,0 +1,137 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
/* Program to load a wave file and loop playing it using SDL audio */
/* loopwaves.c is much more robust in handling WAVE files --
This is only for simple WAVEs
*/
#include <stdlib.h>
#define SDL_MAIN_USE_CALLBACKS 1
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
#include "testutils.h"
static struct
{
SDL_AudioSpec spec;
Uint8 *sound; /* Pointer to wave data */
Uint32 soundlen; /* Length of wave data */
} wave;
static SDL_AudioStream *stream;
static SDLTest_CommonState *state;
static int fillerup(void)
{
const int minimum = (wave.soundlen / SDL_AUDIO_FRAMESIZE(wave.spec)) / 2;
if (SDL_GetAudioStreamQueued(stream) < minimum) {
SDL_PutAudioStreamData(stream, wave.sound, wave.soundlen);
}
return SDL_APP_CONTINUE;
}
SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
{
int i;
char *filename = NULL;
/* this doesn't have to run very much, so give up tons of CPU time between iterations. */
SDL_SetHint(SDL_HINT_MAIN_CALLBACK_RATE, "5");
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, 0);
if (!state) {
return SDL_APP_SUCCESS;
}
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed;
consumed = SDLTest_CommonArg(state, i);
if (!consumed) {
if (!filename) {
filename = argv[i];
consumed = 1;
}
}
if (consumed <= 0) {
static const char *options[] = { "[sample.wav]", NULL };
SDLTest_CommonLogUsage(state, argv[0], options);
exit(1);
}
i += consumed;
}
/* Load the SDL library */
if (!SDL_Init(SDL_INIT_AUDIO | SDL_INIT_EVENTS)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return SDL_APP_FAILURE;
}
filename = GetResourceFilename(filename, "sample.wav");
if (!filename) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", SDL_GetError());
return SDL_APP_FAILURE;
}
/* Load the wave file into memory */
if (!SDL_LoadWAV(filename, &wave.spec, &wave.sound, &wave.soundlen)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", filename, SDL_GetError());
SDL_free(filename);
return SDL_APP_FAILURE;
}
SDL_free(filename);
/* Show the list of available drivers */
SDL_Log("Available audio drivers:");
for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) {
SDL_Log("%i: %s", i, SDL_GetAudioDriver(i));
}
SDL_Log("Using audio driver: %s", SDL_GetCurrentAudioDriver());
stream = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &wave.spec, NULL, NULL);
if (!stream) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create audio stream: %s", SDL_GetError());
return SDL_APP_FAILURE;
}
SDL_ResumeAudioStreamDevice(stream);
return SDL_APP_CONTINUE;
}
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
{
return (event->type == SDL_EVENT_QUIT) ? SDL_APP_SUCCESS : SDL_APP_CONTINUE;
}
SDL_AppResult SDL_AppIterate(void *appstate)
{
return fillerup();
}
void SDL_AppQuit(void *appstate, SDL_AppResult result)
{
SDL_DestroyAudioStream(stream);
SDL_free(wave.sound);
SDL_Quit();
SDLTest_CommonDestroyState(state);
}

11
3rdparty/sdl/SDL/test/main.cpp vendored Normal file
View File

@@ -0,0 +1,11 @@
/*
* This file is supposed to be used to build tests on platforms that require
* the main function to be implemented in C++, which means that SDL_main's
* implementation needs C++ and thus can't be included in test*.c
*
* Placed in the public domain by Daniel Gibson, 2022-12-12
*/
#include <SDL3/SDL_main.h>
// that's all, folks!

BIN
3rdparty/sdl/SDL/test/moose.dat vendored Normal file

Binary file not shown.

BIN
3rdparty/sdl/SDL/test/n3ds/logo48x48.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
3rdparty/sdl/SDL/test/physaudiodev.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

14
3rdparty/sdl/SDL/test/picture.xbm vendored Normal file
View File

@@ -0,0 +1,14 @@
#define picture_width 32
#define picture_height 32
static char picture_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x18,
0x64, 0x6f, 0xf6, 0x26, 0x0a, 0x00, 0x00, 0x50, 0xf2, 0xff, 0xff, 0x4f,
0x14, 0x04, 0x00, 0x28, 0x14, 0x0e, 0x00, 0x28, 0x10, 0x32, 0x00, 0x08,
0x94, 0x03, 0x00, 0x08, 0xf4, 0x04, 0x00, 0x08, 0xb0, 0x08, 0x00, 0x08,
0x34, 0x01, 0x00, 0x28, 0x34, 0x01, 0x00, 0x28, 0x12, 0x00, 0x40, 0x48,
0x12, 0x20, 0xa6, 0x48, 0x14, 0x50, 0x11, 0x29, 0x14, 0x50, 0x48, 0x2a,
0x10, 0x27, 0xac, 0x0e, 0xd4, 0x71, 0xe8, 0x0a, 0x74, 0x20, 0xa8, 0x0a,
0x14, 0x20, 0x00, 0x08, 0x10, 0x50, 0x00, 0x08, 0x14, 0x00, 0x00, 0x28,
0x14, 0x00, 0x00, 0x28, 0xf2, 0xff, 0xff, 0x4f, 0x0a, 0x00, 0x00, 0x50,
0x64, 0x6f, 0xf6, 0x26, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

36
3rdparty/sdl/SDL/test/pretest.c vendored Normal file
View File

@@ -0,0 +1,36 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
/* Call SDL_GetPrefPath to warm the SHGetFolderPathW cache */
/**
* We noticed frequent ci timeouts running testfilesystem on 32-bit Windows.
* Internally, this functions calls Shell32.SHGetFolderPathW.
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
int main(int argc, char *argv[])
{
Uint64 start;
Uint64 prequit;
(void)argc;
(void)argv;
SDL_Init(0);
start = SDL_GetTicks();
SDL_free(SDL_GetPrefPath("libsdl", "test_filesystem"));
prequit = SDL_GetTicks();
SDL_Log("SDL_GetPrefPath took %" SDL_PRIu64 "ms", prequit - start);
SDL_Quit();
SDL_Log("SDL_Quit took %" SDL_PRIu64 "ms", SDL_GetTicks() - prequit);
return 0;
}

View File

@@ -0,0 +1,58 @@
Relative mode testing
=====================
See test program at the bottom of this file.
Initial tests:
- When in relative mode, the mouse shouldn't be moveable outside of the window.
- When the cursor is outside the window when relative mode is enabled, mouse
clicks should not go to whatever app was under the cursor previously.
- When alt/cmd-tabbing between a relative mode app and another app, clicks when
in the relative mode app should also not go to whatever app was under the
cursor previously.
Code
====
#include <SDL.h>
int PollEvents()
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_EVENT_QUIT:
return 1;
default:
break;
}
}
return 0;
}
int main(int argc, char *argv[])
{
SDL_Window *win;
SDL_Init(SDL_INIT_VIDEO);
win = SDL_CreateWindow("Test", 800, 600, 0);
SDL_SetWindowRelativeMouseMode(win, true);
while (1)
{
if (PollEvents())
break;
}
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}

BIN
3rdparty/sdl/SDL/test/sample.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
3rdparty/sdl/SDL/test/sdl-test_round.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

BIN
3rdparty/sdl/SDL/test/soundboard.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
3rdparty/sdl/SDL/test/speaker.bmp vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@@ -0,0 +1,3 @@
[Test]
Type=session
Exec=@installedtestsdir@/@exe@ @installed_arguments@

191
3rdparty/sdl/SDL/test/testasyncio.c vendored Normal file
View File

@@ -0,0 +1,191 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#define SDL_MAIN_USE_CALLBACKS 1
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
#include <SDL3/SDL_test_common.h>
static SDL_Renderer *renderer = NULL;
static SDL_Texture *texture = NULL;
static SDL_AsyncIOQueue *queue = NULL;
static SDLTest_CommonState *state = NULL;
SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
{
const char *base = NULL;
SDL_AsyncIO *asyncio = NULL;
char **bmps = NULL;
int bmpcount = 0;
int i;
SDL_srand(0);
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
if (!state) {
return SDL_APP_FAILURE;
}
/* Enable standard application logging */
SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed = SDLTest_CommonArg(state, i);
if (consumed <= 0) {
static const char *options[] = {
NULL,
};
SDLTest_CommonLogUsage(state, argv[0], options);
SDL_Quit();
SDLTest_CommonDestroyState(state);
return 1;
}
i += consumed;
}
state->num_windows = 1;
/* Load the SDL library */
if (!SDLTest_CommonInit(state)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return SDL_APP_FAILURE;
}
SDL_SetLogPriorities(SDL_LOG_PRIORITY_VERBOSE);
renderer = state->renderers[0];
if (!renderer) {
/* SDL_Log("Couldn't create renderer: %s", SDL_GetError()); */
return SDL_APP_FAILURE;
}
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STATIC, 512, 512);
if (!texture) {
SDL_Log("Couldn't create texture: %s", SDL_GetError());
return SDL_APP_FAILURE;
} else {
static const Uint32 blank[512 * 512];
const SDL_Rect rect = { 0, 0, 512, 512 };
SDL_UpdateTexture(texture, &rect, blank, 512 * sizeof (Uint32));
}
queue = SDL_CreateAsyncIOQueue();
if (!queue) {
SDL_Log("Couldn't create async i/o queue: %s", SDL_GetError());
return SDL_APP_FAILURE;
}
base = SDL_GetBasePath();
bmps = SDL_GlobDirectory(base, "*.bmp", SDL_GLOB_CASEINSENSITIVE, &bmpcount);
if (!bmps || (bmpcount == 0)) {
SDL_Log("No BMP files found.");
return SDL_APP_FAILURE;
}
for (i = 0; i < bmpcount; i++) {
char *path = NULL;
if (SDL_asprintf(&path, "%s%s", base, bmps[i]) < 0) {
SDL_free(path);
} else {
SDL_Log("Loading %s...", path);
SDL_LoadFileAsync(path, queue, path);
}
}
SDL_free(bmps);
SDL_Log("Opening asyncio.tmp...");
asyncio = SDL_AsyncIOFromFile("asyncio.tmp", "w");
if (!asyncio) {
SDL_Log("Failed!");
return SDL_APP_FAILURE;
}
SDL_WriteAsyncIO(asyncio, "hello", 0, 5, queue, "asyncio.tmp (write)");
SDL_CloseAsyncIO(asyncio, true, queue, "asyncio.tmp (flush/close)");
return SDL_APP_CONTINUE;
}
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
{
switch (event->type) {
case SDL_EVENT_QUIT:
return SDL_APP_SUCCESS;
default:
break;
}
return SDLTest_CommonEventMainCallbacks(state, event);
}
static void async_io_task_complete(const SDL_AsyncIOOutcome *outcome)
{
const char *fname = (const char *) outcome->userdata;
const char *resultstr = "[unknown result]";
switch (outcome->result) {
#define RESCASE(x) case x: resultstr = #x; break
RESCASE(SDL_ASYNCIO_COMPLETE);
RESCASE(SDL_ASYNCIO_FAILURE);
RESCASE(SDL_ASYNCIO_CANCELED);
#undef RESCASE
}
SDL_Log("File '%s' async results: %s", fname, resultstr);
if (SDL_strncmp(fname, "asyncio.tmp", 11) == 0) {
return;
}
if (outcome->result == SDL_ASYNCIO_COMPLETE) {
SDL_Surface *surface = SDL_LoadBMP_IO(SDL_IOFromConstMem(outcome->buffer, (size_t) outcome->bytes_transferred), true);
if (surface) {
SDL_Surface *converted = SDL_ConvertSurface(surface, SDL_PIXELFORMAT_RGBA8888);
SDL_DestroySurface(surface);
if (converted) {
const SDL_Rect rect = { 50 + SDL_rand(512 - 100), 50 + SDL_rand(512 - 100), converted->w, converted->h };
SDL_UpdateTexture(texture, &rect, converted->pixels, converted->pitch);
SDL_DestroySurface(converted);
}
}
}
SDL_free(outcome->userdata);
SDL_free(outcome->buffer);
}
SDL_AppResult SDL_AppIterate(void *appstate)
{
SDL_AsyncIOOutcome outcome;
if (SDL_GetAsyncIOResult(queue, &outcome)) {
async_io_task_complete(&outcome);
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_RenderTexture(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
return SDL_APP_CONTINUE;
}
void SDL_AppQuit(void *appstate, SDL_AppResult result)
{
SDL_DestroyAsyncIOQueue(queue);
SDL_DestroyTexture(texture);
SDL_RemovePath("asyncio.tmp");
SDLTest_CommonQuit(state);
}

764
3rdparty/sdl/SDL/test/testatomic.c vendored Normal file
View File

@@ -0,0 +1,764 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
/*
Absolutely basic tests just to see if we get the expected value
after calling each function.
*/
static const char *
tf(bool _tf)
{
static const char *t = "TRUE";
static const char *f = "FALSE";
if (_tf) {
return t;
}
return f;
}
static void RunBasicTest(void)
{
int value;
SDL_SpinLock lock = 0;
SDL_AtomicInt v;
bool tfret = false;
SDL_Log("%s", "");
SDL_Log("spin lock---------------------------------------");
SDL_Log("%s", "");
SDL_LockSpinlock(&lock);
SDL_Log("AtomicLock lock=%d", lock);
SDL_UnlockSpinlock(&lock);
SDL_Log("AtomicUnlock lock=%d", lock);
SDL_Log("%s", "");
SDL_Log("atomic -----------------------------------------");
SDL_Log("%s", "");
SDL_SetAtomicInt(&v, 0);
tfret = SDL_SetAtomicInt(&v, 10) == 0;
SDL_Log("AtomicSet(10) tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
tfret = SDL_AddAtomicInt(&v, 10) == 10;
SDL_Log("AtomicAdd(10) tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
SDL_SetAtomicInt(&v, 0);
SDL_AtomicIncRef(&v);
tfret = (SDL_GetAtomicInt(&v) == 1);
SDL_Log("AtomicIncRef() tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
SDL_AtomicIncRef(&v);
tfret = (SDL_GetAtomicInt(&v) == 2);
SDL_Log("AtomicIncRef() tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
tfret = (SDL_AtomicDecRef(&v) == false);
SDL_Log("AtomicDecRef() tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
tfret = (SDL_AtomicDecRef(&v) == true);
SDL_Log("AtomicDecRef() tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
SDL_SetAtomicInt(&v, 10);
tfret = (SDL_CompareAndSwapAtomicInt(&v, 0, 20) == false);
SDL_Log("AtomicCAS() tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
value = SDL_GetAtomicInt(&v);
tfret = (SDL_CompareAndSwapAtomicInt(&v, value, 20) == true);
SDL_Log("AtomicCAS() tfret=%s val=%d", tf(tfret), SDL_GetAtomicInt(&v));
}
/**************************************************************************/
/* Atomic operation test
* Adapted with permission from code by Michael Davidsaver at:
* http://bazaar.launchpad.net/~mdavidsaver/epics-base/atomic/revision/12105#src/libCom/test/epicsAtomicTest.c
* Original copyright 2010 Brookhaven Science Associates as operator of Brookhaven National Lab
* http://www.aps.anl.gov/epics/license/open.php
*/
/* Tests semantics of atomic operations. Also a stress test
* to see if they are really atomic.
*
* Several threads adding to the same variable.
* at the end the value is compared with the expected
* and with a non-atomic counter.
*/
/* Number of concurrent incrementers */
#define NThreads 2
#define CountInc 100
#define VALBITS (sizeof(atomicValue) * 8)
#define atomicValue int
#define CountTo ((atomicValue)((unsigned int)(1 << (VALBITS - 1)) - 1))
#define NInter (CountTo / CountInc / NThreads)
#define Expect (CountTo - NInter * CountInc * NThreads)
enum
{
CountTo_GreaterThanZero = CountTo > 0,
};
SDL_COMPILE_TIME_ASSERT(size, CountTo_GreaterThanZero); /* check for rollover */
static SDL_AtomicInt good = { 42 };
static atomicValue bad = 42;
static SDL_AtomicInt threadsRunning;
static SDL_Semaphore *threadDone;
static int SDLCALL adder(void *junk)
{
unsigned long N = NInter;
SDL_Log("Thread subtracting %d %lu times", CountInc, N);
while (N--) {
SDL_AddAtomicInt(&good, -CountInc);
bad -= CountInc;
}
SDL_AddAtomicInt(&threadsRunning, -1);
SDL_SignalSemaphore(threadDone);
return 0;
}
static void runAdder(void)
{
Uint64 start, end;
int i;
SDL_Thread *threads[NThreads];
start = SDL_GetTicksNS();
threadDone = SDL_CreateSemaphore(0);
SDL_SetAtomicInt(&threadsRunning, NThreads);
for (i = 0; i < NThreads; i++) {
threads[i] = SDL_CreateThread(adder, "Adder", NULL);
}
while (SDL_GetAtomicInt(&threadsRunning) > 0) {
SDL_WaitSemaphore(threadDone);
}
for (i = 0; i < NThreads; i++) {
SDL_WaitThread(threads[i], NULL);
}
SDL_DestroySemaphore(threadDone);
end = SDL_GetTicksNS();
SDL_Log("Finished in %f sec", (end - start) / 1000000000.0);
}
static void RunEpicTest(void)
{
int b;
atomicValue v;
SDL_Log("%s", "");
SDL_Log("epic test---------------------------------------");
SDL_Log("%s", "");
SDL_Log("Size asserted to be >= 32-bit");
SDL_assert(sizeof(atomicValue) >= 4);
SDL_Log("Check static initializer");
v = SDL_GetAtomicInt(&good);
SDL_assert(v == 42);
SDL_assert(bad == 42);
SDL_Log("Test negative values");
SDL_SetAtomicInt(&good, -5);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == -5);
SDL_Log("Verify maximum value");
SDL_SetAtomicInt(&good, CountTo);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == CountTo);
SDL_Log("Test compare and exchange");
b = SDL_CompareAndSwapAtomicInt(&good, 500, 43);
SDL_assert(!b); /* no swap since CountTo!=500 */
v = SDL_GetAtomicInt(&good);
SDL_assert(v == CountTo); /* ensure no swap */
b = SDL_CompareAndSwapAtomicInt(&good, CountTo, 44);
SDL_assert(!!b); /* will swap */
v = SDL_GetAtomicInt(&good);
SDL_assert(v == 44);
SDL_Log("Test Add");
v = SDL_AddAtomicInt(&good, 1);
SDL_assert(v == 44);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == 45);
v = SDL_AddAtomicInt(&good, 10);
SDL_assert(v == 45);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == 55);
SDL_Log("Test Add (Negative values)");
v = SDL_AddAtomicInt(&good, -20);
SDL_assert(v == 55);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == 35);
v = SDL_AddAtomicInt(&good, -50); /* crossing zero down */
SDL_assert(v == 35);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == -15);
v = SDL_AddAtomicInt(&good, 30); /* crossing zero up */
SDL_assert(v == -15);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == 15);
SDL_Log("Reset before count down test");
SDL_SetAtomicInt(&good, CountTo);
v = SDL_GetAtomicInt(&good);
SDL_assert(v == CountTo);
bad = CountTo;
SDL_assert(bad == CountTo);
SDL_Log("Counting down from %d, Expect %d remaining", CountTo, Expect);
runAdder();
v = SDL_GetAtomicInt(&good);
SDL_Log("Atomic %d Non-Atomic %d", v, bad);
SDL_assert(v == Expect);
/* We can't guarantee that bad != Expect, this would happen on a single core system, for example. */
/*SDL_assert(bad != Expect);*/
}
/* End atomic operation test */
/**************************************************************************/
/**************************************************************************/
/* Lock-free FIFO test */
/* This is useful to test the impact of another thread locking the queue
entirely for heavy-weight manipulation.
*/
#define TEST_SPINLOCK_FIFO
#define NUM_READERS 4
#define NUM_WRITERS 4
#define EVENTS_PER_WRITER 1000000
/* The number of entries must be a power of 2 */
#define MAX_ENTRIES 256
#define WRAP_MASK (MAX_ENTRIES - 1)
typedef struct
{
SDL_AtomicInt sequence;
SDL_Event event;
} SDL_EventQueueEntry;
typedef struct
{
SDL_EventQueueEntry entries[MAX_ENTRIES];
char cache_pad1[SDL_CACHELINE_SIZE - ((sizeof(SDL_EventQueueEntry) * MAX_ENTRIES) % SDL_CACHELINE_SIZE)];
SDL_AtomicInt enqueue_pos;
char cache_pad2[SDL_CACHELINE_SIZE - sizeof(SDL_AtomicInt)];
SDL_AtomicInt dequeue_pos;
char cache_pad3[SDL_CACHELINE_SIZE - sizeof(SDL_AtomicInt)];
#ifdef TEST_SPINLOCK_FIFO
SDL_SpinLock lock;
SDL_AtomicInt rwcount;
SDL_AtomicInt watcher;
char cache_pad4[SDL_CACHELINE_SIZE - sizeof(SDL_SpinLock) - 2 * sizeof(SDL_AtomicInt)];
#endif
SDL_AtomicInt active;
/* Only needed for the mutex test */
SDL_Mutex *mutex;
} SDL_EventQueue;
static void InitEventQueue(SDL_EventQueue *queue)
{
int i;
for (i = 0; i < MAX_ENTRIES; ++i) {
SDL_SetAtomicInt(&queue->entries[i].sequence, i);
}
SDL_SetAtomicInt(&queue->enqueue_pos, 0);
SDL_SetAtomicInt(&queue->dequeue_pos, 0);
#ifdef TEST_SPINLOCK_FIFO
queue->lock = 0;
SDL_SetAtomicInt(&queue->rwcount, 0);
SDL_SetAtomicInt(&queue->watcher, 0);
#endif
SDL_SetAtomicInt(&queue->active, 1);
}
static bool EnqueueEvent_LockFree(SDL_EventQueue *queue, const SDL_Event *event)
{
SDL_EventQueueEntry *entry;
unsigned queue_pos;
unsigned entry_seq;
int delta;
bool status;
#ifdef TEST_SPINLOCK_FIFO
/* This is a gate so an external thread can lock the queue */
SDL_LockSpinlock(&queue->lock);
SDL_assert(SDL_GetAtomicInt(&queue->watcher) == 0);
SDL_AtomicIncRef(&queue->rwcount);
SDL_UnlockSpinlock(&queue->lock);
#endif
queue_pos = (unsigned)SDL_GetAtomicInt(&queue->enqueue_pos);
for (;;) {
entry = &queue->entries[queue_pos & WRAP_MASK];
entry_seq = (unsigned)SDL_GetAtomicInt(&entry->sequence);
delta = (int)(entry_seq - queue_pos);
if (delta == 0) {
/* The entry and the queue position match, try to increment the queue position */
if (SDL_CompareAndSwapAtomicInt(&queue->enqueue_pos, (int)queue_pos, (int)(queue_pos + 1))) {
/* We own the object, fill it! */
entry->event = *event;
SDL_SetAtomicInt(&entry->sequence, (int)(queue_pos + 1));
status = true;
break;
}
} else if (delta < 0) {
/* We ran into an old queue entry, which means it still needs to be dequeued */
status = false;
break;
} else {
/* We ran into a new queue entry, get the new queue position */
queue_pos = (unsigned)SDL_GetAtomicInt(&queue->enqueue_pos);
}
}
#ifdef TEST_SPINLOCK_FIFO
(void)SDL_AtomicDecRef(&queue->rwcount);
#endif
return status;
}
static bool DequeueEvent_LockFree(SDL_EventQueue *queue, SDL_Event *event)
{
SDL_EventQueueEntry *entry;
unsigned queue_pos;
unsigned entry_seq;
int delta;
bool status;
#ifdef TEST_SPINLOCK_FIFO
/* This is a gate so an external thread can lock the queue */
SDL_LockSpinlock(&queue->lock);
SDL_assert(SDL_GetAtomicInt(&queue->watcher) == 0);
SDL_AtomicIncRef(&queue->rwcount);
SDL_UnlockSpinlock(&queue->lock);
#endif
queue_pos = (unsigned)SDL_GetAtomicInt(&queue->dequeue_pos);
for (;;) {
entry = &queue->entries[queue_pos & WRAP_MASK];
entry_seq = (unsigned)SDL_GetAtomicInt(&entry->sequence);
delta = (int)(entry_seq - (queue_pos + 1));
if (delta == 0) {
/* The entry and the queue position match, try to increment the queue position */
if (SDL_CompareAndSwapAtomicInt(&queue->dequeue_pos, (int)queue_pos, (int)(queue_pos + 1))) {
/* We own the object, fill it! */
*event = entry->event;
SDL_SetAtomicInt(&entry->sequence, (int)(queue_pos + MAX_ENTRIES));
status = true;
break;
}
} else if (delta < 0) {
/* We ran into an old queue entry, which means we've hit empty */
status = false;
break;
} else {
/* We ran into a new queue entry, get the new queue position */
queue_pos = (unsigned)SDL_GetAtomicInt(&queue->dequeue_pos);
}
}
#ifdef TEST_SPINLOCK_FIFO
(void)SDL_AtomicDecRef(&queue->rwcount);
#endif
return status;
}
static bool EnqueueEvent_Mutex(SDL_EventQueue *queue, const SDL_Event *event)
{
SDL_EventQueueEntry *entry;
unsigned queue_pos;
unsigned entry_seq;
int delta;
bool status = false;
SDL_LockMutex(queue->mutex);
queue_pos = (unsigned)queue->enqueue_pos.value;
entry = &queue->entries[queue_pos & WRAP_MASK];
entry_seq = (unsigned)entry->sequence.value;
delta = (int)(entry_seq - queue_pos);
if (delta == 0) {
++queue->enqueue_pos.value;
/* We own the object, fill it! */
entry->event = *event;
entry->sequence.value = (int)(queue_pos + 1);
status = true;
} else if (delta < 0) {
/* We ran into an old queue entry, which means it still needs to be dequeued */
} else {
SDL_Log("ERROR: mutex failed!");
}
SDL_UnlockMutex(queue->mutex);
return status;
}
static bool DequeueEvent_Mutex(SDL_EventQueue *queue, SDL_Event *event)
{
SDL_EventQueueEntry *entry;
unsigned queue_pos;
unsigned entry_seq;
int delta;
bool status = false;
SDL_LockMutex(queue->mutex);
queue_pos = (unsigned)queue->dequeue_pos.value;
entry = &queue->entries[queue_pos & WRAP_MASK];
entry_seq = (unsigned)entry->sequence.value;
delta = (int)(entry_seq - (queue_pos + 1));
if (delta == 0) {
++queue->dequeue_pos.value;
/* We own the object, fill it! */
*event = entry->event;
entry->sequence.value = (int)(queue_pos + MAX_ENTRIES);
status = true;
} else if (delta < 0) {
/* We ran into an old queue entry, which means we've hit empty */
} else {
SDL_Log("ERROR: mutex failed!");
}
SDL_UnlockMutex(queue->mutex);
return status;
}
typedef struct
{
SDL_EventQueue *queue;
int index;
char padding1[SDL_CACHELINE_SIZE - (sizeof(SDL_EventQueue *) + sizeof(int)) % SDL_CACHELINE_SIZE];
int waits;
bool lock_free;
char padding2[SDL_CACHELINE_SIZE - sizeof(int) - sizeof(bool)];
SDL_Thread *thread;
} WriterData;
typedef struct
{
SDL_EventQueue *queue;
int counters[NUM_WRITERS];
int waits;
bool lock_free;
char padding[SDL_CACHELINE_SIZE - (sizeof(SDL_EventQueue *) + sizeof(int) * NUM_WRITERS + sizeof(int) + sizeof(bool)) % SDL_CACHELINE_SIZE];
SDL_Thread *thread;
} ReaderData;
static int SDLCALL FIFO_Writer(void *_data)
{
WriterData *data = (WriterData *)_data;
SDL_EventQueue *queue = data->queue;
int i;
SDL_Event event;
event.type = SDL_EVENT_USER;
event.user.windowID = 0;
event.user.code = 0;
event.user.data1 = data;
event.user.data2 = NULL;
if (data->lock_free) {
for (i = 0; i < EVENTS_PER_WRITER; ++i) {
event.user.code = i;
while (!EnqueueEvent_LockFree(queue, &event)) {
++data->waits;
SDL_Delay(0);
}
}
} else {
for (i = 0; i < EVENTS_PER_WRITER; ++i) {
event.user.code = i;
while (!EnqueueEvent_Mutex(queue, &event)) {
++data->waits;
SDL_Delay(0);
}
}
}
return 0;
}
static int SDLCALL FIFO_Reader(void *_data)
{
ReaderData *data = (ReaderData *)_data;
SDL_EventQueue *queue = data->queue;
SDL_Event event;
if (data->lock_free) {
for (;;) {
if (DequeueEvent_LockFree(queue, &event)) {
WriterData *writer = (WriterData *)event.user.data1;
++data->counters[writer->index];
} else if (SDL_GetAtomicInt(&queue->active)) {
++data->waits;
SDL_Delay(0);
} else {
/* We drained the queue, we're done! */
break;
}
}
} else {
for (;;) {
if (DequeueEvent_Mutex(queue, &event)) {
WriterData *writer = (WriterData *)event.user.data1;
++data->counters[writer->index];
} else if (SDL_GetAtomicInt(&queue->active)) {
++data->waits;
SDL_Delay(0);
} else {
/* We drained the queue, we're done! */
break;
}
}
}
return 0;
}
#ifdef TEST_SPINLOCK_FIFO
/* This thread periodically locks the queue for no particular reason */
static int SDLCALL FIFO_Watcher(void *_data)
{
SDL_EventQueue *queue = (SDL_EventQueue *)_data;
while (SDL_GetAtomicInt(&queue->active)) {
SDL_LockSpinlock(&queue->lock);
SDL_AtomicIncRef(&queue->watcher);
while (SDL_GetAtomicInt(&queue->rwcount) > 0) {
SDL_Delay(0);
}
/* Do queue manipulation here... */
(void)SDL_AtomicDecRef(&queue->watcher);
SDL_UnlockSpinlock(&queue->lock);
/* Wait a bit... */
SDL_Delay(1);
}
return 0;
}
#endif /* TEST_SPINLOCK_FIFO */
static void RunFIFOTest(bool lock_free)
{
SDL_EventQueue queue;
SDL_Thread *fifo_thread = NULL;
WriterData writerData[NUM_WRITERS];
ReaderData readerData[NUM_READERS];
Uint64 start, end;
int i, j;
int grand_total;
char textBuffer[1024];
size_t len;
SDL_Log("%s", "");
SDL_Log("FIFO test---------------------------------------");
SDL_Log("%s", "");
SDL_Log("Mode: %s", lock_free ? "LockFree" : "Mutex");
SDL_memset(&queue, 0xff, sizeof(queue));
InitEventQueue(&queue);
if (!lock_free) {
queue.mutex = SDL_CreateMutex();
}
start = SDL_GetTicksNS();
#ifdef TEST_SPINLOCK_FIFO
/* Start a monitoring thread */
if (lock_free) {
fifo_thread = SDL_CreateThread(FIFO_Watcher, "FIFOWatcher", &queue);
}
#endif
/* Start the readers first */
SDL_Log("Starting %d readers", NUM_READERS);
SDL_zeroa(readerData);
for (i = 0; i < NUM_READERS; ++i) {
char name[64];
(void)SDL_snprintf(name, sizeof(name), "FIFOReader%d", i);
readerData[i].queue = &queue;
readerData[i].lock_free = lock_free;
readerData[i].thread = SDL_CreateThread(FIFO_Reader, name, &readerData[i]);
}
/* Start up the writers */
SDL_Log("Starting %d writers", NUM_WRITERS);
SDL_zeroa(writerData);
for (i = 0; i < NUM_WRITERS; ++i) {
char name[64];
(void)SDL_snprintf(name, sizeof(name), "FIFOWriter%d", i);
writerData[i].queue = &queue;
writerData[i].index = i;
writerData[i].lock_free = lock_free;
writerData[i].thread = SDL_CreateThread(FIFO_Writer, name, &writerData[i]);
}
/* Wait for the writers */
for (i = 0; i < NUM_WRITERS; ++i) {
SDL_WaitThread(writerData[i].thread, NULL);
}
/* Shut down the queue so readers exit */
SDL_SetAtomicInt(&queue.active, 0);
/* Wait for the readers */
for (i = 0; i < NUM_READERS; ++i) {
SDL_WaitThread(readerData[i].thread, NULL);
}
end = SDL_GetTicksNS();
/* Wait for the FIFO thread */
if (fifo_thread) {
SDL_WaitThread(fifo_thread, NULL);
}
if (!lock_free) {
SDL_DestroyMutex(queue.mutex);
}
SDL_Log("Finished in %f sec", (end - start) / 1000000000.0);
SDL_Log("%s", "");
for (i = 0; i < NUM_WRITERS; ++i) {
SDL_Log("Writer %d wrote %d events, had %d waits", i, EVENTS_PER_WRITER, writerData[i].waits);
}
SDL_Log("Writers wrote %d total events", NUM_WRITERS * EVENTS_PER_WRITER);
/* Print a breakdown of which readers read messages from which writer */
SDL_Log("%s", "");
grand_total = 0;
for (i = 0; i < NUM_READERS; ++i) {
int total = 0;
for (j = 0; j < NUM_WRITERS; ++j) {
total += readerData[i].counters[j];
}
grand_total += total;
SDL_Log("Reader %d read %d events, had %d waits", i, total, readerData[i].waits);
(void)SDL_snprintf(textBuffer, sizeof(textBuffer), " { ");
for (j = 0; j < NUM_WRITERS; ++j) {
if (j > 0) {
len = SDL_strlen(textBuffer);
(void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, ", ");
}
len = SDL_strlen(textBuffer);
(void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, "%d", readerData[i].counters[j]);
}
len = SDL_strlen(textBuffer);
(void)SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, " }\n");
SDL_Log("%s", textBuffer);
}
SDL_Log("Readers read %d total events", grand_total);
}
/* End FIFO test */
/**************************************************************************/
int main(int argc, char *argv[])
{
SDLTest_CommonState *state;
int i;
bool enable_threads = true;
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, 0);
if (!state) {
return 1;
}
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed;
consumed = SDLTest_CommonArg(state, i);
if (consumed == 0) {
consumed = -1;
if (SDL_strcasecmp(argv[i], "--no-threads") == 0) {
enable_threads = false;
consumed = 1;
}
}
if (consumed < 0) {
static const char *options[] = {
"[--no-threads]",
NULL
};
SDLTest_CommonLogUsage(state, argv[0], options);
return 1;
}
i += consumed;
}
RunBasicTest();
if (SDL_GetEnvironmentVariable(SDL_GetEnvironment(), "SDL_TESTS_QUICK") != NULL) {
SDL_Log("Not running slower tests");
return 0;
}
if (enable_threads) {
RunEpicTest();
}
/* This test is really slow, so don't run it by default */
#if 0
RunFIFOTest(false);
#endif
RunFIFOTest(true);
SDL_Quit();
SDLTest_CommonDestroyState(state);
return 0;
}

1274
3rdparty/sdl/SDL/test/testaudio.c vendored Normal file

File diff suppressed because it is too large Load Diff

209
3rdparty/sdl/SDL/test/testaudiohotplug.c vendored Normal file
View File

@@ -0,0 +1,209 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
/* Program to test hotplugging of audio devices */
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
#include "testutils.h"
#ifdef SDL_PLATFORM_EMSCRIPTEN
#include <emscripten/emscripten.h>
#endif
#include <stdlib.h>
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
static SDL_AudioSpec spec;
static Uint8 *sound = NULL; /* Pointer to wave data */
static Uint32 soundlen = 0; /* Length of wave data */
static SDLTest_CommonState *state;
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static void
quit(int rc)
{
SDL_Quit();
SDLTest_CommonDestroyState(state);
/* Let 'main()' return normally */
if (rc != 0) {
exit(rc);
}
}
static int done = 0;
static void poked(int sig)
{
done = 1;
}
static const char *devtypestr(int recording)
{
return recording ? "recording" : "playback";
}
static void iteration(void)
{
SDL_Event e;
SDL_AudioDeviceID dev;
while (SDL_PollEvent(&e)) {
if (e.type == SDL_EVENT_QUIT) {
done = 1;
} else if (e.type == SDL_EVENT_KEY_UP) {
if (e.key.key == SDLK_ESCAPE) {
done = 1;
}
} else if (e.type == SDL_EVENT_AUDIO_DEVICE_ADDED) {
const SDL_AudioDeviceID which = e.adevice.which;
const bool recording = e.adevice.recording ? true : false;
const char *name = SDL_GetAudioDeviceName(which);
if (name) {
SDL_Log("New %s audio device at id %u: %s", devtypestr(recording), (unsigned int)which, name);
} else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Got new %s device, id %u, but failed to get the name: %s",
devtypestr(recording), (unsigned int)which, SDL_GetError());
continue;
}
if (!recording) {
SDL_AudioStream *stream = SDL_OpenAudioDeviceStream(which, &spec, NULL, NULL);
if (!stream) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to create/bind an audio stream to %u ('%s'): %s", (unsigned int) which, name, SDL_GetError());
} else {
SDL_Log("Opened '%s' as %u", name, (unsigned int) which);
/* !!! FIXME: laziness, this used to loop the audio, but we'll just play it once for now on each connect. */
SDL_PutAudioStreamData(stream, sound, soundlen);
SDL_FlushAudioStream(stream);
SDL_ResumeAudioStreamDevice(stream);
/* !!! FIXME: this is leaking the stream for now. We'll wire it up to a dictionary or whatever later. */
}
}
} else if (e.type == SDL_EVENT_AUDIO_DEVICE_REMOVED) {
dev = e.adevice.which;
SDL_Log("%s device %u removed.", devtypestr(e.adevice.recording), (unsigned int)dev);
/* !!! FIXME: we need to keep track of our streams and destroy them here. */
}
}
}
#ifdef SDL_PLATFORM_EMSCRIPTEN
static void loop(void)
{
if (done)
emscripten_cancel_main_loop();
else
iteration();
}
#endif
int main(int argc, char *argv[])
{
int i;
char *filename = NULL;
SDL_Window *window;
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, 0);
if (!state) {
return 1;
}
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed;
consumed = SDLTest_CommonArg(state, i);
if (!consumed) {
if (!filename) {
filename = argv[i];
consumed = 1;
}
}
if (consumed <= 0) {
static const char *options[] = { "[sample.wav]", NULL };
SDLTest_CommonLogUsage(state, argv[0], options);
exit(1);
}
i += consumed;
}
/* Load the SDL library */
if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return 1;
}
/* Some targets (Mac CoreAudio) need an event queue for audio hotplug, so make and immediately hide a window. */
window = SDL_CreateWindow("testaudiohotplug", 640, 480, 0);
if (!window) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateWindow failed: %s", SDL_GetError());
quit(1);
}
SDL_MinimizeWindow(window);
filename = GetResourceFilename(filename, "sample.wav");
if (!filename) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", SDL_GetError());
quit(1);
}
/* Load the wave file into memory */
if (!SDL_LoadWAV(filename, &spec, &sound, &soundlen)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", filename, SDL_GetError());
quit(1);
}
#ifdef HAVE_SIGNAL_H
/* Set the signals */
#ifdef SIGHUP
(void)signal(SIGHUP, poked);
#endif
(void)signal(SIGINT, poked);
#ifdef SIGQUIT
(void)signal(SIGQUIT, poked);
#endif
(void)signal(SIGTERM, poked);
#endif /* HAVE_SIGNAL_H */
/* Show the list of available drivers */
SDL_Log("Available audio drivers:");
for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) {
SDL_Log("%i: %s", i, SDL_GetAudioDriver(i));
}
SDL_Log("Select a driver with the SDL_AUDIO_DRIVER environment variable.");
SDL_Log("Using audio driver: %s", SDL_GetCurrentAudioDriver());
#ifdef SDL_PLATFORM_EMSCRIPTEN
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done) {
SDL_Delay(100);
iteration();
}
#endif
/* Clean up on signal */
/* Quit audio first, then free WAV. This prevents access violations in the audio threads. */
SDL_QuitSubSystem(SDL_INIT_AUDIO);
SDL_free(sound);
SDL_free(filename);
quit(0);
return 0;
}

122
3rdparty/sdl/SDL/test/testaudioinfo.c vendored Normal file
View File

@@ -0,0 +1,122 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
static void
print_devices(bool recording)
{
SDL_AudioSpec spec;
const char *typestr = (recording ? "recording" : "playback");
int n = 0;
int frames;
SDL_AudioDeviceID *devices = recording ? SDL_GetAudioRecordingDevices(&n) : SDL_GetAudioPlaybackDevices(&n);
if (!devices) {
SDL_Log(" Driver failed to report %s devices: %s", typestr, SDL_GetError());
SDL_Log("%s", "");
} else if (n == 0) {
SDL_Log(" No %s devices found.", typestr);
SDL_Log("%s", "");
} else {
int i;
SDL_Log("Found %d %s device%s:", n, typestr, n != 1 ? "s" : "");
for (i = 0; i < n; i++) {
const char *name = SDL_GetAudioDeviceName(devices[i]);
if (name) {
SDL_Log(" %d: %s", i, name);
} else {
SDL_Log(" %d Error: %s", i, SDL_GetError());
}
if (SDL_GetAudioDeviceFormat(devices[i], &spec, &frames)) {
SDL_Log(" Sample Rate: %d", spec.freq);
SDL_Log(" Channels: %d", spec.channels);
SDL_Log(" SDL_AudioFormat: %X", spec.format);
SDL_Log(" Buffer Size: %d frames", frames);
}
}
SDL_Log("%s", "");
}
SDL_free(devices);
}
int main(int argc, char **argv)
{
SDL_AudioSpec spec;
int i;
int n;
int frames;
SDLTest_CommonState *state;
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, 0);
if (!state) {
return 1;
}
/* Parse commandline */
if (!SDLTest_CommonDefaultArgs(state, argc, argv)) {
return 1;
}
/* Load the SDL library */
if (!SDL_Init(SDL_INIT_AUDIO)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return 1;
}
/* Print available audio drivers */
n = SDL_GetNumAudioDrivers();
if (n == 0) {
SDL_Log("No built-in audio drivers");
SDL_Log("%s", "");
} else {
SDL_Log("Built-in audio drivers:");
for (i = 0; i < n; ++i) {
SDL_Log(" %d: %s", i, SDL_GetAudioDriver(i));
}
SDL_Log("Select a driver with the SDL_AUDIO_DRIVER environment variable.");
}
SDL_Log("Using audio driver: %s", SDL_GetCurrentAudioDriver());
SDL_Log("%s", "");
print_devices(false);
print_devices(true);
if (SDL_GetAudioDeviceFormat(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &spec, &frames)) {
SDL_Log("Default Playback Device:");
SDL_Log("Sample Rate: %d", spec.freq);
SDL_Log("Channels: %d", spec.channels);
SDL_Log("SDL_AudioFormat: %X", spec.format);
SDL_Log("Buffer Size: %d frames", frames);
} else {
SDL_Log("Error when calling SDL_GetAudioDeviceFormat(default playback): %s", SDL_GetError());
}
if (SDL_GetAudioDeviceFormat(SDL_AUDIO_DEVICE_DEFAULT_RECORDING, &spec, &frames)) {
SDL_Log("Default Recording Device:");
SDL_Log("Sample Rate: %d", spec.freq);
SDL_Log("Channels: %d", spec.channels);
SDL_Log("SDL_AudioFormat: %X", spec.format);
SDL_Log("Buffer Size: %d frames", frames);
} else {
SDL_Log("Error when calling SDL_GetAudioDeviceFormat(default recording): %s", SDL_GetError());
}
SDL_Quit();
SDLTest_CommonDestroyState(state);
return 0;
}

View File

@@ -0,0 +1,214 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#define SDL_MAIN_USE_CALLBACKS 1
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
static SDL_Window *window = NULL;
static SDL_Renderer *renderer = NULL;
static SDL_AudioStream *stream_in = NULL;
static SDL_AudioStream *stream_out = NULL;
static SDLTest_CommonState *state = NULL;
SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv)
{
SDL_AudioDeviceID *devices;
SDL_AudioSpec outspec;
SDL_AudioSpec inspec;
SDL_AudioDeviceID device;
SDL_AudioDeviceID want_device = SDL_AUDIO_DEVICE_DEFAULT_RECORDING;
const char *devname = NULL;
int i;
/* this doesn't have to run very much, so give up tons of CPU time between iterations. */
SDL_SetHint(SDL_HINT_MAIN_CALLBACK_RATE, "15");
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, 0);
if (!state) {
return SDL_APP_SUCCESS;
}
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed;
consumed = SDLTest_CommonArg(state, i);
if (!consumed) {
if (!devname) {
devname = argv[i];
consumed = 1;
}
}
if (consumed <= 0) {
static const char *options[] = { "[device_name]", NULL };
SDLTest_CommonLogUsage(state, argv[0], options);
return SDL_APP_FAILURE;
}
i += consumed;
}
/* Load the SDL library */
if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return SDL_APP_SUCCESS;
}
if (!SDL_CreateWindowAndRenderer("testaudiorecording", 320, 240, 0, &window, &renderer)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create SDL window and renderer: %s", SDL_GetError());
return SDL_APP_SUCCESS;
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_Log("Using audio driver: %s", SDL_GetCurrentAudioDriver());
devices = SDL_GetAudioRecordingDevices(NULL);
for (i = 0; devices[i] != 0; i++) {
const char *name = SDL_GetAudioDeviceName(devices[i]);
SDL_Log(" Recording device #%d: '%s'", i, name);
if (devname && (SDL_strcmp(devname, name) == 0)) {
want_device = devices[i];
}
}
if (devname && (want_device == SDL_AUDIO_DEVICE_DEFAULT_RECORDING)) {
SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "Didn't see a recording device named '%s', using the system default instead.", devname);
devname = NULL;
}
/* DirectSound can fail in some instances if you open the same hardware
for both recording and output and didn't open the output end first,
according to the docs, so if you're doing something like this, always
open your recording devices second in case you land in those bizarre
circumstances. */
SDL_Log("Opening default playback device...");
device = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, NULL);
if (!device) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for playback: %s!", SDL_GetError());
SDL_free(devices);
return SDL_APP_FAILURE;
}
SDL_PauseAudioDevice(device);
SDL_GetAudioDeviceFormat(device, &outspec, NULL);
stream_out = SDL_CreateAudioStream(&outspec, &outspec);
if (!stream_out) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create an audio stream for playback: %s!", SDL_GetError());
SDL_free(devices);
return SDL_APP_FAILURE;
} else if (!SDL_BindAudioStream(device, stream_out)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't bind an audio stream for playback: %s!", SDL_GetError());
SDL_free(devices);
return SDL_APP_FAILURE;
}
SDL_Log("Opening recording device %s%s%s...",
devname ? "'" : "",
devname ? devname : "[[default]]",
devname ? "'" : "");
device = SDL_OpenAudioDevice(want_device, NULL);
if (!device) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open an audio device for recording: %s!", SDL_GetError());
SDL_free(devices);
return SDL_APP_FAILURE;
}
SDL_free(devices);
SDL_PauseAudioDevice(device);
SDL_GetAudioDeviceFormat(device, &inspec, NULL);
stream_in = SDL_CreateAudioStream(&inspec, &inspec);
if (!stream_in) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create an audio stream for recording: %s!", SDL_GetError());
return SDL_APP_FAILURE;
} else if (!SDL_BindAudioStream(device, stream_in)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't bind an audio stream for recording: %s!", SDL_GetError());
return SDL_APP_FAILURE;
}
SDL_SetAudioStreamFormat(stream_in, NULL, &outspec); /* make sure we output at the playback format. */
SDL_Log("Ready! Hold down mouse or finger to record!");
return SDL_APP_CONTINUE;
}
SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
{
if (event->type == SDL_EVENT_QUIT) {
return SDL_APP_SUCCESS;
} else if (event->type == SDL_EVENT_KEY_DOWN) {
if (event->key.key == SDLK_ESCAPE) {
return SDL_APP_SUCCESS;
}
} else if (event->type == SDL_EVENT_MOUSE_BUTTON_DOWN) {
if (event->button.button == 1) {
SDL_PauseAudioStreamDevice(stream_out);
SDL_FlushAudioStream(stream_out); /* so no samples are held back for resampling purposes. */
SDL_ResumeAudioStreamDevice(stream_in);
}
} else if (event->type == SDL_EVENT_MOUSE_BUTTON_UP) {
if (event->button.button == 1) {
SDL_PauseAudioStreamDevice(stream_in);
SDL_FlushAudioStream(stream_in); /* so no samples are held back for resampling purposes. */
SDL_ResumeAudioStreamDevice(stream_out);
}
}
return SDL_APP_CONTINUE;
}
SDL_AppResult SDL_AppIterate(void *appstate)
{
if (!SDL_AudioStreamDevicePaused(stream_in)) {
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
} else {
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
}
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
/* Feed any new data we recorded to the output stream. It'll play when we unpause the device. */
while (SDL_GetAudioStreamAvailable(stream_in) > 0) {
Uint8 buf[1024];
const int br = SDL_GetAudioStreamData(stream_in, buf, sizeof(buf));
if (br < 0) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to read from input audio stream: %s", SDL_GetError());
return SDL_APP_FAILURE;
} else if (!SDL_PutAudioStreamData(stream_out, buf, br)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to write to output audio stream: %s", SDL_GetError());
return SDL_APP_FAILURE;
}
}
return SDL_APP_CONTINUE;
}
void SDL_AppQuit(void *appstate, SDL_AppResult result)
{
SDL_Log("Shutting down.");
const SDL_AudioDeviceID devid_in = SDL_GetAudioStreamDevice(stream_in);
const SDL_AudioDeviceID devid_out = SDL_GetAudioStreamDevice(stream_out);
SDL_CloseAudioDevice(devid_in); /* !!! FIXME: use SDL_OpenAudioDeviceStream instead so we can dump this. */
SDL_CloseAudioDevice(devid_out);
SDL_DestroyAudioStream(stream_in);
SDL_DestroyAudioStream(stream_out);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
SDLTest_CommonDestroyState(state);
}

View File

@@ -0,0 +1,441 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
#include "testutils.h"
#ifdef SDL_PLATFORM_EMSCRIPTEN
#include <emscripten/emscripten.h>
#endif
#include <stdlib.h>
#define SLIDER_WIDTH_PERC 500.f / 600.f
#define SLIDER_HEIGHT_PERC 70.f / 480.f
static int done;
static SDLTest_CommonState *state;
static SDL_AudioSpec spec;
static SDL_AudioStream *stream;
static Uint8 *audio_buf = NULL;
static Uint32 audio_len = 0;
static bool auto_loop = true;
static bool auto_flush = false;
static Uint64 last_get_callback = 0;
static int last_get_amount_additional = 0;
static int last_get_amount_total = 0;
typedef struct Slider
{
SDL_FRect area;
bool changed;
char fmtlabel[64];
float pos;
int flags;
float min;
float mid;
float max;
float value;
} Slider;
#define NUM_SLIDERS 3
Slider sliders[NUM_SLIDERS];
static int active_slider = -1;
static void init_slider(int index, const char* fmtlabel, int flags, float value, float min, float max)
{
Slider* slider = &sliders[index];
slider->area.x = state->window_w * (1.f - SLIDER_WIDTH_PERC) / 2;
slider->area.y = state->window_h * (0.2f + (index * SLIDER_HEIGHT_PERC * 1.4f));
slider->area.w = SLIDER_WIDTH_PERC * state->window_w;
slider->area.h = SLIDER_HEIGHT_PERC * state->window_h;
slider->changed = true;
SDL_strlcpy(slider->fmtlabel, fmtlabel, SDL_arraysize(slider->fmtlabel));
slider->flags = flags;
slider->min = min;
slider->max = max;
slider->value = value;
if (slider->flags & 1) {
slider->pos = (value - slider->min + 0.5f) / (slider->max - slider->min + 1.0f);
} else {
slider->pos = 0.5f;
slider->mid = value;
}
}
static float lerp(float v0, float v1, float t)
{
return (1 - t) * v0 + t * v1;
}
static void draw_text(SDL_Renderer* renderer, int x, int y, const char* text)
{
SDL_SetRenderDrawColor(renderer, 0xFD, 0xF6, 0xE3, 0xFF);
SDLTest_DrawString(renderer, (float) x, (float) y, text);
}
static void draw_textf(SDL_Renderer* renderer, int x, int y, const char* fmt, ...)
{
char text[256];
va_list ap;
va_start(ap, fmt);
SDL_vsnprintf(text, SDL_arraysize(text), fmt, ap);
va_end(ap);
draw_text(renderer, x, y, text);
}
static void queue_audio(void)
{
Uint8* new_data = NULL;
int new_len = 0;
bool result = true;
SDL_AudioSpec new_spec;
SDL_zero(new_spec);
new_spec.format = spec.format;
new_spec.channels = (int) sliders[2].value;
new_spec.freq = (int) sliders[1].value;
SDL_Log("Converting audio from %i to %i", spec.freq, new_spec.freq);
/* You shouldn't actually use SDL_ConvertAudioSamples like this (just put the data straight into the stream and let it handle conversion) */
result = result && SDL_ConvertAudioSamples(&spec, audio_buf, audio_len, &new_spec, &new_data, &new_len);
result = result && SDL_SetAudioStreamFormat(stream, &new_spec, NULL);
result = result && SDL_PutAudioStreamData(stream, new_data, new_len);
if (auto_flush) {
result = result && SDL_FlushAudioStream(stream);
}
SDL_free(new_data);
if (result) {
SDL_Log("Queued audio");
} else {
SDL_Log("Failed to queue audio: %s", SDL_GetError());
}
}
static void skip_audio(float amount)
{
float speed;
SDL_AudioSpec dst_spec;
int num_bytes;
int result = 0;
void* buf = NULL;
SDL_LockAudioStream(stream);
speed = SDL_GetAudioStreamFrequencyRatio(stream);
SDL_GetAudioStreamFormat(stream, NULL, &dst_spec);
SDL_SetAudioStreamFrequencyRatio(stream, 100.0f);
num_bytes = (int)(SDL_AUDIO_FRAMESIZE(dst_spec) * dst_spec.freq * ((speed * amount) / 100.0f));
buf = SDL_malloc(num_bytes);
if (buf) {
result = SDL_GetAudioStreamData(stream, buf, num_bytes);
SDL_free(buf);
}
SDL_SetAudioStreamFrequencyRatio(stream, speed);
SDL_UnlockAudioStream(stream);
if (result >= 0) {
SDL_Log("Skipped %.2f seconds", amount);
} else {
SDL_Log("Failed to skip: %s", SDL_GetError());
}
}
static const char *AudioChansToStr(const int channels)
{
switch (channels) {
case 1: return "Mono";
case 2: return "Stereo";
case 3: return "2.1";
case 4: return "Quad";
case 5: return "4.1";
case 6: return "5.1";
case 7: return "6.1";
case 8: return "7.1";
default: break;
}
return "?";
}
static void scale_mouse_coords(SDL_FPoint *p)
{
SDL_Window *window = SDL_GetMouseFocus();
if (window) {
int w, p_w;
float scale;
SDL_GetWindowSize(window, &w, NULL);
SDL_GetWindowSizeInPixels(window, &p_w, NULL);
scale = (float)p_w / (float)w;
p->x *= scale;
p->y *= scale;
}
}
static void loop(void)
{
int i, j;
SDL_Event e;
SDL_FPoint p;
SDL_AudioSpec src_spec, dst_spec;
int queued_bytes = 0;
int available_bytes = 0;
float available_seconds = 0;
while (SDL_PollEvent(&e)) {
SDLTest_CommonEvent(state, &e, &done);
#ifdef SDL_PLATFORM_EMSCRIPTEN
if (done) {
emscripten_cancel_main_loop();
}
#endif
if (e.type == SDL_EVENT_KEY_DOWN) {
SDL_Keycode key = e.key.key;
if (key == SDLK_Q) {
if (SDL_AudioDevicePaused(state->audio_id)) {
SDL_ResumeAudioDevice(state->audio_id);
} else {
SDL_PauseAudioDevice(state->audio_id);
}
} else if (key == SDLK_W) {
auto_loop = !auto_loop;
} else if (key == SDLK_E) {
auto_flush = !auto_flush;
} else if (key == SDLK_A) {
SDL_ClearAudioStream(stream);
SDL_Log("Cleared audio stream");
} else if (key == SDLK_S) {
queue_audio();
} else if (key == SDLK_D) {
float amount = 1.0f;
amount *= (e.key.mod & SDL_KMOD_CTRL) ? 10.0f : 1.0f;
amount *= (e.key.mod & SDL_KMOD_SHIFT) ? 10.0f : 1.0f;
skip_audio(amount);
}
}
}
if (SDL_GetMouseState(&p.x, &p.y) & SDL_BUTTON_LMASK) {
scale_mouse_coords(&p);
if (active_slider == -1) {
for (i = 0; i < NUM_SLIDERS; ++i) {
if (SDL_PointInRectFloat(&p, &sliders[i].area)) {
active_slider = i;
break;
}
}
}
} else {
active_slider = -1;
}
if (active_slider != -1) {
Slider* slider = &sliders[active_slider];
float value = (p.x - slider->area.x) / slider->area.w;
value = SDL_clamp(value, 0.0f, 1.0f);
slider->pos = value;
if (slider->flags & 1) {
value = slider->min + (value * (slider->max - slider->min + 1.0f));
value = SDL_clamp(value, slider->min, slider->max);
} else {
value = (value * 2.0f) - 1.0f;
value = (value >= 0)
? lerp(slider->mid, slider->max, value)
: lerp(slider->mid, slider->min, -value);
}
if (value != slider->value) {
slider->value = value;
slider->changed = true;
}
}
if (sliders[0].changed) {
sliders[0].changed = false;
SDL_SetAudioStreamFrequencyRatio(stream, sliders[0].value);
}
if (SDL_GetAudioStreamFormat(stream, &src_spec, &dst_spec)) {
available_bytes = SDL_GetAudioStreamAvailable(stream);
available_seconds = (float)available_bytes / (float)(SDL_AUDIO_FRAMESIZE(dst_spec) * dst_spec.freq);
/* keep it looping. */
if (auto_loop && (available_seconds < 10.0f)) {
queue_audio();
}
}
queued_bytes = SDL_GetAudioStreamQueued(stream);
for (i = 0; i < state->num_windows; i++) {
int draw_y = 0;
SDL_Renderer* rend = state->renderers[i];
SDL_SetRenderDrawColor(rend, 0x00, 0x2B, 0x36, 0xFF);
SDL_RenderClear(rend);
for (j = 0; j < NUM_SLIDERS; ++j) {
Slider* slider = &sliders[j];
SDL_FRect area;
SDL_copyp(&area, &slider->area);
SDL_SetRenderDrawColor(rend, 0x07, 0x36, 0x42, 0xFF);
SDL_RenderFillRect(rend, &area);
area.w *= slider->pos;
SDL_SetRenderDrawColor(rend, 0x58, 0x6E, 0x75, 0xFF);
SDL_RenderFillRect(rend, &area);
draw_textf(rend, (int)slider->area.x, (int)slider->area.y, slider->fmtlabel,
(slider->flags & 2) ? ((float)(int)slider->value) : slider->value);
}
draw_textf(rend, 0, draw_y, "%7s, Loop: %3s, Flush: %3s",
SDL_AudioDevicePaused(state->audio_id) ? "Paused" : "Playing", auto_loop ? "On" : "Off", auto_flush ? "On" : "Off");
draw_y += FONT_LINE_HEIGHT;
draw_textf(rend, 0, draw_y, "Available: %4.2f (%i bytes)", available_seconds, available_bytes);
draw_y += FONT_LINE_HEIGHT;
draw_textf(rend, 0, draw_y, "Queued: %i bytes", queued_bytes);
draw_y += FONT_LINE_HEIGHT;
SDL_LockAudioStream(stream);
draw_textf(rend, 0, draw_y, "Get Callback: %i/%i bytes, %2i ms ago",
last_get_amount_additional, last_get_amount_total, (int)(SDL_GetTicks() - last_get_callback));
draw_y += FONT_LINE_HEIGHT;
SDL_UnlockAudioStream(stream);
draw_y = state->window_h - FONT_LINE_HEIGHT * 3;
draw_textf(rend, 0, draw_y, "Wav: %6s/%6s/%i",
SDL_GetAudioFormatName(spec.format), AudioChansToStr(spec.channels), spec.freq);
draw_y += FONT_LINE_HEIGHT;
draw_textf(rend, 0, draw_y, "Src: %6s/%6s/%i",
SDL_GetAudioFormatName(src_spec.format), AudioChansToStr(src_spec.channels), src_spec.freq);
draw_y += FONT_LINE_HEIGHT;
draw_textf(rend, 0, draw_y, "Dst: %6s/%6s/%i",
SDL_GetAudioFormatName(dst_spec.format), AudioChansToStr(dst_spec.channels), dst_spec.freq);
draw_y += FONT_LINE_HEIGHT;
SDL_RenderPresent(rend);
}
}
static void SDLCALL our_get_callback(void *userdata, SDL_AudioStream *strm, int additional_amount, int total_amount)
{
last_get_callback = SDL_GetTicks();
last_get_amount_additional = additional_amount;
last_get_amount_total = total_amount;
}
int main(int argc, char *argv[])
{
char *filename = NULL;
int i;
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, SDL_INIT_AUDIO | SDL_INIT_VIDEO);
if (!state) {
return 1;
}
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed;
consumed = SDLTest_CommonArg(state, i);
if (!consumed) {
if (!filename) {
filename = argv[i];
consumed = 1;
}
}
if (consumed <= 0) {
static const char *options[] = { "[sample.wav]", NULL };
SDLTest_CommonLogUsage(state, argv[0], options);
exit(1);
}
i += consumed;
}
/* Load the SDL library */
if (!SDLTest_CommonInit(state)) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s", SDL_GetError());
return 1;
}
FONT_CHARACTER_SIZE = 16;
filename = GetResourceFilename(filename, "sample.wav");
if (!SDL_LoadWAV(filename, &spec, &audio_buf, &audio_len)) {
SDL_Log("Failed to load '%s': %s", filename, SDL_GetError());
SDL_free(filename);
SDL_Quit();
return 1;
}
SDL_free(filename);
init_slider(0, "Speed: %3.2fx", 0x0, 1.0f, 0.2f, 5.0f);
init_slider(1, "Freq: %g", 0x2, (float)spec.freq, 4000.0f, 192000.0f);
init_slider(2, "Channels: %g", 0x3, (float)spec.channels, 1.0f, 8.0f);
for (i = 0; i < state->num_windows; i++) {
SDL_SetWindowTitle(state->windows[i], "Resampler Test");
}
stream = SDL_CreateAudioStream(&spec, &spec);
SDL_SetAudioStreamGetCallback(stream, our_get_callback, NULL);
SDL_BindAudioStream(state->audio_id, stream);
#ifdef SDL_PLATFORM_EMSCRIPTEN
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done) {
loop();
}
#endif
SDLTest_CleanupTextDrawing();
SDL_DestroyAudioStream(stream);
SDL_free(audio_buf);
SDLTest_CommonQuit(state);
return 0;
}

151
3rdparty/sdl/SDL/test/testautomation.c vendored Normal file
View File

@@ -0,0 +1,151 @@
/*
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#include <stdlib.h>
#include <SDL3/SDL.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_test.h>
#include "testautomation_suites.h"
static SDLTest_CommonState *state;
static SDLTest_TestSuiteRunner *runner;
/* All test suites */
static SDLTest_TestSuiteReference *testSuites[] = {
&audioTestSuite,
&clipboardTestSuite,
&eventsTestSuite,
&guidTestSuite,
&hintsTestSuite,
&intrinsicsTestSuite,
&joystickTestSuite,
&keyboardTestSuite,
&logTestSuite,
&mainTestSuite,
&mathTestSuite,
&mouseTestSuite,
&pixelsTestSuite,
&platformTestSuite,
&propertiesTestSuite,
&rectTestSuite,
&renderTestSuite,
&iostrmTestSuite,
&sdltestTestSuite,
&stdlibTestSuite,
&surfaceTestSuite,
&timeTestSuite,
&timerTestSuite,
&videoTestSuite,
&blitTestSuite,
&subsystemsTestSuite, /* run last, not interfere with other test environment */
NULL
};
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static void
quit(int rc)
{
SDLTest_DestroyTestSuiteRunner(runner);
SDLTest_CommonQuit(state);
/* Let 'main()' return normally */
if (rc != 0) {
exit(rc);
}
}
int main(int argc, char *argv[])
{
int result;
int i, done;
SDL_Event event;
int list = 0;
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO | SDL_INIT_AUDIO);
if (!state) {
return 1;
}
/* No need of windows (or update testautomation_mouse.c:mouse_getMouseFocus() */
state->num_windows = 0;
runner = SDLTest_CreateTestSuiteRunner(state, testSuites);
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed;
consumed = SDLTest_CommonArg(state, i);
if (consumed == 0) {
consumed = -1;
if (SDL_strcasecmp(argv[i], "--list") == 0) {
consumed = 1;
list = 1;
}
}
if (consumed < 0) {
static const char *options[] = {
"[--list]",
NULL };
SDLTest_CommonLogUsage(state, argv[0], options);
quit(1);
}
i += consumed;
}
/* List all suites. */
if (list) {
int suiteCounter;
for (suiteCounter = 0; testSuites[suiteCounter]; ++suiteCounter) {
int testCounter;
SDLTest_TestSuiteReference *testSuite = testSuites[suiteCounter];
SDL_Log("Test suite: %s", testSuite->name);
for (testCounter = 0; testSuite->testCases[testCounter]; ++testCounter) {
const SDLTest_TestCaseReference *testCase = testSuite->testCases[testCounter];
SDL_Log(" test: %s%s", testCase->name, testCase->enabled ? "" : " (disabled)");
}
}
return 0;
}
/* Initialize common state */
if (!SDLTest_CommonInit(state)) {
quit(2);
}
/* Create the windows, initialize the renderers */
for (i = 0; i < state->num_windows; ++i) {
SDL_Renderer *renderer = state->renderers[i];
SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(renderer);
}
/* Call Harness */
result = SDLTest_ExecuteTestSuiteRunner(runner);
/* Empty event queue */
done = 0;
for (i = 0; i < 100; i++) {
while (SDL_PollEvent(&event)) {
SDLTest_CommonEvent(state, &event, &done);
}
SDL_Delay(10);
}
/* Shutdown everything */
quit(0);
return result;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,215 @@
/**
* SDL_BlitSurface bit-perfect rendering test suite written by Isaac Aronson
*/
/* Suppress C4996 VS compiler warnings for unlink() */
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
#define _CRT_SECURE_NO_DEPRECATE
#endif
#if defined(_MSC_VER) && !defined(_CRT_NONSTDC_NO_DEPRECATE)
#define _CRT_NONSTDC_NO_DEPRECATE
#endif
#include <stdio.h>
#ifndef _MSC_VER
#include <unistd.h>
#else
/* Suppress uint64 to uint32 conversion warning within the PRNG engine */
#pragma warning( disable : 4244 )
#endif
#include <sys/stat.h>
#include <SDL3/SDL.h>
#include <SDL3/SDL_test.h>
#include "testautomation_images.h"
/* ====== xoroshiro128+ PRNG engine for deterministic blit input ===== */
Uint64 rotl(Uint64 x, int k) { return (x << k) | (x >> (-k & 63)); }
Uint64 next(Uint64 state[2]) {
Uint64 s0 = state[0], s1 = state[1];
Uint64 result = rotl((s0 + s1) * 9, 29) + s0;
state[0] = s0 ^ rotl(s1, 29);
state[1] = s0 ^ s1 << 9;
return result;
}
static Uint64 rngState[2] = {1, 2};
Uint32 getRandomUint32(void) {
return (Uint32)next(rngState);
}
/* ================= Test Case Helper Functions ================== */
/*
* Resets PRNG state to initialize tests using PRNG
*/
void SDLCALL blitSetUp(void **arg) {
rngState[0] = 1;
rngState[1] = 2;
}
/*
* Fill buffer with stream of PRNG pixel data given size
*/
static Uint32 *fillNextRandomBuffer(Uint32 *buf, const int width, const int height) {
int i;
for (i = 0; i < width * height; i++) {
buf[i] = getRandomUint32();
}
return buf;
}
/*
* Generates a stream of PRNG pixel data given length
*/
static Uint32 *getNextRandomBuffer(const int width, const int height) {
Uint32* buf = SDL_malloc(sizeof(Uint32) * width * height);
fillNextRandomBuffer(buf, width, height);
return buf;
}
/*
* Generates a 800 x 600 surface of PRNG pixel data
*/
SDL_Surface* getRandomSVGASurface(Uint32 *pixels, SDL_PixelFormat format) {
return SDL_CreateSurfaceFrom(800, 600, format, pixels, 800 * 4);
}
/*
* Calculates the FNV-1a hash of input pixel data
*/
Uint32 FNVHash(Uint32* buf, int length) {
const Uint32 fnv_prime = 0x811C9DC5;
Uint32 hash = 0;
int i;
for (i = 0; i < length; buf++, i++)
{
hash *= fnv_prime;
hash ^= (*buf);
}
return hash;
}
/*
* Wraps the FNV-1a hash for an input surface's pixels
*/
Uint32 hashSurfacePixels(SDL_Surface * surface) {
Uint64 buffer_size = surface->w * surface->h;
return FNVHash(surface->pixels, buffer_size);
}
/* ================= Test Case Implementation ================== */
/**
* Tests rendering a rainbow gradient background onto a blank surface, then rendering a sprite with complex geometry and
* transparency on top of said surface, and comparing the result to known accurate renders with a hash.
*/
static int SDLCALL blit_testExampleApplicationRender(void *arg) {
const int width = 32;
const int height = 32;
const Uint32 correct_hash = 0xe345d7a7;
SDL_Surface* dest_surface = SDL_CreateSurface(width, height, SDL_PIXELFORMAT_ARGB8888);
SDL_Surface* rainbow_background = SDLTest_ImageBlendingBackground();
SDL_Surface* gearbrain_sprite = SDLTest_ImageBlendingSprite();
// Blit background into "screen"
SDL_BlitSurface(rainbow_background, NULL, dest_surface, NULL);
// Blit example game sprite onto "screen"
SDL_BlitSurface(gearbrain_sprite, NULL, dest_surface, NULL);
// Check result
const Uint32 hash = hashSurfacePixels(dest_surface);
SDLTest_AssertCheck(hash == correct_hash,
"Should render identically, expected hash 0x%" SDL_PRIx32 ", got 0x%" SDL_PRIx32,
correct_hash, hash);
// Clean up
SDL_DestroySurface(rainbow_background);
SDL_DestroySurface(gearbrain_sprite);
SDL_DestroySurface(dest_surface);
return TEST_COMPLETED;
}
/**
* Tests rendering PRNG noise onto a surface of PRNG noise, while also testing color shift operations between the
* different source and destination pixel formats, without an alpha shuffle, at SVGA resolution. Compares to known
* accurate renders with a hash.
*/
static int SDLCALL blit_testRandomToRandomSVGA(void *arg) {
const int width = 800;
const int height = 600;
const Uint32 correct_hash = 0x42140c5f;
// Allocate random buffers
Uint32 *dest_pixels = getNextRandomBuffer(width, height);
Uint32 *src_pixels = getNextRandomBuffer(width, height);
// Create surfaces of different pixel formats
SDL_Surface* dest_surface = getRandomSVGASurface(dest_pixels, SDL_PIXELFORMAT_BGRA8888);
SDL_Surface* src_surface = getRandomSVGASurface(src_pixels, SDL_PIXELFORMAT_RGBA8888);
// Blit surfaces
SDL_BlitSurface(src_surface, NULL, dest_surface, NULL);
// Check result
const Uint32 hash = hashSurfacePixels(dest_surface);
SDLTest_AssertCheck(hash == correct_hash,
"Should render identically, expected hash 0x%" SDL_PRIx32 ", got 0x%" SDL_PRIx32,
correct_hash, hash);
// Clean up
SDL_DestroySurface(dest_surface);
SDL_DestroySurface(src_surface);
SDL_free(dest_pixels);
SDL_free(src_pixels);
return TEST_COMPLETED;
}
/**
* Tests rendering small chunks of 15 by 15px PRNG noise onto an initially blank SVGA surface, while also testing color
* shift operations between the different source and destination pixel formats, including an alpha shuffle. Compares to
* known accurate renders with a hash.
*/
static int SDLCALL blit_testRandomToRandomSVGAMultipleIterations(void *arg) {
const int width = 800;
const int height = 600;
const int blit_width = 15;
const int blit_height = 15;
int i;
const Uint32 correct_hash = 0x5d26be78;
Uint32 *buf = SDL_malloc(blit_width * blit_height * sizeof(Uint32));
// Create blank source surface
SDL_Surface *sourceSurface = SDL_CreateSurface(blit_width, blit_height, SDL_PIXELFORMAT_RGBA8888);
// Create blank destination surface
SDL_Surface* dest_surface = SDL_CreateSurface(width, height, SDL_PIXELFORMAT_ABGR8888);
// Perform 250k random blits into random areas of the blank surface
for (i = 0; i < 250000; i++) {
fillNextRandomBuffer(buf, blit_width, blit_height);
SDL_LockSurface(sourceSurface);
SDL_memcpy(sourceSurface->pixels, buf, blit_width * blit_height * sizeof(Uint32));
SDL_UnlockSurface(sourceSurface);
SDL_Rect dest_rect;
int location = (int)getRandomUint32();
dest_rect.x = location % (width - 15 - 1);
dest_rect.y = location % (height - 15 - 1);
SDL_BlitSurface(sourceSurface, NULL, dest_surface, &dest_rect);
}
// Check result
const Uint32 hash = hashSurfacePixels(dest_surface);
// Clean up
SDL_DestroySurface(dest_surface);
SDLTest_AssertCheck(hash == correct_hash,
"Should render identically, expected hash 0x%" SDL_PRIx32 ", got 0x%" SDL_PRIx32,
correct_hash, hash);
SDL_DestroySurface(sourceSurface);
SDL_free(buf);
return TEST_COMPLETED;
}
static const SDLTest_TestCaseReference blitTest1 = {
blit_testExampleApplicationRender, "blit_testExampleApplicationRender",
"Test example application render.", TEST_ENABLED
};
static const SDLTest_TestCaseReference blitTest2 = {
blit_testRandomToRandomSVGA, "blit_testRandomToRandomSVGA",
"Test SVGA noise render.", TEST_ENABLED
};
static const SDLTest_TestCaseReference blitTest3 = {
blit_testRandomToRandomSVGAMultipleIterations, "blit_testRandomToRandomSVGAMultipleIterations",
"Test SVGA noise render (250k iterations).", TEST_ENABLED
};
static const SDLTest_TestCaseReference *blitTests[] = {
&blitTest1, &blitTest2, &blitTest3, NULL
};
SDLTest_TestSuiteReference blitTestSuite = {
"Blending",
blitSetUp,
blitTests,
NULL
};

View File

@@ -0,0 +1,596 @@
/**
* New/updated tests: aschiffler at ferzkopp dot net
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_test.h>
#include "testautomation_suites.h"
/* ================= Test Case Implementation ================== */
static int clipboard_update_count;
static bool SDLCALL ClipboardEventWatch(void *userdata, SDL_Event *event)
{
if (event->type == SDL_EVENT_CLIPBOARD_UPDATE) {
++clipboard_update_count;
}
return true;
}
enum
{
TEST_MIME_TYPE_TEXT,
TEST_MIME_TYPE_CUSTOM_TEXT,
TEST_MIME_TYPE_DATA,
NUM_TEST_MIME_TYPES
};
static const char *test_mime_types[] = {
"text/plain;charset=utf-8",
"test/text",
"test/data"
};
SDL_COMPILE_TIME_ASSERT(test_mime_types, SDL_arraysize(test_mime_types) == NUM_TEST_MIME_TYPES);
typedef struct
{
const void *data;
size_t data_size;
} TestClipboardData;
static int clipboard_callback_count;
static const void * SDLCALL ClipboardDataCallback(void *userdata, const char *mime_type, size_t *length)
{
TestClipboardData *test_data = (TestClipboardData *)userdata;
++clipboard_callback_count;
if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_TEXT]) == 0) {
/* We're returning the string "TEST", with no termination */
static const char *test_text = "XXX TEST XXX";
*length = 4;
return test_text + 4;
}
if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]) == 0) {
/* We're returning the string "CUSTOM", with no termination */
static const char *custom_text = "XXX CUSTOM XXX";
*length = 6;
return custom_text + 4;
}
if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_DATA]) == 0) {
*length = test_data->data_size;
return test_data->data;
}
return NULL;
}
static int clipboard_cleanup_count;
static void SDLCALL ClipboardCleanupCallback(void *userdata)
{
++clipboard_cleanup_count;
}
/* Test case functions */
/**
* End-to-end test of SDL_xyzClipboardData functions
* \sa SDL_HasClipboardData
* \sa SDL_GetClipboardData
* \sa SDL_SetClipboardData
*/
static int SDLCALL clipboard_testClipboardDataFunctions(void *arg)
{
int result = -1;
bool boolResult;
int last_clipboard_update_count;
int last_clipboard_callback_count;
int last_clipboard_cleanup_count;
void *data;
size_t size;
char *text;
const char *expected_text;
TestClipboardData test_data1 = {
&test_data1,
sizeof(test_data1)
};
TestClipboardData test_data2 = {
&last_clipboard_callback_count,
sizeof(last_clipboard_callback_count)
};
SDL_AddEventWatch(ClipboardEventWatch, NULL);
/* Test clearing clipboard data */
result = SDL_ClearClipboardData();
SDLTest_AssertCheck(
result == true,
"Validate SDL_ClearClipboardData result, expected true, got %i",
result);
expected_text = "";
text = SDL_GetClipboardText();
SDLTest_AssertCheck(
text && SDL_strcmp(text, expected_text) == 0,
"Verify clipboard text, expected \"%s\", got \"%s\"",
expected_text, text);
SDL_free(text);
/* Test clearing clipboard data when it's already clear */
last_clipboard_update_count = clipboard_update_count;
result = SDL_ClearClipboardData();
SDLTest_AssertCheck(
result == true,
"Validate SDL_ClearClipboardData result, expected true, got %i",
result);
SDLTest_AssertCheck(
clipboard_update_count != last_clipboard_update_count,
"Verify clipboard update count changed, got %d",
clipboard_update_count - last_clipboard_update_count);
/* Validate error handling */
last_clipboard_update_count = clipboard_update_count;
result = SDL_SetClipboardData(NULL, NULL, NULL, test_mime_types, SDL_arraysize(test_mime_types));
SDLTest_AssertCheck(
result == false,
"Validate SDL_SetClipboardData(invalid) result, expected false, got %i",
result);
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count,
"Verify clipboard update count unchanged, got %d",
clipboard_update_count - last_clipboard_update_count);
last_clipboard_update_count = clipboard_update_count;
result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, NULL, NULL, 0);
SDLTest_AssertCheck(
result == false,
"Validate SDL_SetClipboardData(invalid) result, expected false, got %i",
result);
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count,
"Verify clipboard update count unchanged, got %d",
clipboard_update_count - last_clipboard_update_count);
/* Test setting and getting clipboard data */
last_clipboard_update_count = clipboard_update_count;
last_clipboard_callback_count = clipboard_callback_count;
last_clipboard_cleanup_count = clipboard_cleanup_count;
result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, &test_data1, test_mime_types, SDL_arraysize(test_mime_types));
SDLTest_AssertCheck(
result == true,
"Validate SDL_SetClipboardData(test_data1) result, expected true, got %i",
result);
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count + 1,
"Verify clipboard update count incremented by 1, got %d",
clipboard_update_count - last_clipboard_update_count);
SDLTest_AssertCheck(
clipboard_cleanup_count == last_clipboard_cleanup_count,
"Verify clipboard cleanup count unchanged, got %d",
clipboard_cleanup_count - last_clipboard_cleanup_count);
expected_text = "TEST";
text = SDL_GetClipboardText();
SDLTest_AssertCheck(
text && SDL_strcmp(text, expected_text) == 0,
"Verify clipboard text, expected \"%s\", got \"%s\"",
expected_text, text);
SDL_free(text);
boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]);
SDLTest_AssertCheck(
boolResult,
"Verify has test text data, expected true, got false");
text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT], &size);
SDLTest_AssertCheck(
text != NULL,
"Verify has test text data, expected valid result, got NULL");
if (text) {
SDLTest_AssertCheck(
text[size] == '\0',
"Verify test text data, expected null termination, got %c",
text[size]);
SDLTest_AssertCheck(
SDL_strcmp(text, expected_text) == 0,
"Verify test text data, expected \"%s\", got \"%s\"",
expected_text, text);
}
SDLTest_AssertCheck(
size == SDL_strlen(expected_text),
"Verify test text size, expected %d, got %d",
(int)SDL_strlen(expected_text), (int)size);
SDL_free(text);
expected_text = "CUSTOM";
boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]);
SDLTest_AssertCheck(
boolResult,
"Verify has test text data, expected true, got false");
text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT], &size);
SDLTest_AssertCheck(
text != NULL,
"Verify has test text data, expected valid result, got NULL");
if (text) {
SDLTest_AssertCheck(
text[size] == '\0',
"Verify test text data, expected null termination, got %c",
text[size]);
SDLTest_AssertCheck(
SDL_strcmp(text, expected_text) == 0,
"Verify test text data, expected \"%s\", got \"%s\"",
expected_text, text);
}
SDLTest_AssertCheck(
size == SDL_strlen(expected_text),
"Verify test text size, expected %d, got %d",
(int)SDL_strlen(expected_text), (int)size);
SDL_free(text);
boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_DATA]);
SDLTest_AssertCheck(
boolResult,
"Verify has test text data, expected true, got false");
data = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_DATA], &size);
SDLTest_AssertCheck(
data && SDL_memcmp(data, test_data1.data, test_data1.data_size) == 0,
"Verify test data");
SDLTest_AssertCheck(
size == test_data1.data_size,
"Verify test data size, expected %d, got %d",
(int)test_data1.data_size, (int)size);
SDL_free(data);
boolResult = SDL_HasClipboardData("test/invalid");
SDLTest_AssertCheck(
!boolResult,
"Verify has test text data, expected false, got true");
data = SDL_GetClipboardData("test/invalid", &size);
SDLTest_AssertCheck(
data == NULL,
"Verify invalid data, expected NULL, got %p",
data);
SDLTest_AssertCheck(
size == 0,
"Verify invalid data size, expected 0, got %d",
(int)size);
SDL_free(data);
#if 0 /* There's no guarantee how or when the callback is called */
SDLTest_AssertCheck(
(clipboard_callback_count == last_clipboard_callback_count + 3) ||
(clipboard_callback_count == last_clipboard_callback_count + 4),
"Verify clipboard callback count incremented by 3 or 4, got %d",
clipboard_callback_count - last_clipboard_callback_count);
#endif
/* Test setting and getting clipboard data again */
last_clipboard_update_count = clipboard_update_count;
last_clipboard_callback_count = clipboard_callback_count;
last_clipboard_cleanup_count = clipboard_cleanup_count;
result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, &test_data2, test_mime_types, SDL_arraysize(test_mime_types));
SDLTest_AssertCheck(
result == true,
"Validate SDL_SetClipboardData(test_data2) result, expected true, got %i",
result);
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count + 1,
"Verify clipboard update count incremented by 1, got %d",
clipboard_update_count - last_clipboard_update_count);
SDLTest_AssertCheck(
clipboard_cleanup_count == last_clipboard_cleanup_count + 1,
"Verify clipboard cleanup count incremented by 1, got %d",
clipboard_cleanup_count - last_clipboard_cleanup_count);
expected_text = "TEST";
text = SDL_GetClipboardText();
SDLTest_AssertCheck(
text && SDL_strcmp(text, expected_text) == 0,
"Verify clipboard text, expected \"%s\", got \"%s\"",
expected_text, text);
SDL_free(text);
boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]);
SDLTest_AssertCheck(
boolResult,
"Verify has test text data, expected true, got false");
text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT], &size);
SDLTest_AssertCheck(
text != NULL,
"Verify has test text data, expected valid result, got NULL");
if (text) {
SDLTest_AssertCheck(
text[size] == '\0',
"Verify test text data, expected null termination, got %c",
text[size]);
SDLTest_AssertCheck(
SDL_strcmp(text, expected_text) == 0,
"Verify test text data, expected \"%s\", got \"%s\"",
expected_text, text);
}
SDLTest_AssertCheck(
size == SDL_strlen(expected_text),
"Verify test text size, expected %d, got %d",
(int)SDL_strlen(expected_text), (int)size);
SDL_free(text);
expected_text = "CUSTOM";
boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]);
SDLTest_AssertCheck(
boolResult,
"Verify has test text data, expected true, got false");
text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT], &size);
SDLTest_AssertCheck(
text != NULL,
"Verify has test text data, expected valid result, got NULL");
if (text) {
SDLTest_AssertCheck(
text[size] == '\0',
"Verify test text data, expected null termination, got %c",
text[size]);
SDLTest_AssertCheck(
SDL_strcmp(text, expected_text) == 0,
"Verify test text data, expected \"%s\", got \"%s\"",
expected_text, text);
}
SDLTest_AssertCheck(
size == SDL_strlen(expected_text),
"Verify test text size, expected %d, got %d",
(int)SDL_strlen(expected_text), (int)size);
SDL_free(text);
data = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_DATA], &size);
SDLTest_AssertCheck(
data && SDL_memcmp(data, test_data2.data, test_data2.data_size) == 0,
"Verify test data");
SDLTest_AssertCheck(
size == test_data2.data_size,
"Verify test data size, expected %d, got %d",
(int)test_data2.data_size, (int)size);
SDL_free(data);
data = SDL_GetClipboardData("test/invalid", &size);
SDLTest_AssertCheck(
data == NULL,
"Verify invalid data, expected NULL, got %p",
data);
SDLTest_AssertCheck(
size == 0,
"Verify invalid data size, expected 0, got %d",
(int)size);
SDL_free(data);
#if 0 /* There's no guarantee how or when the callback is called */
SDLTest_AssertCheck(
(clipboard_callback_count == last_clipboard_callback_count + 3) ||
(clipboard_callback_count == last_clipboard_callback_count + 4),
"Verify clipboard callback count incremented by 3 or 4, got %d",
clipboard_callback_count - last_clipboard_callback_count);
#endif
/* Test clearing clipboard data when has data */
last_clipboard_update_count = clipboard_update_count;
last_clipboard_cleanup_count = clipboard_cleanup_count;
result = SDL_ClearClipboardData();
SDLTest_AssertCheck(
result == true,
"Validate SDL_ClearClipboardData result, expected true, got %i",
result);
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count + 1,
"Verify clipboard update count incremented by 1, got %d",
clipboard_update_count - last_clipboard_update_count);
SDLTest_AssertCheck(
clipboard_cleanup_count == last_clipboard_cleanup_count + 1,
"Verify clipboard cleanup count incremented by 1, got %d",
clipboard_cleanup_count - last_clipboard_cleanup_count);
boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]);
SDLTest_AssertCheck(
!boolResult,
"Verify has test text data, expected false, got true");
boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_DATA]);
SDLTest_AssertCheck(
!boolResult,
"Verify has test text data, expected false, got true");
boolResult = SDL_HasClipboardData("test/invalid");
SDLTest_AssertCheck(
!boolResult,
"Verify has test text data, expected false, got true");
SDL_RemoveEventWatch(ClipboardEventWatch, NULL);
return TEST_COMPLETED;
}
/**
* End-to-end test of SDL_xyzClipboardText functions
* \sa SDL_HasClipboardText
* \sa SDL_GetClipboardText
* \sa SDL_SetClipboardText
*/
static int SDLCALL clipboard_testClipboardTextFunctions(void *arg)
{
char *textRef = SDLTest_RandomAsciiString();
char *text = SDL_strdup(textRef);
bool boolResult;
int intResult;
char *charResult;
int last_clipboard_update_count;
SDL_AddEventWatch(ClipboardEventWatch, NULL);
/* Empty clipboard text */
last_clipboard_update_count = clipboard_update_count;
intResult = SDL_SetClipboardText(NULL);
SDLTest_AssertCheck(
intResult == true,
"Verify result from SDL_SetClipboardText(NULL), expected true, got %i",
intResult);
charResult = SDL_GetClipboardText();
SDLTest_AssertCheck(
charResult && SDL_strcmp(charResult, "") == 0,
"Verify SDL_GetClipboardText returned \"\", got %s",
charResult);
SDL_free(charResult);
boolResult = SDL_HasClipboardText();
SDLTest_AssertCheck(
boolResult == false,
"Verify SDL_HasClipboardText returned false, got %s",
(boolResult) ? "true" : "false");
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count + 1,
"Verify clipboard update count incremented by 1, got %d",
clipboard_update_count - last_clipboard_update_count);
/* Set clipboard text */
last_clipboard_update_count = clipboard_update_count;
intResult = SDL_SetClipboardText(text);
SDLTest_AssertCheck(
intResult == true,
"Verify result from SDL_SetClipboardText(%s), expected true, got %i", text,
intResult);
SDLTest_AssertCheck(
SDL_strcmp(textRef, text) == 0,
"Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'",
textRef, text);
boolResult = SDL_HasClipboardText();
SDLTest_AssertCheck(
boolResult == true,
"Verify SDL_HasClipboardText returned true, got %s",
(boolResult) ? "true" : "false");
charResult = SDL_GetClipboardText();
SDLTest_AssertCheck(
charResult && SDL_strcmp(textRef, charResult) == 0,
"Verify SDL_GetClipboardText returned correct string, expected '%s', got '%s'",
textRef, charResult);
SDL_free(charResult);
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count + 1,
"Verify clipboard update count incremented by 1, got %d",
clipboard_update_count - last_clipboard_update_count);
/* Reset clipboard text */
intResult = SDL_SetClipboardText(NULL);
SDLTest_AssertCheck(
intResult == true,
"Verify result from SDL_SetClipboardText(NULL), expected true, got %i",
intResult);
/* Cleanup */
SDL_free(textRef);
SDL_free(text);
SDL_RemoveEventWatch(ClipboardEventWatch, NULL);
return TEST_COMPLETED;
}
/**
* End-to-end test of SDL_xyzPrimarySelectionText functions
* \sa SDL_HasPrimarySelectionText
* \sa SDL_GetPrimarySelectionText
* \sa SDL_SetPrimarySelectionText
*/
static int SDLCALL clipboard_testPrimarySelectionTextFunctions(void *arg)
{
char *textRef = SDLTest_RandomAsciiString();
char *text = SDL_strdup(textRef);
bool boolResult;
int intResult;
char *charResult;
int last_clipboard_update_count;
SDL_AddEventWatch(ClipboardEventWatch, NULL);
/* Empty primary selection */
last_clipboard_update_count = clipboard_update_count;
intResult = SDL_SetPrimarySelectionText(NULL);
SDLTest_AssertCheck(
intResult == true,
"Verify result from SDL_SetPrimarySelectionText(NULL), expected true, got %i",
intResult);
charResult = SDL_GetPrimarySelectionText();
SDLTest_AssertCheck(
charResult && SDL_strcmp(charResult, "") == 0,
"Verify SDL_GetPrimarySelectionText returned \"\", got %s",
charResult);
SDL_free(charResult);
boolResult = SDL_HasPrimarySelectionText();
SDLTest_AssertCheck(
boolResult == false,
"Verify SDL_HasPrimarySelectionText returned false, got %s",
(boolResult) ? "true" : "false");
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count + 1,
"Verify clipboard update count incremented by 1, got %d",
clipboard_update_count - last_clipboard_update_count);
/* Set primary selection */
last_clipboard_update_count = clipboard_update_count;
intResult = SDL_SetPrimarySelectionText(text);
SDLTest_AssertCheck(
intResult == true,
"Verify result from SDL_SetPrimarySelectionText(%s), expected true, got %i", text,
intResult);
SDLTest_AssertCheck(
SDL_strcmp(textRef, text) == 0,
"Verify SDL_SetPrimarySelectionText did not modify input string, expected '%s', got '%s'",
textRef, text);
boolResult = SDL_HasPrimarySelectionText();
SDLTest_AssertCheck(
boolResult == true,
"Verify SDL_HasPrimarySelectionText returned true, got %s",
(boolResult) ? "true" : "false");
charResult = SDL_GetPrimarySelectionText();
SDLTest_AssertCheck(
charResult && SDL_strcmp(textRef, charResult) == 0,
"Verify SDL_GetPrimarySelectionText returned correct string, expected '%s', got '%s'",
textRef, charResult);
SDL_free(charResult);
SDLTest_AssertCheck(
clipboard_update_count == last_clipboard_update_count + 1,
"Verify clipboard update count incremented by 1, got %d",
clipboard_update_count - last_clipboard_update_count);
/* Reset primary selection */
intResult = SDL_SetPrimarySelectionText(NULL);
SDLTest_AssertCheck(
intResult == true,
"Verify result from SDL_SetPrimarySelectionText(NULL), expected true, got %i",
intResult);
/* Cleanup */
SDL_free(textRef);
SDL_free(text);
SDL_RemoveEventWatch(ClipboardEventWatch, NULL);
return TEST_COMPLETED;
}
/* ================= Test References ================== */
static const SDLTest_TestCaseReference clipboardTest1 = {
clipboard_testClipboardDataFunctions, "clipboard_testClipboardDataFunctions", "End-to-end test of SDL_xyzClipboardData functions", TEST_ENABLED
};
static const SDLTest_TestCaseReference clipboardTest2 = {
clipboard_testClipboardTextFunctions, "clipboard_testClipboardTextFunctions", "End-to-end test of SDL_xyzClipboardText functions", TEST_ENABLED
};
static const SDLTest_TestCaseReference clipboardTest3 = {
clipboard_testPrimarySelectionTextFunctions, "clipboard_testPrimarySelectionTextFunctions", "End-to-end test of SDL_xyzPrimarySelectionText functions", TEST_ENABLED
};
/* Sequence of Clipboard test cases */
static const SDLTest_TestCaseReference *clipboardTests[] = {
&clipboardTest1, &clipboardTest2, &clipboardTest3, NULL
};
/* Clipboard test suite (global) */
SDLTest_TestSuiteReference clipboardTestSuite = {
"Clipboard",
NULL,
clipboardTests,
NULL
};

View File

@@ -0,0 +1,341 @@
/**
* Events test suite
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_test.h>
#include "testautomation_suites.h"
/* ================= Test Case Implementation ================== */
/* Test case functions */
/* Flag indicating if the userdata should be checked */
static int g_userdataCheck = 0;
/* Userdata value to check */
static int g_userdataValue = 0;
/* Flag indicating that the filter was called */
static int g_eventFilterCalled = 0;
/* Userdata values for event */
static int g_userdataValue1 = 1;
static int g_userdataValue2 = 2;
#define MAX_ITERATIONS 100
/* Event filter that sets some flags and optionally checks userdata */
static bool SDLCALL events_sampleNullEventFilter(void *userdata, SDL_Event *event)
{
g_eventFilterCalled = 1;
if (g_userdataCheck != 0) {
SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s", (userdata != NULL) ? "non-NULL" : "NULL");
if (userdata != NULL) {
SDLTest_AssertCheck(*(int *)userdata == g_userdataValue, "Check userdata value, expected: %i, got: %i", g_userdataValue, *(int *)userdata);
}
}
return true;
}
/**
* Test pumping and peeking events.
*
* \sa SDL_PumpEvents
* \sa SDL_PollEvent
*/
static int SDLCALL events_pushPumpAndPollUserevent(void *arg)
{
SDL_Event event_in;
SDL_Event event_out;
int result;
int i;
Sint32 ref_code = SDLTest_RandomSint32();
SDL_Window *event_window;
/* Flush all events */
SDL_FlushEvents(SDL_EVENT_FIRST, SDL_EVENT_LAST);
SDLTest_AssertCheck(!SDL_HasEvents(SDL_EVENT_USER, SDL_EVENT_USER), "Check SDL_HasEvents returns false");
/* Create user event */
event_in.type = SDL_EVENT_USER;
event_in.user.windowID = 0;
event_in.common.timestamp = 0;
event_in.user.code = ref_code;
event_in.user.data1 = (void *)&g_userdataValue1;
event_in.user.data2 = (void *)&g_userdataValue2;
/* Push a user event onto the queue and force queue update */
SDL_PushEvent(&event_in);
SDLTest_AssertPass("Call to SDL_PushEvent()");
SDL_PumpEvents();
SDLTest_AssertPass("Call to SDL_PumpEvents()");
SDLTest_AssertCheck(SDL_HasEvents(SDL_EVENT_USER, SDL_EVENT_USER), "Check SDL_HasEvents returns true");
/* Poll until we get a user event. */
for (i = 0; i < MAX_ITERATIONS; i++) {
result = SDL_PollEvent(&event_out);
SDLTest_AssertPass("Call to SDL_PollEvent()");
SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d", result);
if (!result) {
break;
}
if (event_out.type == SDL_EVENT_USER) {
break;
}
}
SDLTest_AssertCheck(i < MAX_ITERATIONS, "Check the user event is seen in less then %d polls, got %d poll", MAX_ITERATIONS, i + 1);
SDLTest_AssertCheck(SDL_EVENT_USER == event_out.type, "Check event type is SDL_EVENT_USER, expected: 0x%x, got: 0x%" SDL_PRIx32, SDL_EVENT_USER, event_out.type);
SDLTest_AssertCheck(ref_code == event_out.user.code, "Check SDL_Event.user.code, expected: 0x%" SDL_PRIx32 ", got: 0x%" SDL_PRIx32 , ref_code, event_out.user.code);
SDLTest_AssertCheck(0 == event_out.user.windowID, "Check SDL_Event.user.windowID, expected: NULL , got: %" SDL_PRIu32, event_out.user.windowID);
SDLTest_AssertCheck((void *)&g_userdataValue1 == event_out.user.data1, "Check SDL_Event.user.data1, expected: %p, got: %p", &g_userdataValue1, event_out.user.data1);
SDLTest_AssertCheck((void *)&g_userdataValue2 == event_out.user.data2, "Check SDL_Event.user.data2, expected: %p, got: %p", &g_userdataValue2, event_out.user.data2);
event_window = SDL_GetWindowFromEvent(&event_out);
SDLTest_AssertCheck(NULL == SDL_GetWindowFromEvent(&event_out), "Check SDL_GetWindowFromEvent returns the window id from a user event, expected: NULL, got: %p", event_window);
/* Need to finish getting all events and sentinel, otherwise other tests that rely on event are in bad state */
SDL_FlushEvents(SDL_EVENT_FIRST, SDL_EVENT_LAST);
return TEST_COMPLETED;
}
/**
* Adds and deletes an event watch function with NULL userdata
*
* \sa SDL_AddEventWatch
* \sa SDL_RemoveEventWatch
*
*/
static int SDLCALL events_addDelEventWatch(void *arg)
{
SDL_Event event;
/* Create user event */
event.type = SDL_EVENT_USER;
event.common.timestamp = 0;
event.user.code = SDLTest_RandomSint32();
event.user.data1 = (void *)&g_userdataValue1;
event.user.data2 = (void *)&g_userdataValue2;
/* Disable userdata check */
g_userdataCheck = 0;
/* Reset event filter call tracker */
g_eventFilterCalled = 0;
/* Add watch */
SDL_AddEventWatch(events_sampleNullEventFilter, NULL);
SDLTest_AssertPass("Call to SDL_AddEventWatch()");
/* Push a user event onto the queue and force queue update */
SDL_PushEvent(&event);
SDLTest_AssertPass("Call to SDL_PushEvent()");
SDL_PumpEvents();
SDLTest_AssertPass("Call to SDL_PumpEvents()");
SDLTest_AssertCheck(g_eventFilterCalled == 1, "Check that event filter was called");
/* Delete watch */
SDL_RemoveEventWatch(events_sampleNullEventFilter, NULL);
SDLTest_AssertPass("Call to SDL_RemoveEventWatch()");
/* Push a user event onto the queue and force queue update */
g_eventFilterCalled = 0;
SDL_PushEvent(&event);
SDLTest_AssertPass("Call to SDL_PushEvent()");
SDL_PumpEvents();
SDLTest_AssertPass("Call to SDL_PumpEvents()");
SDLTest_AssertCheck(g_eventFilterCalled == 0, "Check that event filter was NOT called");
return TEST_COMPLETED;
}
/**
* Adds and deletes an event watch function with userdata
*
* \sa SDL_AddEventWatch
* \sa SDL_RemoveEventWatch
*
*/
static int SDLCALL events_addDelEventWatchWithUserdata(void *arg)
{
SDL_Event event;
/* Create user event */
event.type = SDL_EVENT_USER;
event.common.timestamp = 0;
event.user.code = SDLTest_RandomSint32();
event.user.data1 = (void *)&g_userdataValue1;
event.user.data2 = (void *)&g_userdataValue2;
/* Enable userdata check and set a value to check */
g_userdataCheck = 1;
g_userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024);
/* Reset event filter call tracker */
g_eventFilterCalled = 0;
/* Add watch */
SDL_AddEventWatch(events_sampleNullEventFilter, (void *)&g_userdataValue);
SDLTest_AssertPass("Call to SDL_AddEventWatch()");
/* Push a user event onto the queue and force queue update */
SDL_PushEvent(&event);
SDLTest_AssertPass("Call to SDL_PushEvent()");
SDL_PumpEvents();
SDLTest_AssertPass("Call to SDL_PumpEvents()");
SDLTest_AssertCheck(g_eventFilterCalled == 1, "Check that event filter was called");
/* Delete watch */
SDL_RemoveEventWatch(events_sampleNullEventFilter, (void *)&g_userdataValue);
SDLTest_AssertPass("Call to SDL_RemoveEventWatch()");
/* Push a user event onto the queue and force queue update */
g_eventFilterCalled = 0;
SDL_PushEvent(&event);
SDLTest_AssertPass("Call to SDL_PushEvent()");
SDL_PumpEvents();
SDLTest_AssertPass("Call to SDL_PumpEvents()");
SDLTest_AssertCheck(g_eventFilterCalled == 0, "Check that event filter was NOT called");
return TEST_COMPLETED;
}
/**
* Runs callbacks on the main thread.
*
* \sa SDL_IsMainThread
* \sa SDL_RunOnMainThread
*
*/
typedef struct IncrementCounterData_t
{
Uint32 delay;
int counter;
} IncrementCounterData_t;
static void SDLCALL IncrementCounter(void *userdata)
{
IncrementCounterData_t *data = (IncrementCounterData_t *)userdata;
++data->counter;
}
#ifndef SDL_PLATFORM_EMSCRIPTEN /* Emscripten doesn't have threads */
static int SDLCALL IncrementCounterThread(void *userdata)
{
IncrementCounterData_t *data = (IncrementCounterData_t *)userdata;
SDL_Event event;
SDL_assert(!SDL_IsMainThread());
if (data->delay > 0) {
SDL_Delay(data->delay);
}
if (!SDL_RunOnMainThread(IncrementCounter, userdata, false)) {
SDLTest_LogError("Couldn't run IncrementCounter asynchronously on main thread: %s", SDL_GetError());
}
if (!SDL_RunOnMainThread(IncrementCounter, userdata, true)) {
SDLTest_LogError("Couldn't run IncrementCounter synchronously on main thread: %s", SDL_GetError());
}
/* Send an event to unblock the main thread, which is waiting in SDL_WaitEvent() */
event.type = SDL_EVENT_USER;
SDL_PushEvent(&event);
return 0;
}
#endif /* !SDL_PLATFORM_EMSCRIPTEN */
static int SDLCALL events_mainThreadCallbacks(void *arg)
{
IncrementCounterData_t data = { 0, 0 };
/* Make sure we're on the main thread */
SDLTest_AssertCheck(SDL_IsMainThread(), "Verify we're on the main thread");
SDL_RunOnMainThread(IncrementCounter, &data, true);
SDLTest_AssertCheck(data.counter == 1, "Incremented counter on main thread, expected 1, got %d", data.counter);
#ifndef SDL_PLATFORM_EMSCRIPTEN /* Emscripten doesn't have threads */
{
SDL_Window *window;
SDL_Thread *thread;
SDL_Event event;
window = SDL_CreateWindow("test", 0, 0, SDL_WINDOW_HIDDEN);
SDLTest_AssertCheck(window != NULL, "Create window, expected non-NULL, got %p", window);
/* Flush any pending events */
SDL_PumpEvents();
SDL_FlushEvents(SDL_EVENT_FIRST, SDL_EVENT_LAST);
/* Increment the counter on a thread, waiting for both calls to be queued */
thread = SDL_CreateThread(IncrementCounterThread, NULL, &data);
SDLTest_AssertCheck(thread != NULL, "Create counter thread");
/* Wait for both increment calls to be queued up */
SDL_Delay(100);
/* Run the main callbacks */
SDL_WaitEvent(&event);
SDLTest_AssertCheck(event.type == SDL_EVENT_USER, "Expected user event (0x%.4x), got 0x%.4x", SDL_EVENT_USER, (int)event.type);
SDL_WaitThread(thread, NULL);
SDLTest_AssertCheck(data.counter == 3, "Incremented counter on main thread, expected 3, got %d", data.counter);
/* Try again, but this time delay the calls until we've started waiting for events */
data.delay = 100;
thread = SDL_CreateThread(IncrementCounterThread, NULL, &data);
SDLTest_AssertCheck(thread != NULL, "Create counter thread");
/* Run the main callbacks */
SDL_WaitEvent(&event);
SDLTest_AssertCheck(event.type == SDL_EVENT_USER, "Expected user event (0x%.4x), got 0x%.4x", SDL_EVENT_USER, (int)event.type);
SDL_WaitThread(thread, NULL);
SDLTest_AssertCheck(data.counter == 5, "Incremented counter on main thread, expected 5, got %d", data.counter);
SDL_DestroyWindow(window);
}
#endif /* !SDL_PLATFORM_EMSCRIPTEN */
return TEST_COMPLETED;
}
/* ================= Test References ================== */
/* Events test cases */
static const SDLTest_TestCaseReference eventsTest_pushPumpAndPollUserevent = {
events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent", "Pushes, pumps and polls a user event", TEST_ENABLED
};
static const SDLTest_TestCaseReference eventsTest_addDelEventWatch = {
events_addDelEventWatch, "events_addDelEventWatch", "Adds and deletes an event watch function with NULL userdata", TEST_ENABLED
};
static const SDLTest_TestCaseReference eventsTest_addDelEventWatchWithUserdata = {
events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata", "Adds and deletes an event watch function with userdata", TEST_ENABLED
};
static const SDLTest_TestCaseReference eventsTest_mainThreadCallbacks = {
events_mainThreadCallbacks, "events_mainThreadCallbacks", "Run callbacks on the main thread", TEST_ENABLED
};
/* Sequence of Events test cases */
static const SDLTest_TestCaseReference *eventsTests[] = {
&eventsTest_pushPumpAndPollUserevent,
&eventsTest_addDelEventWatch,
&eventsTest_addDelEventWatchWithUserdata,
&eventsTest_mainThreadCallbacks,
NULL
};
/* Events test suite (global) */
SDLTest_TestSuiteReference eventsTestSuite = {
"Events",
NULL,
eventsTests,
NULL
};

View File

@@ -0,0 +1,146 @@
/**
* GUID test suite
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_test.h>
#include "testautomation_suites.h"
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
/* ================= Test Case Implementation ================== */
/* Helper functions */
#define NUM_TEST_GUIDS 5
#ifndef UINT64_C
#ifdef _MSC_VER
#define UINT64_C(x) x##ui64
#elif defined(_LP64)
#define UINT64_C(x) x##UL
#else
#define UINT64_C(x) x##ULL
#endif
#endif
static struct
{
char *str;
Uint64 upper, lower;
} test_guids[NUM_TEST_GUIDS] = {
{ "0000000000000000"
"ffffffffffffffff",
UINT64_C(0x0000000000000000), UINT64_C(0xffffffffffffffff) },
{ "0011223344556677"
"8091a2b3c4d5e6f0",
UINT64_C(0x0011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) },
{ "a011223344556677"
"8091a2b3c4d5e6f0",
UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f0) },
{ "a011223344556677"
"8091a2b3c4d5e6f1",
UINT64_C(0xa011223344556677), UINT64_C(0x8091a2b3c4d5e6f1) },
{ "a011223344556677"
"8191a2b3c4d5e6f0",
UINT64_C(0xa011223344556677), UINT64_C(0x8191a2b3c4d5e6f0) },
};
static void
upper_lower_to_bytestring(Uint8 *out, Uint64 upper, Uint64 lower)
{
Uint64 values[2];
int i, k;
values[0] = upper;
values[1] = lower;
for (i = 0; i < 2; ++i) {
Uint64 v = values[i];
for (k = 0; k < 8; ++k) {
*out++ = v >> 56;
v <<= 8;
}
}
}
/* Test case functions */
/**
* Check String-to-GUID conversion
*
* \sa SDL_StringToGUID
*/
static int SDLCALL
TestStringToGUID(void *arg)
{
int i;
SDLTest_AssertPass("Call to SDL_StringToGUID");
for (i = 0; i < NUM_TEST_GUIDS; ++i) {
Uint8 expected[16];
SDL_GUID guid;
upper_lower_to_bytestring(expected,
test_guids[i].upper, test_guids[i].lower);
guid = SDL_StringToGUID(test_guids[i].str);
SDLTest_AssertCheck(SDL_memcmp(expected, guid.data, 16) == 0, "GUID from string, GUID was: '%s'", test_guids[i].str);
}
return TEST_COMPLETED;
}
/**
* Check GUID-to-String conversion
*
* \sa SDL_GUIDToString
*/
static int SDLCALL
TestGUIDToString(void *arg)
{
int i;
SDLTest_AssertPass("Call to SDL_GUIDToString");
for (i = 0; i < NUM_TEST_GUIDS; ++i) {
char guid_str[33];
SDL_GUID guid;
upper_lower_to_bytestring(guid.data,
test_guids[i].upper, test_guids[i].lower);
SDL_GUIDToString(guid, guid_str, sizeof(guid_str));
SDLTest_AssertCheck(SDL_strcmp(guid_str, test_guids[i].str) == 0, "Checking whether strings match, expected %s, got %s\n", test_guids[i].str, guid_str);
}
return TEST_COMPLETED;
}
/* ================= Test References ================== */
/* GUID routine test cases */
static const SDLTest_TestCaseReference guidTest1 = {
TestStringToGUID, "TestStringToGUID", "Call to SDL_StringToGUID", TEST_ENABLED
};
static const SDLTest_TestCaseReference guidTest2 = {
TestGUIDToString, "TestGUIDToString", "Call to SDL_GUIDToString", TEST_ENABLED
};
/* Sequence of GUID routine test cases */
static const SDLTest_TestCaseReference *guidTests[] = {
&guidTest1,
&guidTest2,
NULL
};
/* GUID routine test suite (global) */
SDLTest_TestSuiteReference guidTestSuite = {
"GUID",
NULL,
guidTests,
NULL
};

View File

@@ -0,0 +1,248 @@
/**
* Hints test suite
*/
#include <SDL3/SDL.h>
#include <SDL3/SDL_test.h>
#include "testautomation_suites.h"
static const char *HintsEnum[] = {
SDL_HINT_FRAMEBUFFER_ACCELERATION,
SDL_HINT_GAMECONTROLLERCONFIG,
SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS,
SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK,
SDL_HINT_ORIENTATIONS,
SDL_HINT_RENDER_DIRECT3D_THREADSAFE,
SDL_HINT_RENDER_VSYNC,
SDL_HINT_TIMER_RESOLUTION,
SDL_HINT_VIDEO_ALLOW_SCREENSAVER,
SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES,
SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS,
SDL_HINT_VIDEO_WIN_D3DCOMPILER,
SDL_HINT_VIDEO_X11_XRANDR,
SDL_HINT_XINPUT_ENABLED,
};
static const char *HintsVerbose[] = {
"SDL_FRAMEBUFFER_ACCELERATION",
"SDL_GAMECONTROLLERCONFIG",
"SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS",
"SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK",
"SDL_ORIENTATIONS",
"SDL_RENDER_DIRECT3D_THREADSAFE",
"SDL_RENDER_VSYNC",
"SDL_TIMER_RESOLUTION",
"SDL_VIDEO_ALLOW_SCREENSAVER",
"SDL_VIDEO_MAC_FULLSCREEN_SPACES",
"SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS",
"SDL_VIDEO_WIN_D3DCOMPILER",
"SDL_VIDEO_X11_XRANDR",
"SDL_XINPUT_ENABLED"
};
SDL_COMPILE_TIME_ASSERT(HintsEnum, SDL_arraysize(HintsEnum) == SDL_arraysize(HintsVerbose));
static const int numHintsEnum = SDL_arraysize(HintsEnum);
/* Test case functions */
/**
* Call to SDL_GetHint
*/
static int SDLCALL hints_getHint(void *arg)
{
const char *result1;
const char *result2;
int i;
for (i = 0; i < numHintsEnum; i++) {
result1 = SDL_GetHint(HintsEnum[i]);
SDLTest_AssertPass("Call to SDL_GetHint(%s) - using define definition", (char *)HintsEnum[i]);
result2 = SDL_GetHint(HintsVerbose[i]);
SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char *)HintsVerbose[i]);
SDLTest_AssertCheck(
(result1 == NULL && result2 == NULL) || (SDL_strcmp(result1, result2) == 0),
"Verify returned values are equal; got: result1='%s' result2='%s",
(result1 == NULL) ? "null" : result1,
(result2 == NULL) ? "null" : result2);
}
return TEST_COMPLETED;
}
static void SDLCALL hints_testHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{
*(char **)userdata = hint ? SDL_strdup(hint) : NULL;
}
/**
* Call to SDL_SetHint
*/
static int SDLCALL hints_setHint(void *arg)
{
const char *testHint = "SDL_AUTOMATED_TEST_HINT";
const char *originalValue;
char *value;
const char *testValue;
char *callbackValue;
bool result;
int i, j;
/* Create random values to set */
value = SDLTest_RandomAsciiStringOfSize(10);
for (i = 0; i < numHintsEnum; i++) {
/* Capture current value */
originalValue = SDL_GetHint(HintsEnum[i]);
SDLTest_AssertPass("Call to SDL_GetHint(%s)", HintsEnum[i]);
/* Copy the original value, since it will be freed when we set it again */
originalValue = originalValue ? SDL_strdup(originalValue) : NULL;
/* Set value (twice) */
for (j = 1; j <= 2; j++) {
result = SDL_SetHint(HintsEnum[i], value);
SDLTest_AssertPass("Call to SDL_SetHint(%s, %s) (iteration %i)", HintsEnum[i], value, j);
SDLTest_AssertCheck(
result == true || result == false,
"Verify valid result was returned, got: %i",
(int)result);
testValue = SDL_GetHint(HintsEnum[i]);
SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", HintsVerbose[i]);
SDLTest_AssertCheck(
(SDL_strcmp(value, testValue) == 0),
"Verify returned value equals set value; got: testValue='%s' value='%s",
(testValue == NULL) ? "null" : testValue,
value);
}
/* Reset original value */
result = SDL_SetHint(HintsEnum[i], originalValue);
SDLTest_AssertPass("Call to SDL_SetHint(%s, originalValue)", HintsEnum[i]);
SDLTest_AssertCheck(
result == true || result == false,
"Verify valid result was returned, got: %i",
(int)result);
SDL_free((void *)originalValue);
}
SDL_free(value);
/* Set default value in environment */
SDL_SetEnvironmentVariable(SDL_GetEnvironment(), testHint, "original", 1);
SDLTest_AssertPass("Call to SDL_GetHint() after saving and restoring hint");
originalValue = SDL_GetHint(testHint);
value = (originalValue == NULL) ? NULL : SDL_strdup(originalValue);
SDL_SetHint(testHint, "temp");
SDL_SetHint(testHint, value);
SDL_free(value);
testValue = SDL_GetHint(testHint);
SDLTest_AssertCheck(
testValue && SDL_strcmp(testValue, "original") == 0,
"testValue = %s, expected \"original\"",
testValue);
SDLTest_AssertPass("Call to SDL_SetHintWithPriority(NULL, SDL_HINT_DEFAULT)");
SDL_SetHintWithPriority(testHint, NULL, SDL_HINT_DEFAULT);
testValue = SDL_GetHint(testHint);
SDLTest_AssertCheck(
testValue && SDL_strcmp(testValue, "original") == 0,
"testValue = %s, expected \"original\"",
testValue);
SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE)");
SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE);
testValue = SDL_GetHint(testHint);
SDLTest_AssertCheck(
testValue && SDL_strcmp(testValue, "temp") == 0,
"testValue = %s, expected \"temp\"",
testValue);
SDLTest_AssertPass("Call to SDL_SetHintWithPriority(NULL, SDL_HINT_OVERRIDE)");
SDL_SetHintWithPriority(testHint, NULL, SDL_HINT_OVERRIDE);
testValue = SDL_GetHint(testHint);
SDLTest_AssertCheck(
testValue == NULL,
"testValue = %s, expected NULL",
testValue);
SDLTest_AssertPass("Call to SDL_ResetHint()");
SDL_ResetHint(testHint);
testValue = SDL_GetHint(testHint);
SDLTest_AssertCheck(
testValue && SDL_strcmp(testValue, "original") == 0,
"testValue = %s, expected \"original\"",
testValue);
/* Make sure callback functionality works past a reset */
SDLTest_AssertPass("Call to SDL_AddHintCallback()");
callbackValue = NULL;
SDL_AddHintCallback(testHint, hints_testHintChanged, &callbackValue);
SDLTest_AssertCheck(
callbackValue && SDL_strcmp(callbackValue, "original") == 0,
"callbackValue = %s, expected \"original\"",
callbackValue);
SDL_free(callbackValue);
SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE), using callback");
callbackValue = NULL;
SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE);
SDLTest_AssertCheck(
callbackValue && SDL_strcmp(callbackValue, "temp") == 0,
"callbackValue = %s, expected \"temp\"",
callbackValue);
SDL_free(callbackValue);
SDLTest_AssertPass("Call to SDL_ResetHint(), using callback");
callbackValue = NULL;
SDL_ResetHint(testHint);
SDLTest_AssertCheck(
callbackValue && SDL_strcmp(callbackValue, "original") == 0,
"callbackValue = %s, expected \"original\"",
callbackValue);
SDL_free(callbackValue);
SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE), using callback after reset");
callbackValue = NULL;
SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE);
SDLTest_AssertCheck(
callbackValue && SDL_strcmp(callbackValue, "temp") == 0,
"callbackValue = %s, expected \"temp\"",
callbackValue);
SDL_free(callbackValue);
SDLTest_AssertPass("Call to SDL_ResetHint(), after clearing callback");
callbackValue = NULL;
SDL_RemoveHintCallback(testHint, hints_testHintChanged, &callbackValue);
SDL_ResetHint(testHint);
SDLTest_AssertCheck(
callbackValue == NULL,
"callbackValue = %s, expected \"(null)\"",
callbackValue);
return TEST_COMPLETED;
}
/* ================= Test References ================== */
/* Hints test cases */
static const SDLTest_TestCaseReference hintsTest1 = {
hints_getHint, "hints_getHint", "Call to SDL_GetHint", TEST_ENABLED
};
static const SDLTest_TestCaseReference hintsTest2 = {
hints_setHint, "hints_setHint", "Call to SDL_SetHint", TEST_ENABLED
};
/* Sequence of Hints test cases */
static const SDLTest_TestCaseReference *hintsTests[] = {
&hintsTest1, &hintsTest2, NULL
};
/* Hints test suite (global) */
SDLTest_TestSuiteReference hintsTestSuite = {
"Hints",
NULL,
hintsTests,
NULL
};

Some files were not shown because too many files have changed in this diff Show More