From b2859af6dffed1aacca3a0822e2d27c247442779 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 7 Dec 2017 16:08:09 -0800 Subject: [PATCH] Enable building the Metal renderer by default, and weak link the Metal framework so the SDL library is safe to use on older Macs Also generate iOS versions of the Metal shaders --- Xcode/SDL/SDL.xcodeproj/project.pbxproj | 78 ++- configure | 47 +- configure.in | 8 +- src/render/metal/SDL_render_metal.m | 42 +- src/render/metal/SDL_shaders_metal.c | 796 ------------------------ src/render/metal/build-metal-shaders.sh | 19 +- 6 files changed, 142 insertions(+), 848 deletions(-) delete mode 100644 src/render/metal/SDL_shaders_metal.c mode change 100644 => 100755 src/render/metal/build-metal-shaders.sh diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj index d2ffee89d9c84..cc36053a5bd37 100755 --- a/Xcode/SDL/SDL.xcodeproj/project.pbxproj +++ b/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -596,6 +596,21 @@ AAC07107195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; AADA5B8716CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; }; AADA5B8816CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AADC5A431FDA035D00960936 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */; }; + AADC5A441FDA035D00960936 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = AADC5A421FDA035D00960936 /* SDL_render_metal.m */; }; + AADC5A451FDA047900960936 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = AADC5A421FDA035D00960936 /* SDL_render_metal.m */; }; + AADC5A461FDA047B00960936 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */; }; + AADC5A471FDA047E00960936 /* SDL_shaders_metal_osx.h in Headers */ = {isa = PBXBuildFile; fileRef = AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */; }; + AADC5A481FDA048100960936 /* SDL_render_metal.m in Sources */ = {isa = PBXBuildFile; fileRef = AADC5A421FDA035D00960936 /* SDL_render_metal.m */; }; + AADC5A491FDA05C100960936 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F0F1FB0206300FED37F /* yuv_rgb.h */; }; + AADC5A4A1FDA05C200960936 /* yuv_rgb.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F0F1FB0206300FED37F /* yuv_rgb.h */; }; + AADC5A4B1FDA05CF00960936 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F141FB0209C00FED37F /* SDL_yuv_c.h */; }; + AADC5A4C1FDA05CF00960936 /* SDL_yuv_c.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9A7F141FB0209C00FED37F /* SDL_yuv_c.h */; }; + AADC5A4D1FDA05D300960936 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D16644C1EDD6023003DE88E /* SDL_vulkan_internal.h */; }; + AADC5A4E1FDA05D400960936 /* SDL_vulkan_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D16644C1EDD6023003DE88E /* SDL_vulkan_internal.h */; }; + AADC5A4F1FDA05E600960936 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1664511EDD60AD003DE88E /* SDL_cocoavulkan.h */; }; + AADC5A501FDA05E600960936 /* SDL_cocoavulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1664511EDD60AD003DE88E /* SDL_cocoavulkan.h */; }; + AADC5A5B1FDA0E3B00960936 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AADC5A591FDA0E0800960936 /* QuartzCore.framework */; }; BBFC088D164C6647003E6A99 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */; }; D55A1B81179F262300625D7C /* SDL_cocoamousetap.h in Headers */ = {isa = PBXBuildFile; fileRef = D55A1B7F179F262300625D7C /* SDL_cocoamousetap.h */; }; D55A1B82179F262300625D7C /* SDL_cocoamousetap.m in Sources */ = {isa = PBXBuildFile; fileRef = D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */; }; @@ -1156,6 +1171,9 @@ AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_gl2platform.h; sourceTree = ""; }; AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_khrplatform.h; sourceTree = ""; }; AADA5B8616CCAB3000107CF7 /* SDL_bits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_bits.h; sourceTree = ""; }; + AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_metal_osx.h; sourceTree = ""; }; + AADC5A421FDA035D00960936 /* SDL_render_metal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_render_metal.m; sourceTree = ""; }; + AADC5A591FDA0E0800960936 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = QuartzCore.framework; sourceTree = ""; }; BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamecontroller.c; sourceTree = ""; }; BECDF66B0761BA81005FE872 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; BECDF66C0761BA81005FE872 /* SDL2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SDL2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1178,13 +1196,14 @@ buildActionMask = 2147483647; files = ( A7381E971D8B6A0300B177DD /* AudioToolbox.framework in Frameworks */, - A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */, - FA73671D19A540EF004122E4 /* CoreVideo.framework in Frameworks */, + 00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */, 007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */, - 007317A60858DECD00B2BC32 /* IOKit.framework in Frameworks */, + A7381E961D8B69D600B177DD /* CoreAudio.framework in Frameworks */, 00D0D08410675DD9004B05EF /* CoreFoundation.framework in Frameworks */, - 00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */, + FA73671D19A540EF004122E4 /* CoreVideo.framework in Frameworks */, 00CFA89D106B4BA100758660 /* ForceFeedback.framework in Frameworks */, + 007317A60858DECD00B2BC32 /* IOKit.framework in Frameworks */, + AADC5A5B1FDA0E3B00960936 /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1305,6 +1324,7 @@ 041B2C9712FA0D680087D585 /* render */ = { isa = PBXGroup; children = ( + AADC5A401FDA030E00960936 /* metal */, 5C2EF6921FC986D8003F5197 /* opengles2 */, 041B2C9A12FA0D680087D585 /* opengl */, 041B2CA012FA0D680087D585 /* software */, @@ -1834,17 +1854,27 @@ path = ../../src/video/yuv2rgb; sourceTree = SOURCE_ROOT; }; + AADC5A401FDA030E00960936 /* metal */ = { + isa = PBXGroup; + children = ( + AADC5A421FDA035D00960936 /* SDL_render_metal.m */, + AADC5A411FDA035D00960936 /* SDL_shaders_metal_osx.h */, + ); + path = metal; + sourceTree = ""; + }; BEC562FE0761C0E800A33029 /* Linked Frameworks */ = { isa = PBXGroup; children = ( A7381E931D8B69C300B177DD /* AudioToolbox.framework */, - A7381E951D8B69D600B177DD /* CoreAudio.framework */, - FA73671C19A540EF004122E4 /* CoreVideo.framework */, - 00D0D08310675DD9004B05EF /* CoreFoundation.framework */, 007317C10858E15000B2BC32 /* Carbon.framework */, 0073179D0858DECD00B2BC32 /* Cocoa.framework */, - 0073179F0858DECD00B2BC32 /* IOKit.framework */, + A7381E951D8B69D600B177DD /* CoreAudio.framework */, + 00D0D08310675DD9004B05EF /* CoreFoundation.framework */, + FA73671C19A540EF004122E4 /* CoreVideo.framework */, 00CFA89C106B4BA100758660 /* ForceFeedback.framework */, + 0073179F0858DECD00B2BC32 /* IOKit.framework */, + AADC5A591FDA0E0800960936 /* QuartzCore.framework */, ); name = "Linked Frameworks"; sourceTree = ""; @@ -1875,6 +1905,7 @@ buildActionMask = 2147483647; files = ( AA7557FA1595D4D800BBD41B /* begin_code.h in Headers */, + AADC5A431FDA035D00960936 /* SDL_shaders_metal_osx.h in Headers */, AA7557FC1595D4D800BBD41B /* close_code.h in Headers */, AA75585E1595D4D800BBD41B /* SDL.h in Headers */, AA7557FE1595D4D800BBD41B /* SDL_assert.h in Headers */, @@ -2112,6 +2143,7 @@ 04BD025D12E6671800899322 /* blank_cursor.h in Headers */, 04BD025E12E6671800899322 /* default_cursor.h in Headers */, 04BD025F12E6671800899322 /* scancodes_darwin.h in Headers */, + AADC5A4F1FDA05E600960936 /* SDL_cocoavulkan.h in Headers */, 5C2EF6FA1FC9EE64003F5197 /* SDL_egl_c.h in Headers */, 04BD026012E6671800899322 /* scancodes_linux.h in Headers */, 04BD026212E6671800899322 /* scancodes_xfree86.h in Headers */, @@ -2119,7 +2151,9 @@ 04BD026612E6671800899322 /* SDL_events_c.h in Headers */, 56A67022185654B40007D20F /* SDL_dynapi_procs.h in Headers */, 04BD026812E6671800899322 /* SDL_gesture_c.h in Headers */, + AADC5A4D1FDA05D300960936 /* SDL_vulkan_internal.h in Headers */, 04BD026A12E6671800899322 /* SDL_keyboard_c.h in Headers */, + AADC5A491FDA05C100960936 /* yuv_rgb.h in Headers */, 04BD026C12E6671800899322 /* SDL_mouse_c.h in Headers */, 04BD026E12E6671800899322 /* SDL_sysevents.h in Headers */, 04BD027012E6671800899322 /* SDL_touch_c.h in Headers */, @@ -2175,6 +2209,7 @@ 04BD040F12E6671800899322 /* SDL_x11video.h in Headers */, AAC07100195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */, 04BD041112E6671800899322 /* SDL_x11window.h in Headers */, + AADC5A4B1FDA05CF00960936 /* SDL_yuv_c.h in Headers */, 041B2CAC12FA0D680087D585 /* SDL_sysrender.h in Headers */, 04409B9712FA97ED00FB9AA8 /* SDL_yuv_sw_c.h in Headers */, 04F7803B12FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */, @@ -2182,6 +2217,7 @@ 04F7805612FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */, 04F7805812FB74A200FC43C0 /* SDL_blendline.h in Headers */, 04F7805A12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */, + AADC5A461FDA047B00960936 /* SDL_shaders_metal_osx.h in Headers */, 04F7805B12FB74A200FC43C0 /* SDL_draw.h in Headers */, 04F7805D12FB74A200FC43C0 /* SDL_drawline.h in Headers */, 04F7805F12FB74A200FC43C0 /* SDL_drawpoint.h in Headers */, @@ -2271,6 +2307,7 @@ DB313F7C17554B71006C0E22 /* blank_cursor.h in Headers */, DB313F7D17554B71006C0E22 /* default_cursor.h in Headers */, DB313F7E17554B71006C0E22 /* scancodes_darwin.h in Headers */, + AADC5A501FDA05E600960936 /* SDL_cocoavulkan.h in Headers */, 5C2EF6FD1FC9EE65003F5197 /* SDL_egl_c.h in Headers */, DB313F7F17554B71006C0E22 /* scancodes_linux.h in Headers */, DB313F8017554B71006C0E22 /* scancodes_xfree86.h in Headers */, @@ -2278,7 +2315,9 @@ DB313F8217554B71006C0E22 /* SDL_events_c.h in Headers */, 56A67023185654B40007D20F /* SDL_dynapi_procs.h in Headers */, DB313F8317554B71006C0E22 /* SDL_gesture_c.h in Headers */, + AADC5A4E1FDA05D400960936 /* SDL_vulkan_internal.h in Headers */, DB313F8417554B71006C0E22 /* SDL_keyboard_c.h in Headers */, + AADC5A4A1FDA05C200960936 /* yuv_rgb.h in Headers */, DB313F8517554B71006C0E22 /* SDL_mouse_c.h in Headers */, DB313F8617554B71006C0E22 /* SDL_sysevents.h in Headers */, DB313F8717554B71006C0E22 /* SDL_touch_c.h in Headers */, @@ -2334,6 +2373,7 @@ DB313FB617554B71006C0E22 /* SDL_x11video.h in Headers */, AAC07101195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */, DB313FB717554B71006C0E22 /* SDL_x11window.h in Headers */, + AADC5A4C1FDA05CF00960936 /* SDL_yuv_c.h in Headers */, DB313FB817554B71006C0E22 /* SDL_sysrender.h in Headers */, DB313FBA17554B71006C0E22 /* SDL_yuv_sw_c.h in Headers */, DB313FBB17554B71006C0E22 /* SDL_nullframebuffer_c.h in Headers */, @@ -2341,6 +2381,7 @@ DB313FBC17554B71006C0E22 /* SDL_blendfillrect.h in Headers */, DB313FBD17554B71006C0E22 /* SDL_blendline.h in Headers */, DB313FBE17554B71006C0E22 /* SDL_blendpoint.h in Headers */, + AADC5A471FDA047E00960936 /* SDL_shaders_metal_osx.h in Headers */, DB313FBF17554B71006C0E22 /* SDL_draw.h in Headers */, DB313FC017554B71006C0E22 /* SDL_drawline.h in Headers */, DB313FC117554B71006C0E22 /* SDL_drawpoint.h in Headers */, @@ -2609,6 +2650,7 @@ 04409B9412FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */, 04F7803A12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */, 04F7804912FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */, + AADC5A441FDA035D00960936 /* SDL_render_metal.m in Sources */, 04F7804B12FB74A200FC43C0 /* SDL_blendline.c in Sources */, 04F7804D12FB74A200FC43C0 /* SDL_blendpoint.c in Sources */, 5C2EF6F81FC9EE35003F5197 /* SDL_egl.c in Sources */, @@ -2737,6 +2779,7 @@ 04BD040C12E6671800899322 /* SDL_x11touch.c in Sources */, 04BD040E12E6671800899322 /* SDL_x11video.c in Sources */, 04BD041012E6671800899322 /* SDL_x11window.c in Sources */, + AADC5A451FDA047900960936 /* SDL_render_metal.m in Sources */, 041B2CAB12FA0D680087D585 /* SDL_render.c in Sources */, 04409B9812FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */, 04F7803C12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */, @@ -2865,6 +2908,7 @@ DB31405517554B71006C0E22 /* SDL_x11touch.c in Sources */, DB31405617554B71006C0E22 /* SDL_x11video.c in Sources */, DB31405717554B71006C0E22 /* SDL_x11window.c in Sources */, + AADC5A481FDA048100960936 /* SDL_render_metal.m in Sources */, DB31405817554B71006C0E22 /* SDL_render.c in Sources */, DB31405A17554B71006C0E22 /* SDL_yuv_sw.c in Sources */, DB31405B17554B71006C0E22 /* SDL_nullframebuffer.c in Sources */, @@ -2954,10 +2998,17 @@ COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 8.0.0; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = "Info-Framework.plist"; INSTALL_PATH = "@rpath"; - OTHER_LDFLAGS = "-liconv"; + OTHER_LDFLAGS = ( + "-Wl,-weak_framework,Metal", + "-liconv", + ); PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL2; PRODUCT_NAME = SDL2; PROVISIONING_PROFILE = ""; @@ -3043,10 +3094,17 @@ COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; DYLIB_CURRENT_VERSION = 8.0.0; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); FRAMEWORK_VERSION = A; INFOPLIST_FILE = "Info-Framework.plist"; INSTALL_PATH = "@rpath"; - OTHER_LDFLAGS = "-liconv"; + OTHER_LDFLAGS = ( + "-Wl,-weak_framework,Metal", + "-liconv", + ); PRODUCT_BUNDLE_IDENTIFIER = org.libsdl.SDL2; PRODUCT_NAME = SDL2; PROVISIONING_PROFILE = ""; diff --git a/configure b/configure index 743cd05522b83..fa1852e9fd1a5 100755 --- a/configure +++ b/configure @@ -846,6 +846,7 @@ enable_video_x11_xshape enable_video_x11_vm enable_video_vivante enable_video_cocoa +enable_render_metal enable_video_directfb enable_directfb_shared enable_video_kmsdrm @@ -1594,6 +1595,7 @@ Optional Features: --enable-video-x11-vm use X11 VM extension for fullscreen [[default=yes]] --enable-video-vivante use Vivante EGL video driver [[default=yes]] --enable-video-cocoa use Cocoa video driver [[default=yes]] + --enable-render-metal enable the Metal render driver [[default=yes]] --enable-video-directfb use DirectFB video driver [[default=no]] --enable-directfb-shared dynamically load directfb support [[default=yes]] @@ -21204,6 +21206,24 @@ $as_echo "#define SDL_VIDEO_DRIVER_COCOA 1" >>confdefs.h fi } +CheckMETAL() +{ + # Check whether --enable-render-metal was given. +if test "${enable_render_metal+set}" = set; then : + enableval=$enable_render_metal; +else + enable_render_metal=yes +fi + + if test x$enable_render = xyes -a x$enable_render_metal = xyes; then + +$as_echo "#define SDL_VIDEO_RENDER_METAL 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/render/metal/*.m" + fi +} + + CheckDirectFB() { # Check whether --enable-video-directfb was given. @@ -21358,9 +21378,6 @@ fi $as_echo "#define SDL_VIDEO_DRIVER_DIRECTFB 1" >>confdefs.h - -$as_echo "#define SDL_VIDEO_RENDER_DIRECTFB 1" >>confdefs.h - SOURCES="$SOURCES $srcdir/src/video/directfb/*.c" EXTRA_CFLAGS="$EXTRA_CFLAGS $DIRECTFB_CFLAGS" @@ -22998,12 +23015,6 @@ if test "x$ac_cv_header_dxgi_h" = xyes; then : fi - ac_fn_c_check_header_mongrel "$LINENO" "xaudio2.h" "ac_cv_header_xaudio2_h" "$ac_includes_default" -if test "x$ac_cv_header_xaudio2_h" = xyes; then : - have_xaudio2=yes -fi - - ac_fn_c_check_header_mongrel "$LINENO" "xinput.h" "ac_cv_header_xinput_h" "$ac_includes_default" if test "x$ac_cv_header_xinput_h" = xyes; then : have_xinput=yes @@ -24005,12 +24016,6 @@ $as_echo "#define SDL_AUDIO_DRIVER_DSOUND 1" >>confdefs.h SOURCES="$SOURCES $srcdir/src/audio/directsound/*.c" fi - if test x$have_xaudio2 = xyes; then - -$as_echo "#define SDL_AUDIO_DRIVER_XAUDIO2 1" >>confdefs.h - - SOURCES="$SOURCES $srcdir/src/audio/xaudio2/*.c" - fi if test x$have_wasapi = xyes; then $as_echo "#define SDL_AUDIO_DRIVER_WASAPI 1" >>confdefs.h @@ -24248,8 +24253,9 @@ fi CheckDiskAudio CheckDummyAudio CheckDLOPEN - CheckPTHREAD + CheckMETAL CheckVulkan + CheckPTHREAD # Set up files for the audio library if test x$enable_audio = xyes; then @@ -24333,6 +24339,10 @@ $as_echo "#define SDL_VIDEO_RENDER_OGL_ES2 1" >>confdefs.h EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,OpenGLES" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,QuartzCore" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,UIKit" + + if test x$enable_render = xyes -a x$enable_render_metal = xyes; then + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Metal" + fi ;; *-*-darwin* ) # This could be either full "Mac OS X", or plain "Darwin" which is @@ -24351,6 +24361,7 @@ $as_echo "#define SDL_VIDEO_RENDER_OGL_ES2 1" >>confdefs.h CheckDummyAudio CheckDLOPEN CheckCOCOA + CheckMETAL CheckX11 CheckMacGL CheckOpenGLX11 @@ -24420,6 +24431,10 @@ $as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Cocoa" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Carbon" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,IOKit" + + if test x$enable_render = xyes -a x$enable_render_metal = xyes; then + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,QuartzCore -Wl,-weak_framework,Metal" + fi ;; *-nacl|*-pnacl) ARCH=nacl diff --git a/configure.in b/configure.in index 0872ab3025b48..dcaede3e1b7ad 100644 --- a/configure.in +++ b/configure.in @@ -2056,8 +2056,8 @@ AC_HELP_STRING([--enable-video-cocoa], [use Cocoa video driver [[default=yes]]]) CheckMETAL() { AC_ARG_ENABLE(render-metal, -AC_HELP_STRING([--enable-render-metal], [enable the Metal render driver [[default=no]]]), - , enable_render_metal=no) +AC_HELP_STRING([--enable-render-metal], [enable the Metal render driver [[default=yes]]]), + , enable_render_metal=yes) if test x$enable_render = xyes -a x$enable_render_metal = xyes; then dnl This should maybe make sure you have a supported SDK version. AC_DEFINE(SDL_VIDEO_RENDER_METAL, 1, [ ]) @@ -3794,6 +3794,10 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Cocoa" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Carbon" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,IOKit" + + if test x$enable_render = xyes -a x$enable_render_metal = xyes; then + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal" + fi ;; *-nacl|*-pnacl) ARCH=nacl diff --git a/src/render/metal/SDL_render_metal.m b/src/render/metal/SDL_render_metal.m index 3456b6e3f6a55..0604d28ee517a 100644 --- a/src/render/metal/SDL_render_metal.m +++ b/src/render/metal/SDL_render_metal.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2015 Sam Lantinga + Copyright (C) 1997-2017 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,10 +32,12 @@ #include #include -// these are in SDL_shaders_metal.c, regenerate it with build-metal-shaders.sh -extern const unsigned char sdl_metallib[]; -extern const unsigned int sdl_metallib_len; - +/* Regenerate these with build-metal-shaders.sh */ +#ifdef __MACOSX__ +#include "SDL_shaders_metal_osx.h" +#else +#include "SDL_shaders_metal_ios.h" +#endif /* Apple Metal renderer implementation */ @@ -141,10 +143,6 @@ static int METAL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect mtlpipedesc.colorAttachments[0].pixelFormat = data->mtlbackbuffer.texture.pixelFormat; switch (blendmode) { - case SDL_BLENDMODE_NONE: - mtlpipedesc.colorAttachments[0].blendingEnabled = NO; - break; - case SDL_BLENDMODE_BLEND: mtlpipedesc.colorAttachments[0].blendingEnabled = YES; mtlpipedesc.colorAttachments[0].rgbBlendOperation = MTLBlendOperationAdd; @@ -174,6 +172,10 @@ static int METAL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect mtlpipedesc.colorAttachments[0].sourceAlphaBlendFactor = MTLBlendFactorZero; mtlpipedesc.colorAttachments[0].destinationAlphaBlendFactor = MTLBlendFactorOne; break; + + default: + mtlpipedesc.colorAttachments[0].blendingEnabled = NO; + break; } mtlpipedesc.label = label; @@ -204,10 +206,10 @@ static int METAL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect ChoosePipelineState(id *states, const SDL_BlendMode blendmode) { switch (blendmode) { - case SDL_BLENDMODE_NONE: return states[0]; case SDL_BLENDMODE_BLEND: return states[1]; case SDL_BLENDMODE_ADD: return states[2]; case SDL_BLENDMODE_MOD: return states[3]; + default: return states[0]; } return nil; } @@ -244,8 +246,9 @@ static int METAL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect renderer->driverdata = data; renderer->window = window; - data->mtldevice = MTLCreateSystemDefaultDevice(); // !!! FIXME: MTLCopyAllDevices() can find other GPUs... - if (data->mtldevice == nil) { +#ifdef __MACOSX__ + id mtldevice = MTLCreateSystemDefaultDevice(); // !!! FIXME: MTLCopyAllDevices() can find other GPUs... + if (mtldevice == nil) { SDL_free(renderer); SDL_free(data); SDL_SetError("Failed to obtain Metal device"); @@ -256,10 +259,10 @@ static int METAL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect NSView *nsview = [syswm.info.cocoa.window contentView]; - // !!! FIXME: on iOS, we need to override +[UIView layerClass] to return [CAMetalLayer class] right from the start, and that's more complicated. - CAMetalLayer *layer = [CAMetalLayer layer]; + // CAMetalLayer is available in QuartzCore starting at OSX 10.11 + CAMetalLayer *layer = [NSClassFromString( @"CAMetalLayer" ) layer]; - layer.device = data->mtldevice; + layer.device = mtldevice; //layer.pixelFormat = MTLPixelFormatBGRA8Unorm; // !!! FIXME: MTLPixelFormatBGRA8Unorm_sRGB ? layer.framebufferOnly = YES; //layer.drawableSize = (CGSize) [nsview convertRectToBacking:[nsview bounds]].size; @@ -269,6 +272,11 @@ static int METAL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect [nsview setLayer:layer]; [layer retain]; +#else + +#endif + + data->mtldevice = layer.device; data->mtllayer = layer; data->mtlcmdqueue = [data->mtldevice newCommandQueue]; data->mtlcmdqueue.label = @"SDL Metal Renderer"; @@ -318,8 +326,8 @@ static int METAL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect NSError *err = nil; - // The compiled .metallib is embedded in a static array in SDL_shaders_metal.c, - // but the original shader source code is in SDL_shaders_metal.metal. + // The compiled .metallib is embedded in a static array in a header file + // but the original shader source code is in SDL_shaders_metal.metal. dispatch_data_t mtllibdata = dispatch_data_create(sdl_metallib, sdl_metallib_len, dispatch_get_global_queue(0, 0), ^{}); data->mtllibrary = [data->mtldevice newLibraryWithData:mtllibdata error:&err]; SDL_assert(err == nil); diff --git a/src/render/metal/SDL_shaders_metal.c b/src/render/metal/SDL_shaders_metal.c deleted file mode 100644 index f884a82e26756..0000000000000 --- a/src/render/metal/SDL_shaders_metal.c +++ /dev/null @@ -1,796 +0,0 @@ -const unsigned char sdl_metallib[] = { - 0x4d, 0x54, 0x4c, 0x42, 0x01, 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x24, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x22, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, - 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, - 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, - 0x00, 0x4e, 0xf9, 0x51, 0x29, 0x42, 0xed, 0x04, 0x84, 0x5a, 0xc0, 0xc4, - 0x13, 0x2d, 0xa5, 0x2a, 0x35, 0xe7, 0x5a, 0x54, 0x23, 0xcd, 0x36, 0x84, - 0x57, 0x8f, 0x93, 0x2e, 0xa8, 0xa4, 0x5c, 0x1b, 0xb6, 0x4f, 0x46, 0x46, - 0x54, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, - 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x77, 0x00, 0x00, - 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x43, - 0x6f, 0x70, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x00, 0x54, - 0x59, 0x50, 0x45, 0x01, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x20, 0x00, - 0xac, 0x1b, 0x43, 0xd2, 0xc0, 0xc8, 0x71, 0x6a, 0x29, 0xad, 0xf0, 0xbf, - 0xb5, 0x9c, 0x42, 0x74, 0xae, 0x2c, 0xed, 0xec, 0xdf, 0xbc, 0x83, 0x45, - 0xcb, 0x5f, 0x10, 0x2d, 0x62, 0x6d, 0x26, 0x95, 0x4f, 0x46, 0x46, 0x54, - 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, - 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x7b, 0x00, 0x00, 0x00, - 0x4e, 0x41, 0x4d, 0x45, 0x14, 0x00, 0x53, 0x44, 0x4c, 0x5f, 0x53, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, 0x53, - 0x48, 0x20, 0x00, 0x3e, 0xa9, 0x42, 0x17, 0x9f, 0x76, 0x62, 0xf8, 0x5a, - 0x5b, 0x00, 0xa1, 0x7f, 0x79, 0xd0, 0x2d, 0xd1, 0xca, 0x17, 0xec, 0xae, - 0x00, 0xfd, 0xf8, 0xa4, 0xf8, 0x26, 0x8b, 0x02, 0x77, 0xc6, 0xca, 0x4f, - 0x46, 0x46, 0x54, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, 0x01, - 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x79, - 0x00, 0x00, 0x00, 0x4e, 0x41, 0x4d, 0x45, 0x12, 0x00, 0x53, 0x44, 0x4c, - 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x00, 0x54, 0x59, 0x50, 0x45, 0x01, 0x00, 0x01, 0x48, 0x41, - 0x53, 0x48, 0x20, 0x00, 0xf0, 0xdb, 0xe7, 0x05, 0x3f, 0xb8, 0x23, 0x80, - 0x5c, 0x3d, 0xff, 0x62, 0x99, 0xd5, 0xbc, 0x6b, 0x46, 0x4e, 0x38, 0x96, - 0x44, 0xb8, 0x3e, 0xa5, 0x64, 0x47, 0x1c, 0x04, 0xef, 0x6a, 0x32, 0xd7, - 0x4f, 0x46, 0x46, 0x54, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x17, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x45, 0x52, 0x53, 0x08, 0x00, - 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, 0x45, 0x4e, 0x44, 0x54, - 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, - 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, - 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, - 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, - 0x04, 0x00, 0x00, 0x00, 0x45, 0x4e, 0x44, 0x54, 0x04, 0x00, 0x00, 0x00, - 0x45, 0x4e, 0x44, 0x54, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xdd, 0x01, 0x00, 0x00, - 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, - 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, - 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, - 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, - 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, - 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x08, - 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, - 0x51, 0x18, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x20, 0x00, - 0x16, 0xa0, 0xda, 0x10, 0x1b, 0xc2, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, - 0x04, 0x54, 0x04, 0x3b, 0x94, 0xc3, 0x3c, 0xcc, 0x43, 0x1b, 0xc0, 0x83, - 0x3c, 0x94, 0xc3, 0x38, 0xa4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0x98, 0x03, - 0x3c, 0xb4, 0x43, 0x38, 0x90, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, - 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0x60, 0x0e, 0xf2, 0x10, 0x0e, 0xed, - 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, 0x90, 0x0e, 0xee, 0x40, 0x0f, 0xe5, - 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, 0x90, 0x0e, 0xed, 0x00, 0xd0, 0x83, - 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x83, 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, - 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, - 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, - 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0x43, - 0x38, 0x98, 0x03, 0x40, 0xb8, 0xc3, 0x3b, 0xb4, 0x41, 0x3a, 0xb8, 0x83, - 0x39, 0xcc, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, - 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, - 0xf0, 0x0e, 0x6d, 0xe0, 0x0e, 0xe1, 0xe0, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, - 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, - 0x3c, 0xd4, 0x43, 0x39, 0x00, 0xc4, 0x3c, 0xd0, 0x43, 0x38, 0x8c, 0xc3, - 0x3a, 0xb4, 0x01, 0x3c, 0xc8, 0xc3, 0x3b, 0xd0, 0x43, 0x39, 0x8c, 0x03, - 0x3d, 0xbc, 0x83, 0x3c, 0xb4, 0x81, 0x38, 0xd4, 0x83, 0x39, 0x98, 0x43, - 0x39, 0xc8, 0x43, 0x1b, 0xcc, 0x43, 0x3a, 0xe8, 0x43, 0x39, 0x00, 0x78, - 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, - 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, - 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, 0x40, 0xd4, 0xc3, 0x3c, 0x94, 0x43, - 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03, 0x3d, 0xb4, 0x81, 0x39, 0xb0, 0xc3, - 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6, 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, - 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x13, 0x84, 0x40, 0x00, 0x89, 0x20, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, - 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, - 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, - 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x28, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, - 0x8c, 0x20, 0x00, 0x83, 0x08, 0x82, 0x30, 0x47, 0x00, 0x06, 0x65, 0x88, - 0x21, 0xaa, 0x81, 0x80, 0x39, 0x02, 0x50, 0x18, 0x01, 0x00, 0x00, 0x00, - 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, - 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, - 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38, - 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, - 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, - 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, - 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, - 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, - 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, - 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, - 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, - 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, - 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, - 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, - 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, - 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, - 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, - 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, - 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, - 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, - 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, - 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, - 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, - 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, - 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, - 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, - 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, - 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, - 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, - 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, - 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e, - 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, - 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, - 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x31, 0x00, 0x00, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, - 0x32, 0x1e, 0x98, 0x0c, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, - 0xc6, 0x04, 0x43, 0xa2, 0x12, 0x18, 0x01, 0x28, 0x08, 0x00, 0x00, 0x00, - 0x79, 0x18, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x43, 0x84, 0x23, 0x58, - 0x10, 0xb1, 0x02, 0x2b, 0xd8, 0x42, 0x2b, 0x80, 0x81, 0x3d, 0x94, 0x83, - 0x3c, 0xcc, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0x80, 0xc1, 0x1c, 0xb8, 0x41, - 0x1d, 0x80, 0xc1, 0x10, 0x83, 0x08, 0x88, 0x81, 0x10, 0x86, 0x20, 0x07, - 0x41, 0x04, 0x44, 0x40, 0x08, 0x0b, 0x8a, 0x56, 0x28, 0x05, 0x5a, 0x08, - 0x05, 0x56, 0x18, 0x22, 0x1c, 0xc6, 0x82, 0x2d, 0x1c, 0xd2, 0x41, 0x1e, - 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, - 0xdc, 0x80, 0x1c, 0xca, 0xc1, 0x1d, 0xde, 0x41, 0x1e, 0xda, 0x61, 0x1e, - 0x7e, 0x81, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c, - 0x86, 0x08, 0x07, 0xb2, 0x80, 0x0b, 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, - 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x07, 0x37, 0x30, - 0x87, 0x70, 0x98, 0x07, 0x7a, 0xf8, 0x85, 0x76, 0x08, 0x07, 0x7a, 0x40, - 0x87, 0x5f, 0x28, 0x07, 0x77, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x18, - 0x22, 0x1c, 0xca, 0x82, 0x32, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, - 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x07, 0x37, 0x30, - 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x07, 0x71, 0xa8, 0x07, 0x73, 0x30, - 0x87, 0x72, 0x90, 0x87, 0x5f, 0x30, 0x87, 0x72, 0xa0, 0x87, 0x71, 0x40, - 0x87, 0x5f, 0x20, 0x87, 0x74, 0x98, 0x87, 0x70, 0x10, 0x07, 0x76, 0x28, - 0x87, 0x21, 0xc2, 0xc1, 0x2c, 0x08, 0x83, 0x70, 0x48, 0x07, 0x79, 0x70, - 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0x70, - 0x03, 0x77, 0x08, 0x07, 0x7a, 0x48, 0x07, 0x7b, 0x28, 0x87, 0x5f, 0x20, - 0x87, 0x77, 0xa8, 0x07, 0x71, 0x60, 0x87, 0x72, 0xf8, 0x05, 0x72, 0x48, - 0x87, 0x79, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x18, 0x62, 0x18, 0xc0, - 0xe1, 0x1c, 0xd5, 0x10, 0xe1, 0x78, 0x86, 0x30, 0x07, 0x74, 0x40, 0x47, - 0x74, 0x48, 0xc7, 0x74, 0x50, 0x0b, 0x98, 0x70, 0x48, 0x07, 0x79, 0x70, - 0x03, 0x78, 0x78, 0x87, 0x79, 0x48, 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, - 0x87, 0x05, 0x51, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x41, 0x38, 0xc8, 0xc3, - 0x39, 0xfc, 0x02, 0x3d, 0xe4, 0x03, 0x3c, 0x94, 0xc3, 0x2f, 0xb8, 0x43, - 0x38, 0xb4, 0x43, 0x39, 0x2c, 0x30, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, - 0xe8, 0x81, 0x0e, 0x16, 0x30, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe1, - 0x20, 0x0f, 0xe7, 0xf0, 0x0b, 0xee, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x0b, - 0xa2, 0x59, 0x20, 0x05, 0x56, 0xf8, 0x85, 0x59, 0x48, 0x87, 0x76, 0x80, - 0x07, 0x76, 0x28, 0x87, 0x5f, 0xb0, 0x87, 0x72, 0x90, 0x07, 0x7a, 0x28, - 0x07, 0x7c, 0x18, 0x42, 0x1c, 0xd6, 0xe1, 0x0d, 0xe1, 0x08, 0xe1, 0xb8, - 0x0e, 0x8c, 0x10, 0x88, 0xe0, 0xc8, 0x0e, 0x8d, 0x18, 0x8e, 0x8d, 0x18, - 0x8e, 0xe8, 0xe0, 0x8e, 0xe9, 0xe8, 0x16, 0x28, 0xe1, 0x90, 0x0e, 0xf2, - 0xe0, 0x06, 0xe2, 0x50, 0x0f, 0xe6, 0x60, 0x0e, 0xe5, 0x20, 0x0f, 0x0b, - 0xa4, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x76, 0x78, 0x87, 0x71, 0x08, - 0x07, 0x7a, 0x48, 0x87, 0x77, 0x70, 0x87, 0x5f, 0x48, 0x07, 0x77, 0x20, - 0x87, 0x72, 0xc0, 0x87, 0x05, 0x48, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x81, - 0x3c, 0x94, 0x43, 0x38, 0x90, 0xc3, 0x82, 0x28, 0x1c, 0xd2, 0x41, 0x1e, - 0xdc, 0x20, 0x1c, 0xe4, 0xe1, 0x1c, 0x7e, 0x81, 0x1e, 0xf2, 0x01, 0x1e, - 0xca, 0xe1, 0x17, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x16, 0x5c, 0xe1, - 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe1, 0x20, 0x0f, 0xe7, 0xf0, 0x0b, 0xf4, - 0x90, 0x0f, 0xf0, 0x50, 0x0e, 0xbf, 0x10, 0x0e, 0xec, 0x90, 0x0e, 0xe7, - 0xe0, 0x0e, 0xbf, 0x30, 0x0f, 0xe9, 0xa0, 0x0f, 0xe5, 0xb0, 0xc0, 0x30, - 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0x39, 0x58, 0x80, 0xc0, 0xc3, - 0x3b, 0xcc, 0x43, 0x3a, 0xd0, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0x0c, 0x61, - 0x88, 0xe0, 0xf8, 0x8e, 0xe8, 0x00, 0x83, 0x63, 0x3a, 0xc2, 0x60, 0x41, - 0x13, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf4, - 0x50, 0x0e, 0xf8, 0xf0, 0x0b, 0xe9, 0x40, 0x0e, 0x0b, 0x88, 0x7a, 0x48, - 0x07, 0x77, 0xa0, 0x87, 0x05, 0x83, 0x3d, 0xa4, 0x03, 0x39, 0x8c, 0x50, - 0xd8, 0x81, 0x1d, 0xec, 0xa1, 0x1d, 0xdc, 0x20, 0x1d, 0xc8, 0xa1, 0x1c, - 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0xc0, 0x88, 0x25, 0x1c, 0xd2, 0x41, 0x1e, - 0xdc, 0xc0, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1, 0x1d, - 0xa6, 0x04, 0xc2, 0x08, 0x2a, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x80, 0x1d, - 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1e, 0xc2, 0xe1, 0x1c, 0xca, 0xe1, 0x17, - 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, 0x4a, - 0x30, 0x8c, 0x98, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xc6, 0xe1, 0x1d, - 0xda, 0x01, 0x1e, 0xd2, 0x81, 0x1d, 0xca, 0xe1, 0x17, 0xde, 0x01, 0x1e, - 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0xe6, 0x61, 0x0a, 0x51, 0x1c, 0xc9, - 0x32, 0x42, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, 0x90, - 0x07, 0x7a, 0x28, 0x07, 0x7c, 0x98, 0x12, 0x34, 0x00, 0x00, 0x00, 0x00, - 0x79, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, - 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, - 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, - 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, - 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, - 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, - 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, - 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, - 0x07, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x06, 0x10, 0xb1, 0x5d, 0xf9, 0xb3, 0x08, 0xf3, 0x2c, 0xc4, 0x5f, 0x11, - 0xd1, 0x44, 0x5c, 0x00, 0x61, 0x20, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, - 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x44, 0x65, 0x50, 0x04, 0x14, 0x33, 0x00, 0x04, 0x63, 0x04, 0x20, 0x08, - 0x82, 0xf8, 0x37, 0x02, 0x00, 0x00, 0x00, 0x00, 0x67, 0x60, 0x8c, 0x27, - 0x20, 0x01, 0x05, 0x64, 0x0c, 0x21, 0x60, 0xe6, 0x18, 0x8e, 0xa0, 0x19, - 0x43, 0x18, 0x9e, 0x39, 0x06, 0x21, 0x80, 0xe6, 0x18, 0x02, 0x64, 0x99, - 0x63, 0x08, 0x94, 0x26, 0x83, 0x70, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x56, 0x30, 0x54, 0xc8, 0x60, 0x04, 0xc8, 0xe3, 0x48, 0xc8, 0x84, 0x38, - 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x78, 0x08, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, - 0xde, 0x21, 0x0c, 0x00, 0x00, 0x1b, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, - 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, - 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, - 0x02, 0x42, 0x92, 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, - 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, - 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, - 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, - 0x00, 0x4e, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x20, 0x00, 0x16, 0xa0, 0xda, - 0x60, 0x08, 0x02, 0xb0, 0x00, 0xd5, 0x86, 0xd8, 0x18, 0xfe, 0xff, 0xff, - 0xff, 0x7f, 0x00, 0x24, 0xa0, 0x22, 0xd8, 0xa1, 0x1c, 0xe6, 0x61, 0x1e, - 0xda, 0x00, 0x1e, 0xe4, 0xa1, 0x1c, 0xc6, 0x21, 0x1d, 0xe6, 0xa1, 0x1c, - 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x1d, 0xc2, 0x81, 0x1c, 0x00, 0x7a, 0x90, - 0x87, 0x7a, 0x28, 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x73, 0x90, - 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, 0x78, 0x78, 0x87, 0x74, 0x70, - 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, 0x72, 0x60, 0x87, 0x74, 0x68, - 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x18, 0xdc, 0xe1, 0x1d, - 0xda, 0xc0, 0x1c, 0xe4, 0x21, 0x1c, 0xda, 0xa1, 0x1c, 0xda, 0x00, 0x1e, - 0xde, 0x21, 0x1d, 0xdc, 0x81, 0x1e, 0xca, 0x41, 0x1e, 0xda, 0xa0, 0x1c, - 0xd8, 0x21, 0x1d, 0xda, 0xa1, 0x0d, 0xdc, 0xe1, 0x1d, 0xdc, 0xa1, 0x0d, - 0xd8, 0xa1, 0x1c, 0xc2, 0xc1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, - 0xd2, 0xc1, 0x1d, 0xcc, 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, - 0xda, 0x21, 0x1c, 0xe8, 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, - 0x07, 0x80, 0x70, 0x87, 0x77, 0x68, 0x03, 0x77, 0x08, 0x07, 0x77, 0x98, - 0x87, 0x36, 0x30, 0x07, 0x78, 0x68, 0x83, 0x76, 0x08, 0x07, 0x7a, 0x40, - 0x07, 0x80, 0x1e, 0xe4, 0xa1, 0x1e, 0xca, 0x01, 0x20, 0xe6, 0x81, 0x1e, - 0xc2, 0x61, 0x1c, 0xd6, 0xa1, 0x0d, 0xe0, 0x41, 0x1e, 0xde, 0x81, 0x1e, - 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0xa1, 0x0d, 0xc4, 0xa1, 0x1e, - 0xcc, 0xc1, 0x1c, 0xca, 0x41, 0x1e, 0xda, 0x60, 0x1e, 0xd2, 0x41, 0x1f, - 0xca, 0x01, 0xc0, 0x03, 0x80, 0xa8, 0x07, 0x77, 0x98, 0x87, 0x70, 0x30, - 0x87, 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x36, 0x68, 0x87, 0x70, 0xa0, - 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xa2, 0x1e, - 0xe6, 0xa1, 0x1c, 0xda, 0x60, 0x1e, 0xde, 0xc1, 0x1c, 0xe8, 0xa1, 0x0d, - 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x01, 0x30, 0x87, 0x70, 0x60, - 0x87, 0x79, 0x28, 0x07, 0x00, 0x49, 0x18, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x13, 0x86, 0x40, 0x18, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, - 0x00, 0x13, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, 0x85, - 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, 0x90, - 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x2c, 0x33, - 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, 0x20, 0x00, 0x17, 0x49, 0x53, 0x44, - 0x09, 0x93, 0xcf, 0x39, 0x0f, 0xf6, 0x12, 0xd1, 0x44, 0x5c, 0x48, 0x08, - 0x19, 0x44, 0x10, 0x84, 0x39, 0x02, 0x30, 0x28, 0xc4, 0x10, 0x15, 0xd9, - 0x40, 0xc0, 0x1c, 0x01, 0x28, 0x8c, 0x00, 0x00, 0x00, 0x13, 0xb2, 0x70, - 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, 0x07, 0x78, - 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, 0x87, 0x79, - 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38, 0x70, 0x03, 0x38, - 0xd8, 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, 0x40, 0x07, - 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x90, 0x0e, - 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, 0x80, 0x07, - 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, - 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x90, 0x0e, - 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, - 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, - 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, - 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, 0x40, 0x07, - 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, - 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, - 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, - 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x40, 0x07, - 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, - 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, - 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, - 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, - 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, 0x60, 0x07, - 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, - 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, - 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, 0x10, 0x07, - 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, 0x20, 0x07, - 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, - 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xd0, 0x06, - 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, - 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x00, 0x07, - 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, 0xa0, 0x07, - 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, - 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, - 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, - 0x72, 0x30, 0x84, 0x39, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc8, 0x02, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, - 0x0c, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, - 0xaa, 0x12, 0x28, 0x88, 0x11, 0x80, 0x22, 0xa0, 0x1c, 0x01, 0x00, 0x00, - 0x00, 0x79, 0x18, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x43, 0x04, 0x24, - 0x58, 0x10, 0xb1, 0x02, 0x2b, 0xd8, 0x42, 0x2b, 0x80, 0x81, 0x3d, 0x94, - 0x83, 0x3c, 0xcc, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0x80, 0xc1, 0x1c, 0xb8, - 0x41, 0x1d, 0x80, 0xc1, 0x10, 0xa3, 0x08, 0x0a, 0xa1, 0x18, 0x86, 0x20, - 0x08, 0x51, 0x04, 0x45, 0x50, 0x0c, 0x0b, 0x8a, 0x56, 0x28, 0x05, 0x5a, - 0x08, 0x05, 0x56, 0x18, 0x22, 0x20, 0xc6, 0x82, 0x2d, 0x1c, 0xd2, 0x41, - 0x1e, 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, - 0x1c, 0xdc, 0x80, 0x1c, 0xca, 0xc1, 0x1d, 0xde, 0x41, 0x1e, 0xda, 0x61, - 0x1e, 0x7e, 0x81, 0x1c, 0xd2, 0x61, 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, - 0x1c, 0x86, 0x08, 0x08, 0xb2, 0x80, 0x0b, 0x87, 0x74, 0x90, 0x07, 0x37, - 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x07, 0x37, - 0x30, 0x87, 0x70, 0x98, 0x07, 0x7a, 0xf8, 0x85, 0x76, 0x08, 0x07, 0x7a, - 0x40, 0x87, 0x5f, 0x28, 0x07, 0x77, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, - 0x18, 0x22, 0x20, 0xca, 0x82, 0x32, 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, - 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, 0x07, 0x76, 0x28, 0x07, 0x37, - 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, 0x07, 0x71, 0xa8, 0x07, 0x73, - 0x30, 0x87, 0x72, 0x90, 0x87, 0x5f, 0x30, 0x87, 0x72, 0xa0, 0x87, 0x71, - 0x40, 0x87, 0x5f, 0x20, 0x87, 0x74, 0x98, 0x87, 0x70, 0x10, 0x07, 0x76, - 0x28, 0x87, 0x21, 0x02, 0xc2, 0x2c, 0x08, 0x83, 0x70, 0x48, 0x07, 0x79, - 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, - 0x70, 0x03, 0x77, 0x08, 0x07, 0x7a, 0x48, 0x07, 0x7b, 0x28, 0x87, 0x5f, - 0x20, 0x87, 0x77, 0xa8, 0x07, 0x71, 0x60, 0x87, 0x72, 0xf8, 0x05, 0x72, - 0x48, 0x87, 0x79, 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x18, 0x62, 0x1c, - 0x00, 0xe2, 0x20, 0xda, 0x10, 0x02, 0x79, 0x90, 0x6a, 0x88, 0x82, 0x40, - 0x48, 0x84, 0x48, 0xc8, 0x84, 0x50, 0x0b, 0x98, 0x70, 0x48, 0x07, 0x79, - 0x70, 0x03, 0x78, 0x78, 0x87, 0x79, 0x48, 0x07, 0x7a, 0x48, 0x87, 0x77, - 0x70, 0x87, 0x05, 0x51, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x41, 0x38, 0xc8, - 0xc3, 0x39, 0xfc, 0x02, 0x3d, 0xe4, 0x03, 0x3c, 0x94, 0xc3, 0x2f, 0xb8, - 0x43, 0x38, 0xb4, 0x43, 0x39, 0x2c, 0x30, 0xcc, 0x81, 0x1d, 0xde, 0x21, - 0x1c, 0xe8, 0x81, 0x0e, 0x16, 0x30, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, - 0xe1, 0x20, 0x0f, 0xe7, 0xf0, 0x0b, 0xee, 0x10, 0x0e, 0xed, 0x50, 0x0e, - 0x0b, 0x10, 0x78, 0x78, 0x87, 0x79, 0x48, 0x07, 0x7a, 0x48, 0x87, 0x77, - 0x70, 0x87, 0x21, 0x0c, 0x62, 0x21, 0x17, 0x12, 0x21, 0x18, 0x32, 0x21, - 0xd9, 0x82, 0x28, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0xc0, 0x1e, 0xca, 0x41, - 0x1e, 0xe8, 0xa1, 0x1c, 0xf0, 0xe1, 0x17, 0xde, 0xa1, 0x1e, 0xe8, 0x01, - 0x1e, 0xea, 0x81, 0x1e, 0x16, 0x64, 0xe7, 0x50, 0x0e, 0xee, 0x50, 0x0e, - 0xf2, 0x10, 0x0e, 0xf4, 0x50, 0x0e, 0xe4, 0x80, 0x06, 0x78, 0x40, 0x0f, - 0xe5, 0x80, 0x0f, 0xe3, 0xf0, 0x0e, 0xef, 0x20, 0x0f, 0xe4, 0x40, 0x0a, - 0xf6, 0x20, 0x07, 0xbf, 0x60, 0x0e, 0x69, 0xb0, 0xc0, 0x30, 0x07, 0x76, - 0x78, 0x87, 0x70, 0xa0, 0x07, 0x39, 0x58, 0x80, 0xd0, 0x43, 0x39, 0xe0, - 0xc3, 0x38, 0xbc, 0xc3, 0x3b, 0xc8, 0x03, 0x39, 0x0c, 0x31, 0x90, 0x0d, - 0x09, 0x03, 0x64, 0x0c, 0x86, 0x70, 0xc5, 0x80, 0x70, 0x48, 0x57, 0x0c, - 0x45, 0x80, 0x78, 0xc8, 0x57, 0x08, 0x08, 0x18, 0x14, 0x02, 0x12, 0x21, - 0x18, 0x32, 0x21, 0xd4, 0x02, 0x25, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x40, - 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0x61, 0x81, 0x14, 0x0e, - 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, 0xef, 0x30, 0x0e, 0xe1, 0x40, 0x0f, - 0xe9, 0xf0, 0x0e, 0xee, 0xf0, 0x0b, 0xe9, 0xe0, 0x0e, 0xe4, 0x50, 0x0e, - 0xf8, 0xb0, 0x00, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0x90, 0x87, 0x72, - 0x08, 0x07, 0x72, 0x58, 0x10, 0x85, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x84, - 0x83, 0x3c, 0x9c, 0xc3, 0x2f, 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xfc, - 0xc2, 0x3c, 0xa4, 0x83, 0x3e, 0x94, 0xc3, 0x82, 0x2b, 0x1c, 0xd2, 0x41, - 0x1e, 0xdc, 0x20, 0x1c, 0xe4, 0xe1, 0x1c, 0x7e, 0x81, 0x1e, 0xf2, 0x01, - 0x1e, 0xca, 0xe1, 0x17, 0xc2, 0x81, 0x1d, 0xd2, 0xe1, 0x1c, 0xdc, 0xe1, - 0x17, 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x86, 0x70, 0x45, 0x80, 0x70, - 0x48, 0x57, 0x04, 0x45, 0x80, 0x78, 0xc8, 0x57, 0x08, 0x08, 0x18, 0x14, - 0x02, 0x12, 0x21, 0x18, 0x32, 0x21, 0x62, 0xb0, 0x20, 0xa1, 0x87, 0x72, - 0xc0, 0x87, 0x71, 0x78, 0x87, 0x77, 0x90, 0x07, 0x72, 0x98, 0x87, 0x21, - 0x4c, 0x41, 0x20, 0x64, 0x80, 0x44, 0x48, 0x19, 0x20, 0x13, 0x62, 0x06, - 0x0b, 0x9a, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x7b, 0x28, 0x07, 0x79, - 0xa0, 0x87, 0x72, 0xc0, 0x87, 0x5f, 0x48, 0x07, 0x72, 0x58, 0x40, 0xd4, - 0x43, 0x3a, 0xb8, 0x03, 0x3d, 0x2c, 0x18, 0xec, 0x21, 0x1d, 0xc8, 0x61, - 0x88, 0x81, 0xa0, 0x01, 0x82, 0x06, 0x49, 0x31, 0xc4, 0x40, 0xd2, 0x00, - 0x51, 0x83, 0xa4, 0x58, 0xf0, 0xbc, 0x43, 0x3b, 0xb8, 0x43, 0x3a, 0xc0, - 0xc3, 0x3b, 0xd0, 0x43, 0x39, 0xb8, 0x03, 0x3d, 0x80, 0xc1, 0x38, 0xa0, - 0x43, 0x38, 0xc8, 0xc3, 0x10, 0x01, 0x59, 0x83, 0x05, 0xd1, 0x2c, 0xa4, - 0x43, 0x3b, 0xc0, 0x03, 0x3b, 0x94, 0x03, 0x18, 0x8c, 0xc2, 0x1b, 0x8c, - 0xc2, 0x1a, 0xac, 0x01, 0x18, 0xd0, 0x82, 0x28, 0x84, 0x42, 0x28, 0x8c, - 0x50, 0xd8, 0x81, 0x1d, 0xec, 0xa1, 0x1d, 0xdc, 0x20, 0x1d, 0xc8, 0xa1, - 0x1c, 0xdc, 0x81, 0x1e, 0xa6, 0x04, 0xc0, 0x88, 0x25, 0x1c, 0xd2, 0x41, - 0x1e, 0xdc, 0xc0, 0x1e, 0xca, 0x41, 0x1e, 0xe6, 0x21, 0x1d, 0xde, 0xc1, - 0x1d, 0xa6, 0x04, 0xc2, 0x08, 0x2a, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x80, - 0x1d, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1e, 0xc2, 0xe1, 0x1c, 0xca, 0xe1, - 0x17, 0xec, 0xa1, 0x1c, 0xe4, 0x61, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, - 0x4a, 0x30, 0x8c, 0x98, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xc6, 0xe1, - 0x1d, 0xda, 0x01, 0x1e, 0xd2, 0x81, 0x1d, 0xca, 0xe1, 0x17, 0xde, 0x01, - 0x1e, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0xe6, 0x61, 0x0a, 0x51, 0x1c, - 0xc9, 0x32, 0x42, 0x09, 0x87, 0x74, 0x90, 0x07, 0x37, 0xb0, 0x87, 0x72, - 0x90, 0x07, 0x7a, 0x28, 0x07, 0x7c, 0x98, 0x12, 0x34, 0x00, 0x00, 0x00, - 0x00, 0x79, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, - 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, - 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, - 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, - 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, - 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, - 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, - 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, - 0x20, 0x07, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x06, 0xf0, 0xb0, 0x5d, 0xf9, 0x73, 0xce, 0x83, 0xfd, 0x15, 0x11, - 0x4d, 0xc4, 0x05, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, - 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x54, 0x65, 0x40, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x7f, 0x14, - 0x33, 0x00, 0x34, 0x33, 0x00, 0x04, 0x23, 0x00, 0x00, 0x67, 0x64, 0x8c, - 0x27, 0x24, 0x01, 0x05, 0x64, 0x0c, 0x21, 0x70, 0xe6, 0x18, 0x8e, 0xe0, - 0x19, 0x43, 0x18, 0xa4, 0x39, 0x06, 0x21, 0x98, 0xe6, 0x18, 0x02, 0x24, - 0x9a, 0x63, 0x08, 0x98, 0x66, 0x3c, 0x01, 0x4a, 0x28, 0x20, 0xb3, 0x0d, - 0xcd, 0x00, 0xcc, 0x36, 0x04, 0x42, 0x90, 0x41, 0x38, 0x10, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x86, 0x30, 0x54, 0xc8, 0x60, 0x06, 0xc8, - 0xe3, 0x48, 0xc8, 0x84, 0x38, 0x8d, 0x1d, 0x24, 0x13, 0x71, 0x09, 0x8e, - 0x13, 0x0d, 0x12, 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x5b, 0x06, 0x25, 0x38, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc0, - 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7c, 0x07, - 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, - 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, - 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, - 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x10, 0x45, 0x02, 0x42, 0x92, - 0x0b, 0x42, 0x84, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x49, 0x0a, 0x32, - 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, 0xc4, 0x52, 0x80, 0x0c, 0x19, - 0x21, 0x72, 0x24, 0x07, 0xc8, 0x08, 0x11, 0x62, 0xa8, 0xa0, 0xa8, 0x40, - 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, 0x18, 0x00, 0x00, 0x4d, 0x00, - 0x00, 0x00, 0x1b, 0x8c, 0x20, 0x00, 0x16, 0xa0, 0xda, 0x10, 0x1b, 0xc2, - 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x04, 0x54, 0x04, 0x3b, 0x94, 0xc3, - 0x3c, 0xcc, 0x43, 0x1b, 0xc0, 0x83, 0x3c, 0x94, 0xc3, 0x38, 0xa4, 0xc3, - 0x3c, 0x94, 0x43, 0x1b, 0x98, 0x03, 0x3c, 0xb4, 0x43, 0x38, 0x90, 0x03, - 0x40, 0x0f, 0xf2, 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, - 0x60, 0x0e, 0xf2, 0x10, 0x0e, 0xed, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0xef, - 0x90, 0x0e, 0xee, 0x40, 0x0f, 0xe5, 0x20, 0x0f, 0x6d, 0x50, 0x0e, 0xec, - 0x90, 0x0e, 0xed, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0x83, - 0x3b, 0xbc, 0x43, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0x43, 0x3b, 0x94, 0x43, - 0x1b, 0xc0, 0xc3, 0x3b, 0xa4, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xc8, 0x43, - 0x1b, 0x94, 0x03, 0x3b, 0xa4, 0x43, 0x3b, 0xb4, 0x81, 0x3b, 0xbc, 0x83, - 0x3b, 0xb4, 0x01, 0x3b, 0x94, 0x43, 0x38, 0x98, 0x03, 0x40, 0xb8, 0xc3, - 0x3b, 0xb4, 0x41, 0x3a, 0xb8, 0x83, 0x39, 0xcc, 0x43, 0x1b, 0x98, 0x03, - 0x3c, 0xb4, 0x41, 0x3b, 0x84, 0x03, 0x3d, 0xa0, 0x03, 0x40, 0x0f, 0xf2, - 0x50, 0x0f, 0xe5, 0x00, 0x10, 0xee, 0xf0, 0x0e, 0x6d, 0xe0, 0x0e, 0xe1, - 0xe0, 0x0e, 0xf3, 0xd0, 0x06, 0xe6, 0x00, 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, - 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, 0xd4, 0x43, 0x39, 0x00, 0xc4, - 0x3c, 0xd0, 0x43, 0x38, 0x8c, 0xc3, 0x3a, 0xb4, 0x01, 0x3c, 0xc8, 0xc3, - 0x3b, 0xd0, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xb4, 0x81, - 0x38, 0xd4, 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x1b, 0xcc, 0x43, - 0x3a, 0xe8, 0x43, 0x39, 0x00, 0x78, 0x00, 0x10, 0xf5, 0xe0, 0x0e, 0xf3, - 0x10, 0x0e, 0xe6, 0x50, 0x0e, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, 0x06, 0xed, - 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, 0x94, 0x03, - 0x40, 0xd4, 0xc3, 0x3c, 0x94, 0x43, 0x1b, 0xcc, 0xc3, 0x3b, 0x98, 0x03, - 0x3d, 0xb4, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0x00, 0xe6, - 0x10, 0x0e, 0xec, 0x30, 0x0f, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x49, 0x18, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x00, 0x89, 0x20, - 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x32, 0x22, 0x08, 0x09, 0x20, 0x64, - 0x85, 0x04, 0x13, 0x22, 0xa4, 0x84, 0x04, 0x13, 0x22, 0xe3, 0x84, 0xa1, - 0x90, 0x14, 0x12, 0x4c, 0x88, 0x8c, 0x0b, 0x84, 0x84, 0x4c, 0x10, 0x24, - 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x88, 0x10, 0x08, 0x45, 0x08, 0xa1, - 0x19, 0x08, 0x98, 0x23, 0x00, 0x83, 0x39, 0x02, 0x50, 0x18, 0x01, 0x00, - 0x00, 0x00, 0x13, 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, - 0x83, 0x70, 0x80, 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, - 0x87, 0x71, 0x78, 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, - 0x83, 0x38, 0x70, 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, - 0xa0, 0x07, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, - 0x40, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, - 0xd0, 0x06, 0xe9, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, - 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, - 0x60, 0x07, 0x6d, 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, - 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, - 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, - 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, - 0x60, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, - 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, - 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, - 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, - 0x60, 0x0f, 0x72, 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, - 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, - 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, - 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, - 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, - 0x60, 0x0f, 0x79, 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, - 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, - 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, - 0xd0, 0x06, 0xf6, 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, - 0x60, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, - 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, - 0x50, 0x07, 0x76, 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, - 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, - 0x60, 0x0f, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, - 0x20, 0x07, 0x74, 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, - 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, - 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, - 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0x30, 0x84, 0x21, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x01, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x32, 0x1e, 0x98, 0x0c, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, - 0x26, 0x47, 0xc6, 0x04, 0x43, 0xb2, 0x11, 0x80, 0x12, 0x28, 0x90, 0x82, - 0xa0, 0x1b, 0x01, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xc6, 0x00, - 0x00, 0x00, 0x43, 0x84, 0x22, 0x58, 0x10, 0xb1, 0x02, 0x2b, 0xd8, 0x42, - 0x2b, 0x80, 0x81, 0x3d, 0x94, 0x83, 0x3c, 0xcc, 0x43, 0x3a, 0xbc, 0x83, - 0x3b, 0x80, 0xc1, 0x1c, 0xb8, 0x41, 0x1d, 0x80, 0xc1, 0x10, 0xc3, 0x10, - 0x0c, 0xc2, 0x08, 0x86, 0x20, 0x05, 0x61, 0x08, 0x86, 0x60, 0x04, 0x0b, - 0x8a, 0x56, 0x28, 0x05, 0x5a, 0x08, 0x05, 0x56, 0x18, 0x22, 0x14, 0xc6, - 0x82, 0x2d, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c, 0xde, 0xa1, 0x1d, - 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0xdc, 0x80, 0x1c, 0xca, 0xc1, 0x1d, - 0xde, 0x41, 0x1e, 0xda, 0x61, 0x1e, 0x7e, 0x81, 0x1c, 0xd2, 0x61, 0x1e, - 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0x86, 0x08, 0x05, 0xb2, 0x80, 0x0b, - 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, - 0x07, 0x76, 0x28, 0x07, 0x37, 0x30, 0x87, 0x70, 0x98, 0x07, 0x7a, 0xf8, - 0x85, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x87, 0x5f, 0x28, 0x07, 0x77, 0x08, - 0x07, 0x71, 0x60, 0x87, 0x72, 0x18, 0x22, 0x14, 0xca, 0x82, 0x32, 0x08, - 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, 0x48, - 0x07, 0x76, 0x28, 0x07, 0x37, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, 0x28, - 0x07, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x5f, 0x30, - 0x87, 0x72, 0xa0, 0x87, 0x71, 0x40, 0x87, 0x5f, 0x20, 0x87, 0x74, 0x98, - 0x87, 0x70, 0x10, 0x07, 0x76, 0x28, 0x87, 0x21, 0x42, 0xc1, 0x2c, 0x08, - 0x83, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, 0x80, - 0x87, 0x74, 0x60, 0x87, 0x72, 0x70, 0x03, 0x77, 0x08, 0x07, 0x7a, 0x48, - 0x07, 0x7b, 0x28, 0x87, 0x5f, 0x20, 0x87, 0x77, 0xa8, 0x07, 0x71, 0x60, - 0x87, 0x72, 0xf8, 0x05, 0x72, 0x48, 0x87, 0x79, 0x08, 0x07, 0x71, 0x60, - 0x87, 0x72, 0x18, 0x62, 0x10, 0x40, 0xe1, 0x14, 0xd5, 0x10, 0xa1, 0x78, - 0x86, 0x30, 0x05, 0x64, 0x04, 0x45, 0x54, 0x48, 0xc5, 0x54, 0x50, 0x0b, - 0xa2, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x79, 0x28, 0x07, 0x77, 0x20, - 0x87, 0x72, 0x90, 0x87, 0x5f, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, 0x28, - 0x07, 0x7a, 0x58, 0x10, 0x85, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x84, 0x83, - 0x3c, 0x9c, 0xc3, 0x2f, 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xfc, 0x82, - 0x3b, 0x84, 0x43, 0x3b, 0x94, 0xc3, 0x02, 0xc3, 0x1c, 0xd8, 0xe1, 0x1d, - 0xc2, 0x81, 0x1e, 0xe8, 0x60, 0x01, 0x13, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, - 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xbf, 0xe0, 0x0e, 0xe1, 0xd0, 0x0e, 0xe5, - 0xb0, 0x60, 0x9a, 0x05, 0x52, 0x60, 0x85, 0x5f, 0x98, 0x85, 0x74, 0x68, - 0x07, 0x78, 0x60, 0x87, 0x72, 0xf8, 0x05, 0x73, 0x90, 0x87, 0x70, 0x38, - 0x87, 0x76, 0x28, 0x07, 0x77, 0xa0, 0x87, 0x21, 0x42, 0x61, 0x0d, 0x01, - 0x03, 0x23, 0x28, 0xae, 0x02, 0x33, 0x86, 0x22, 0x33, 0x02, 0x43, 0x28, - 0xb4, 0x62, 0x33, 0x86, 0x82, 0x33, 0x86, 0x22, 0x2a, 0xa4, 0x62, 0x2a, - 0xba, 0x05, 0x4a, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x81, 0x38, 0xd4, 0x83, - 0x39, 0x98, 0x43, 0x39, 0xc8, 0xc3, 0x82, 0x27, 0x1c, 0xd2, 0x41, 0x1e, - 0xdc, 0x40, 0x1c, 0xea, 0xc1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, 0xe1, 0x17, - 0xe6, 0x21, 0x1d, 0xf4, 0xa1, 0x1c, 0x16, 0x48, 0xe1, 0x90, 0x0e, 0xf2, - 0xe0, 0x06, 0xec, 0xf0, 0x0e, 0xe3, 0x10, 0x0e, 0xf4, 0x90, 0x0e, 0xef, - 0xe0, 0x0e, 0xbf, 0x90, 0x0e, 0xee, 0x40, 0x0e, 0xe5, 0x80, 0x0f, 0x0b, - 0x90, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x79, 0x28, 0x87, 0x70, 0x20, - 0x87, 0x05, 0x51, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x41, 0x38, 0xc8, 0xc3, - 0x39, 0xfc, 0x02, 0x3d, 0xe4, 0x03, 0x3c, 0x94, 0xc3, 0x2f, 0xcc, 0x43, - 0x3a, 0xe8, 0x43, 0x39, 0x2c, 0xb8, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, - 0xc2, 0x41, 0x1e, 0xce, 0xe1, 0x17, 0xe8, 0x21, 0x1f, 0xe0, 0xa1, 0x1c, - 0x7e, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xce, 0xc1, 0x1d, 0x7e, 0x61, 0x1e, - 0xd2, 0x41, 0x1f, 0xca, 0x61, 0xc1, 0x30, 0x0e, 0xef, 0xc0, 0x0e, 0x43, - 0x8c, 0xe2, 0x2b, 0xbe, 0xa3, 0x18, 0x62, 0x14, 0x60, 0x50, 0x84, 0xc1, - 0x51, 0x2c, 0x78, 0xde, 0xa1, 0x1d, 0xdc, 0x21, 0x1d, 0xe0, 0xe1, 0x1d, - 0xe8, 0xa1, 0x1c, 0xdc, 0x81, 0x1e, 0xc0, 0x60, 0x1c, 0xd0, 0x21, 0x1c, - 0xe4, 0x61, 0x88, 0x50, 0x88, 0xc1, 0x82, 0x68, 0x16, 0xd2, 0xa1, 0x1d, - 0xe0, 0x81, 0x1d, 0xca, 0x01, 0x0c, 0x46, 0xe1, 0x0d, 0x46, 0x61, 0x0d, - 0xd6, 0x00, 0x0c, 0x68, 0x41, 0x14, 0x42, 0x21, 0x14, 0x46, 0x28, 0xec, - 0xc0, 0x0e, 0xf6, 0xd0, 0x0e, 0x6e, 0x90, 0x0e, 0xe4, 0x50, 0x0e, 0xee, - 0x40, 0x0f, 0x53, 0x02, 0x60, 0xc4, 0x12, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, - 0x60, 0x0f, 0xe5, 0x20, 0x0f, 0xf3, 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0x53, - 0x02, 0x61, 0x04, 0x15, 0x0e, 0xe9, 0x20, 0x0f, 0x6e, 0xc0, 0x0e, 0xe1, - 0xe0, 0x0e, 0xe7, 0x50, 0x0f, 0xe1, 0x70, 0x0e, 0xe5, 0xf0, 0x0b, 0xf6, - 0x50, 0x0e, 0xf2, 0x30, 0x0f, 0xe9, 0xf0, 0x0e, 0xee, 0x30, 0x25, 0x18, - 0x46, 0x4c, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe3, 0xf0, 0x0e, 0xed, - 0x00, 0x0f, 0xe9, 0xc0, 0x0e, 0xe5, 0xf0, 0x0b, 0xef, 0x00, 0x0f, 0xf4, - 0x90, 0x0e, 0xef, 0xe0, 0x0e, 0xf3, 0x30, 0x85, 0x28, 0x8e, 0x64, 0x19, - 0xc1, 0x84, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x98, 0x83, 0x3c, 0x84, 0xc3, - 0x39, 0xb4, 0x43, 0x39, 0xb8, 0x03, 0x3d, 0x4c, 0x09, 0x1a, 0x00, 0x00, - 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x33, 0x08, - 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, - 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, - 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, - 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, - 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, - 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, - 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, - 0x70, 0x20, 0x07, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x06, 0x30, 0xb1, 0x5d, 0xf9, 0xb3, 0x08, 0xf3, 0x2c, 0xc4, - 0x5f, 0x44, 0x80, 0xc1, 0x10, 0xcd, 0x04, 0x00, 0x00, 0x00, 0x61, 0x20, - 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x13, 0x04, 0x01, 0x05, 0x25, 0x83, - 0x70, 0x20, 0x02, 0x00, 0x00, 0x00, 0x66, 0x30, 0x08, 0xce, 0x02, 0x00, - 0x00, 0x00, 0x01, 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x06, - 0x20, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xde, 0xc0, 0x17, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0xc8, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x42, - 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xaf, 0x02, 0x00, 0x00, 0x0b, - 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, - 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, - 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, - 0x14, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xa4, 0x10, 0x32, 0x14, 0x38, - 0x08, 0x18, 0x49, 0x0a, 0x32, 0x44, 0x24, 0x48, 0x0a, 0x90, 0x21, 0x23, - 0xc4, 0x52, 0x80, 0x0c, 0x19, 0x21, 0x72, 0x24, 0x07, 0xc8, 0x48, 0x11, - 0x62, 0xa8, 0xa0, 0xa8, 0x40, 0xc6, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x51, - 0x18, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0x60, 0x00, 0x16, - 0xa0, 0xda, 0xf0, 0x1a, 0xc2, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x80, 0x44, - 0xb0, 0x43, 0x39, 0xcc, 0xc3, 0x3c, 0xb4, 0x01, 0x3c, 0xc8, 0x43, 0x39, - 0x8c, 0x43, 0x3a, 0xcc, 0x43, 0x39, 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x3b, - 0x84, 0x03, 0x39, 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, - 0x0e, 0xef, 0xd0, 0x06, 0xe6, 0x20, 0x0f, 0xe1, 0xd0, 0x0e, 0xe5, 0xd0, - 0x06, 0xf0, 0xf0, 0x0e, 0xe9, 0xe0, 0x0e, 0xf4, 0x50, 0x0e, 0xf2, 0xd0, - 0x06, 0xe5, 0xc0, 0x0e, 0xe9, 0xd0, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, - 0x94, 0x03, 0x30, 0xb8, 0xc3, 0x3b, 0xb4, 0x81, 0x39, 0xc8, 0x43, 0x38, - 0xb4, 0x43, 0x39, 0xb4, 0x01, 0x3c, 0xbc, 0x43, 0x3a, 0xb8, 0x03, 0x3d, - 0x94, 0x83, 0x3c, 0xb4, 0x41, 0x39, 0xb0, 0x43, 0x3a, 0xb4, 0x43, 0x1b, - 0xb8, 0xc3, 0x3b, 0xb8, 0x43, 0x1b, 0xb0, 0x43, 0x39, 0x84, 0x83, 0x39, - 0x00, 0x84, 0x3b, 0xbc, 0x43, 0x1b, 0xa4, 0x83, 0x3b, 0x98, 0xc3, 0x3c, - 0xb4, 0x81, 0x39, 0xc0, 0x43, 0x1b, 0xb4, 0x43, 0x38, 0xd0, 0x03, 0x3a, - 0x00, 0xf4, 0x20, 0x0f, 0xf5, 0x50, 0x0e, 0x00, 0xe1, 0x0e, 0xef, 0xd0, - 0x06, 0xee, 0x10, 0x0e, 0xee, 0x30, 0x0f, 0x6d, 0x60, 0x0e, 0xf0, 0xd0, - 0x06, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x00, 0x3d, 0xc8, 0x43, 0x3d, - 0x94, 0x03, 0x40, 0xcc, 0x03, 0x3d, 0x84, 0xc3, 0x38, 0xac, 0x43, 0x1b, - 0xc0, 0x83, 0x3c, 0xbc, 0x03, 0x3d, 0x94, 0xc3, 0x38, 0xd0, 0xc3, 0x3b, - 0xc8, 0x43, 0x1b, 0x88, 0x43, 0x3d, 0x98, 0x83, 0x39, 0x94, 0x83, 0x3c, - 0xb4, 0xc1, 0x3c, 0xa4, 0x83, 0x3e, 0x94, 0x03, 0x80, 0x07, 0x00, 0x51, - 0x0f, 0xee, 0x30, 0x0f, 0xe1, 0x60, 0x0e, 0xe5, 0xd0, 0x06, 0xe6, 0x00, - 0x0f, 0x6d, 0xd0, 0x0e, 0xe1, 0x40, 0x0f, 0xe8, 0x00, 0xd0, 0x83, 0x3c, - 0xd4, 0x43, 0x39, 0x00, 0x44, 0x3d, 0xcc, 0x43, 0x39, 0xb4, 0xc1, 0x3c, - 0xbc, 0x83, 0x39, 0xd0, 0x43, 0x1b, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, - 0xd0, 0x03, 0x60, 0x0e, 0xe1, 0xc0, 0x0e, 0xf3, 0x50, 0x0e, 0xc0, 0x06, - 0x62, 0x20, 0x00, 0x31, 0xd8, 0x40, 0x10, 0x06, 0x20, 0x06, 0x1b, 0x5a, - 0xa3, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x81, 0x60, 0x87, 0x72, 0x98, 0x87, - 0x79, 0x68, 0x03, 0x78, 0x90, 0x87, 0x72, 0x18, 0x87, 0x74, 0x98, 0x87, - 0x72, 0x68, 0x03, 0x73, 0x80, 0x87, 0x76, 0x08, 0x07, 0x72, 0x00, 0xe8, - 0x41, 0x1e, 0xea, 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xcc, - 0x41, 0x1e, 0xc2, 0xa1, 0x1d, 0xca, 0xa1, 0x0d, 0xe0, 0xe1, 0x1d, 0xd2, - 0xc1, 0x1d, 0xe8, 0xa1, 0x1c, 0xe4, 0xa1, 0x0d, 0xca, 0x81, 0x1d, 0xd2, - 0xa1, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x60, 0x70, 0x87, - 0x77, 0x68, 0x03, 0x73, 0x90, 0x87, 0x70, 0x68, 0x87, 0x72, 0x68, 0x03, - 0x78, 0x78, 0x87, 0x74, 0x70, 0x07, 0x7a, 0x28, 0x07, 0x79, 0x68, 0x83, - 0x72, 0x60, 0x87, 0x74, 0x68, 0x87, 0x36, 0x70, 0x87, 0x77, 0x70, 0x87, - 0x36, 0x60, 0x87, 0x72, 0x08, 0x07, 0x73, 0x00, 0x08, 0x77, 0x78, 0x87, - 0x36, 0x48, 0x07, 0x77, 0x30, 0x87, 0x79, 0x68, 0x03, 0x73, 0x80, 0x87, - 0x36, 0x68, 0x87, 0x70, 0xa0, 0x07, 0x74, 0x00, 0xe8, 0x41, 0x1e, 0xea, - 0xa1, 0x1c, 0x00, 0xc2, 0x1d, 0xde, 0xa1, 0x0d, 0xdc, 0x21, 0x1c, 0xdc, - 0x61, 0x1e, 0xda, 0xc0, 0x1c, 0xe0, 0xa1, 0x0d, 0xda, 0x21, 0x1c, 0xe8, - 0x01, 0x1d, 0x00, 0x7a, 0x90, 0x87, 0x7a, 0x28, 0x07, 0x80, 0x98, 0x07, - 0x7a, 0x08, 0x87, 0x71, 0x58, 0x87, 0x36, 0x80, 0x07, 0x79, 0x78, 0x07, - 0x7a, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x87, 0x36, 0x10, 0x87, - 0x7a, 0x30, 0x07, 0x73, 0x28, 0x07, 0x79, 0x68, 0x83, 0x79, 0x48, 0x07, - 0x7d, 0x28, 0x07, 0x00, 0x0f, 0x00, 0xa2, 0x1e, 0xdc, 0x61, 0x1e, 0xc2, - 0xc1, 0x1c, 0xca, 0xa1, 0x0d, 0xcc, 0x01, 0x1e, 0xda, 0xa0, 0x1d, 0xc2, - 0x81, 0x1e, 0xd0, 0x01, 0xa0, 0x07, 0x79, 0xa8, 0x87, 0x72, 0x00, 0x88, - 0x7a, 0x98, 0x87, 0x72, 0x68, 0x83, 0x79, 0x78, 0x07, 0x73, 0xa0, 0x87, - 0x36, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0xc0, 0x1c, 0xc2, - 0x81, 0x1d, 0xe6, 0xa1, 0x1c, 0x80, 0x0d, 0x84, 0xf1, 0xff, 0xff, 0xff, - 0xff, 0x03, 0x20, 0x01, 0x00, 0x00, 0x00, 0x49, 0x18, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x13, 0x84, 0x40, 0x98, 0x30, 0x0c, 0x44, 0x31, 0x61, - 0x18, 0x08, 0x03, 0x89, 0x20, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x32, - 0x22, 0x48, 0x09, 0x20, 0x64, 0x85, 0x04, 0x93, 0x22, 0xa4, 0x84, 0x04, - 0x93, 0x22, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8a, 0x8c, 0x0b, - 0x84, 0xa4, 0x4c, 0x10, 0x48, 0x33, 0x00, 0xc3, 0x08, 0x04, 0x30, 0x8c, - 0x20, 0x00, 0x83, 0x08, 0x81, 0x70, 0x94, 0x34, 0x45, 0x94, 0x30, 0xf9, - 0xff, 0x44, 0x5c, 0x13, 0x15, 0x11, 0xbf, 0x3d, 0xfc, 0xd3, 0x18, 0x01, - 0x30, 0x88, 0x40, 0x04, 0xa5, 0x08, 0x41, 0x8c, 0x42, 0xe6, 0x22, 0x69, - 0x8a, 0x28, 0x61, 0xf2, 0x7f, 0x09, 0x60, 0x9e, 0x85, 0x88, 0xfe, 0x69, - 0x8c, 0x00, 0x18, 0x44, 0x40, 0x84, 0x39, 0x82, 0x60, 0x8e, 0x00, 0x0c, - 0x86, 0x11, 0x84, 0xa5, 0x20, 0xa1, 0x24, 0xa1, 0x98, 0x02, 0xd4, 0x06, - 0x02, 0xe6, 0x08, 0x40, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, - 0xb2, 0x70, 0x48, 0x07, 0x79, 0xb0, 0x03, 0x3a, 0x68, 0x83, 0x70, 0x80, - 0x07, 0x78, 0x60, 0x87, 0x72, 0x68, 0x83, 0x76, 0x08, 0x87, 0x71, 0x78, - 0x87, 0x79, 0xc0, 0x87, 0x38, 0x80, 0x03, 0x37, 0x88, 0x83, 0x38, 0x70, - 0x03, 0x38, 0xd8, 0xf0, 0x1e, 0xe5, 0xd0, 0x06, 0xf0, 0xa0, 0x07, 0x76, - 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, - 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x78, 0xa0, 0x07, 0x78, 0xd0, 0x06, 0xe9, - 0x80, 0x07, 0x7a, 0x80, 0x07, 0x7a, 0x80, 0x07, 0x6d, 0x90, 0x0e, 0x71, - 0x60, 0x07, 0x7a, 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, - 0x90, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, - 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, - 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, - 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x76, - 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, - 0x60, 0x0e, 0x78, 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, - 0x10, 0x07, 0x72, 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x60, 0x07, 0x7a, - 0x10, 0x07, 0x76, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, - 0x40, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, - 0x60, 0x0f, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, - 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x74, 0x80, 0x07, 0x7a, 0x60, 0x07, 0x74, - 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x76, 0x40, 0x07, 0x7a, - 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x6d, 0x60, 0x0f, 0x79, - 0x60, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, - 0x80, 0x07, 0x6d, 0x60, 0x0f, 0x71, 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, - 0x20, 0x07, 0x78, 0xa0, 0x07, 0x71, 0x20, 0x07, 0x78, 0xd0, 0x06, 0xf6, - 0x10, 0x07, 0x79, 0x20, 0x07, 0x7a, 0x20, 0x07, 0x75, 0x60, 0x07, 0x7a, - 0x20, 0x07, 0x75, 0x60, 0x07, 0x6d, 0x60, 0x0f, 0x72, 0x50, 0x07, 0x76, - 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, 0xa0, 0x07, 0x72, 0x50, 0x07, 0x76, - 0xd0, 0x06, 0xf6, 0x50, 0x07, 0x71, 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, - 0x20, 0x07, 0x7a, 0x50, 0x07, 0x71, 0x20, 0x07, 0x6d, 0x60, 0x0f, 0x71, - 0x00, 0x07, 0x72, 0x40, 0x07, 0x7a, 0x10, 0x07, 0x70, 0x20, 0x07, 0x74, - 0xa0, 0x07, 0x71, 0x00, 0x07, 0x72, 0x40, 0x07, 0x6d, 0x60, 0x0e, 0x78, - 0x00, 0x07, 0x7a, 0x10, 0x07, 0x72, 0x80, 0x07, 0x7a, 0x10, 0x07, 0x72, - 0x80, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, - 0x30, 0x07, 0x72, 0x30, 0x84, 0x39, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x18, 0xc2, 0x38, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x64, 0x81, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x32, - 0x1e, 0x98, 0x10, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, - 0x04, 0x43, 0x5a, 0x25, 0x30, 0x02, 0x50, 0x20, 0x05, 0x51, 0x04, 0x65, - 0x40, 0x70, 0x04, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x1a, - 0x01, 0x00, 0x00, 0x43, 0x84, 0x27, 0x58, 0x10, 0xb1, 0x02, 0x2b, 0xd8, - 0x42, 0x2b, 0x80, 0x81, 0x3d, 0x94, 0x83, 0x3c, 0xcc, 0x43, 0x3a, 0xbc, - 0x83, 0x3b, 0x80, 0xc1, 0x1c, 0xb8, 0x41, 0x1d, 0x80, 0xc1, 0x10, 0x63, - 0x11, 0x96, 0x62, 0x19, 0x86, 0x20, 0x0f, 0xb1, 0x08, 0x8b, 0xb0, 0x0c, - 0x0b, 0x8a, 0x56, 0x28, 0x05, 0x5a, 0x08, 0x05, 0x56, 0x18, 0x22, 0x3c, - 0xc6, 0x82, 0x2d, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x60, 0x1c, 0xde, 0xa1, - 0x1d, 0xe0, 0x21, 0x1d, 0xd8, 0xa1, 0x1c, 0xdc, 0x80, 0x1c, 0xca, 0xc1, - 0x1d, 0xde, 0x41, 0x1e, 0xda, 0x61, 0x1e, 0x7e, 0x81, 0x1c, 0xd2, 0x61, - 0x1e, 0xc2, 0x41, 0x1c, 0xd8, 0xa1, 0x1c, 0x86, 0x08, 0x0f, 0xb2, 0x80, - 0x0b, 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, - 0x48, 0x07, 0x76, 0x28, 0x07, 0x37, 0x30, 0x87, 0x70, 0x98, 0x07, 0x7a, - 0xf8, 0x85, 0x76, 0x08, 0x07, 0x7a, 0x40, 0x87, 0x5f, 0x28, 0x07, 0x77, - 0x08, 0x07, 0x71, 0x60, 0x87, 0x72, 0x18, 0x22, 0x3c, 0xca, 0x82, 0x32, - 0x08, 0x87, 0x74, 0x90, 0x07, 0x37, 0x18, 0x87, 0x77, 0x68, 0x07, 0x78, - 0x48, 0x07, 0x76, 0x28, 0x07, 0x37, 0x30, 0x07, 0x79, 0x08, 0x87, 0x76, - 0x28, 0x07, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, 0x90, 0x87, 0x5f, - 0x30, 0x87, 0x72, 0xa0, 0x87, 0x71, 0x40, 0x87, 0x5f, 0x20, 0x87, 0x74, - 0x98, 0x87, 0x70, 0x10, 0x07, 0x76, 0x28, 0x87, 0x21, 0xc2, 0xc3, 0x2c, - 0x08, 0x83, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x78, 0x87, 0x76, - 0x80, 0x87, 0x74, 0x60, 0x87, 0x72, 0x70, 0x03, 0x77, 0x08, 0x07, 0x7a, - 0x48, 0x07, 0x7b, 0x28, 0x87, 0x5f, 0x20, 0x87, 0x77, 0xa8, 0x07, 0x71, - 0x60, 0x87, 0x72, 0xf8, 0x05, 0x72, 0x48, 0x87, 0x79, 0x08, 0x07, 0x71, - 0x60, 0x87, 0x72, 0x18, 0x62, 0x1c, 0xc0, 0xe3, 0x3c, 0xd5, 0x10, 0xe1, - 0x79, 0x86, 0x30, 0x0f, 0xb4, 0x0c, 0x4f, 0xf4, 0x48, 0xcf, 0xf4, 0x50, - 0x0b, 0xa2, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x79, 0x28, 0x07, 0x77, - 0x20, 0x87, 0x72, 0x90, 0x87, 0x5f, 0xa0, 0x87, 0x70, 0x90, 0x87, 0x73, - 0x28, 0x07, 0x7a, 0x58, 0x10, 0x85, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x84, - 0x83, 0x3c, 0x9c, 0xc3, 0x2f, 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xfc, - 0x82, 0x3b, 0x84, 0x43, 0x3b, 0x94, 0xc3, 0x02, 0xc3, 0x1c, 0xd8, 0xe1, - 0x1d, 0xc2, 0x81, 0x1e, 0xe8, 0x60, 0x01, 0x13, 0x0e, 0xe9, 0x20, 0x0f, - 0x6e, 0x10, 0x0e, 0xf2, 0x70, 0x0e, 0xbf, 0xe0, 0x0e, 0xe1, 0xd0, 0x0e, - 0xe5, 0xb0, 0x20, 0x9a, 0x05, 0x52, 0x60, 0x85, 0x5f, 0x18, 0x85, 0x77, - 0x80, 0x87, 0x7c, 0xf8, 0x05, 0x73, 0x90, 0x87, 0x70, 0x38, 0x87, 0x76, - 0x28, 0x07, 0x77, 0xa0, 0x87, 0x21, 0xc8, 0x63, 0x3d, 0xdb, 0x13, 0x06, - 0x4f, 0x1a, 0x0c, 0x81, 0x96, 0xe1, 0xb9, 0x1e, 0xec, 0xc9, 0x9e, 0xe8, - 0x91, 0x9e, 0xe9, 0xd1, 0x16, 0x30, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, - 0xf0, 0xf0, 0x0e, 0xf3, 0x90, 0x0e, 0xf4, 0x90, 0x0e, 0xef, 0xe0, 0x0e, - 0x0b, 0x94, 0x70, 0x48, 0x07, 0x79, 0x70, 0x83, 0x71, 0x28, 0x07, 0x77, - 0xa0, 0x87, 0x72, 0x90, 0x87, 0x05, 0x52, 0x38, 0xa4, 0x83, 0x3c, 0xb8, - 0x81, 0x3b, 0xbc, 0xc3, 0x2f, 0xc0, 0x43, 0x39, 0xc8, 0xc3, 0x3c, 0xc0, - 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xa4, 0x83, 0x3d, 0x94, 0xc3, 0x02, 0x04, - 0x1e, 0xde, 0x61, 0x1e, 0xd2, 0x81, 0x1e, 0xd2, 0xe1, 0x1d, 0xdc, 0x61, - 0x88, 0xb4, 0x08, 0x0f, 0xf7, 0x74, 0x0f, 0xf6, 0x78, 0x4f, 0xf4, 0x7c, - 0xcf, 0xf4, 0x80, 0xc1, 0x02, 0x29, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0xc0, - 0x1c, 0xe4, 0x21, 0x1c, 0xce, 0xa1, 0x1d, 0xca, 0xc1, 0x1d, 0xe8, 0xe1, - 0x17, 0xd2, 0xc1, 0x1d, 0xe0, 0xa1, 0x1e, 0xe8, 0x61, 0x41, 0x76, 0x0e, - 0xe5, 0xe0, 0x0e, 0xe5, 0x20, 0x0f, 0xe1, 0x40, 0x0f, 0xe5, 0x40, 0x0e, - 0x68, 0x80, 0x07, 0xf4, 0x50, 0x0e, 0xf8, 0x30, 0x0e, 0xef, 0xf0, 0x0e, - 0xf2, 0x40, 0x0e, 0xa4, 0x60, 0x0f, 0x72, 0xf0, 0x0b, 0xe6, 0x90, 0x06, - 0x0b, 0x9e, 0x70, 0x48, 0x07, 0x79, 0x70, 0x03, 0x78, 0x28, 0x07, 0x79, - 0x98, 0x07, 0x78, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x74, 0xb0, 0x87, 0x72, - 0x58, 0x60, 0x98, 0x03, 0x3b, 0xbc, 0x43, 0x38, 0xd0, 0x83, 0x1c, 0x2c, - 0x40, 0xe8, 0xa1, 0x1c, 0xf0, 0x61, 0x1c, 0xde, 0xe1, 0x1d, 0xe4, 0x81, - 0x1c, 0x86, 0x80, 0xc1, 0x62, 0x3c, 0x62, 0xf0, 0x8c, 0xc1, 0x42, 0x3c, - 0x64, 0xb0, 0x0c, 0x8b, 0xf0, 0x94, 0xc1, 0x63, 0x06, 0x0b, 0xf1, 0x9c, - 0xc1, 0x42, 0x3c, 0xd1, 0x23, 0x3d, 0xd3, 0x83, 0x06, 0x0b, 0x94, 0x70, - 0x48, 0x07, 0x79, 0x70, 0x03, 0x71, 0xa8, 0x07, 0x73, 0x30, 0x87, 0x72, - 0x90, 0x87, 0x05, 0x4f, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0x81, 0x38, 0xd4, - 0x83, 0x39, 0x98, 0x43, 0x39, 0xc8, 0xc3, 0x2f, 0xcc, 0x43, 0x3a, 0xe8, - 0x43, 0x39, 0x2c, 0x90, 0xc2, 0x21, 0x1d, 0xe4, 0xc1, 0x0d, 0xd8, 0xe1, - 0x1d, 0xc6, 0x21, 0x1c, 0xe8, 0x21, 0x1d, 0xde, 0xc1, 0x1d, 0x7e, 0x21, - 0x1d, 0xdc, 0x81, 0x1c, 0xca, 0x01, 0x1f, 0x16, 0x20, 0xe1, 0x90, 0x0e, - 0xf2, 0xe0, 0x06, 0xf2, 0x50, 0x0e, 0xe1, 0x40, 0x0e, 0x0b, 0xa2, 0x70, - 0x48, 0x07, 0x79, 0x70, 0x83, 0x70, 0x90, 0x87, 0x73, 0xf8, 0x05, 0x7a, - 0xc8, 0x07, 0x78, 0x28, 0x87, 0x5f, 0x98, 0x87, 0x74, 0xd0, 0x87, 0x72, - 0x58, 0x70, 0x85, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0x84, 0x83, 0x3c, 0x9c, - 0xc3, 0x2f, 0xd0, 0x43, 0x3e, 0xc0, 0x43, 0x39, 0xfc, 0x42, 0x38, 0xb0, - 0x43, 0x3a, 0x9c, 0x83, 0x3b, 0xfc, 0xc2, 0x3c, 0xa4, 0x83, 0x3e, 0x94, - 0xc3, 0x82, 0x61, 0x1c, 0xde, 0x81, 0x1d, 0x86, 0x50, 0xcb, 0xf1, 0xa8, - 0xc1, 0x43, 0x06, 0xcb, 0xb0, 0x08, 0xcf, 0x1a, 0x3c, 0xd1, 0xc3, 0x06, - 0xcf, 0xf4, 0xb4, 0xc1, 0x82, 0x25, 0x1c, 0xd2, 0x41, 0x1e, 0xdc, 0x80, - 0x1e, 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0x16, 0x28, - 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xf3, 0x10, 0x0e, 0xed, 0x00, 0x0f, - 0xec, 0x50, 0x0e, 0x0b, 0x30, 0x7a, 0x28, 0x07, 0x7c, 0xa0, 0x87, 0x7a, - 0x90, 0x87, 0x72, 0x90, 0x03, 0x72, 0xe0, 0x03, 0x73, 0x60, 0x87, 0x77, - 0x08, 0x07, 0x7a, 0x60, 0x03, 0x30, 0x98, 0x87, 0x70, 0x68, 0x07, 0x78, - 0x60, 0x87, 0x72, 0xf0, 0x83, 0x05, 0x03, 0x3d, 0x94, 0x03, 0x3e, 0x0c, - 0x31, 0x9e, 0x37, 0x78, 0xde, 0x00, 0x42, 0x86, 0x18, 0x0f, 0x1c, 0x3c, - 0x71, 0x00, 0x21, 0x0b, 0x9e, 0x77, 0x68, 0x07, 0x77, 0x48, 0x07, 0x78, - 0x78, 0x07, 0x7a, 0x28, 0x07, 0x77, 0xa0, 0x07, 0x30, 0x18, 0x07, 0x74, - 0x08, 0x07, 0x79, 0x18, 0x22, 0x3c, 0x72, 0xb0, 0x20, 0x9a, 0x85, 0x74, - 0x68, 0x07, 0x78, 0x60, 0x87, 0x72, 0x00, 0x83, 0x51, 0x78, 0x83, 0x51, - 0x58, 0x83, 0x35, 0x00, 0x03, 0x5a, 0x10, 0x85, 0x50, 0x08, 0x85, 0x11, - 0x0a, 0x3b, 0xb0, 0x83, 0x3d, 0xb4, 0x83, 0x1b, 0xa4, 0x03, 0x39, 0x94, - 0x83, 0x3b, 0xd0, 0xc3, 0x94, 0x00, 0x18, 0xb1, 0x84, 0x43, 0x3a, 0xc8, - 0x83, 0x1b, 0xd8, 0x43, 0x39, 0xc8, 0xc3, 0x3c, 0xa4, 0xc3, 0x3b, 0xb8, - 0xc3, 0x94, 0x40, 0x18, 0x41, 0x85, 0x43, 0x3a, 0xc8, 0x83, 0x1b, 0xb0, - 0x43, 0x38, 0xb8, 0xc3, 0x39, 0xd4, 0x43, 0x38, 0x9c, 0x43, 0x39, 0xfc, - 0x82, 0x3d, 0x94, 0x83, 0x3c, 0xcc, 0x43, 0x3a, 0xbc, 0x83, 0x3b, 0x4c, - 0x09, 0x86, 0x11, 0x53, 0x38, 0xa4, 0x83, 0x3c, 0xb8, 0xc1, 0x38, 0xbc, - 0x43, 0x3b, 0xc0, 0x43, 0x3a, 0xb0, 0x43, 0x39, 0xfc, 0xc2, 0x3b, 0xc0, - 0x03, 0x3d, 0xa4, 0xc3, 0x3b, 0xb8, 0xc3, 0x3c, 0x4c, 0x21, 0x8a, 0x23, - 0x59, 0x46, 0x30, 0xe1, 0x90, 0x0e, 0xf2, 0xe0, 0x06, 0xe6, 0x20, 0x0f, - 0xe1, 0x70, 0x0e, 0xed, 0x50, 0x0e, 0xee, 0x40, 0x0f, 0x53, 0x82, 0x06, - 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x33, - 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, - 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, - 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, - 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, - 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, - 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, - 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, - 0x87, 0x70, 0x20, 0x07, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x00, 0x06, 0x10, 0xb1, 0x5d, 0xf9, 0x73, 0xce, 0x83, 0xfd, - 0x45, 0x04, 0x18, 0x0c, 0xd1, 0x4c, 0x16, 0xb0, 0x01, 0x48, 0xe4, 0x4b, - 0x00, 0xf3, 0x2c, 0xc4, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0xc4, 0x6f, 0x0f, - 0x7e, 0x85, 0x17, 0xb7, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x1f, - 0x00, 0x00, 0x00, 0x13, 0x04, 0x41, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x04, 0xeb, 0xdd, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x3f, 0x80, 0xd8, 0x08, 0x00, 0xa9, 0x1a, 0x18, 0x01, 0xa0, 0x64, - 0x0a, 0x1b, 0x08, 0x8c, 0x00, 0x00, 0x00, 0x23, 0x06, 0xca, 0x10, 0x48, - 0x87, 0x90, 0x10, 0xc5, 0x10, 0x50, 0x52, 0x4c, 0x08, 0xe4, 0x93, 0x41, - 0x38, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x96, 0xc0, 0x54, 0x44, 0x34, - 0xf9, 0x82, 0x43, 0x44, 0x02, 0x41, 0x9b, 0x02, 0x53, 0x11, 0xd1, 0xe4, - 0x0b, 0x0e, 0x11, 0x09, 0x44, 0x6d, 0x0c, 0xca, 0x44, 0x5c, 0xbe, 0xe0, - 0x10, 0x91, 0x40, 0xd8, 0xc2, 0x20, 0x38, 0x0b, 0x00, 0x00, 0x00, 0x01, - 0x31, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x5b, 0x86, 0x20, 0x70, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; -const unsigned int sdl_metallib_len = 9508; diff --git a/src/render/metal/build-metal-shaders.sh b/src/render/metal/build-metal-shaders.sh old mode 100644 new mode 100755 index 42e9a2298b219..8ebf63eaba2e3 --- a/src/render/metal/build-metal-shaders.sh +++ b/src/render/metal/build-metal-shaders.sh @@ -2,12 +2,17 @@ set -x set -e - cd `dirname "$0"` -rm -f sdl.air sdl.metalar sdl.metallib -/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metal -std=osx-metal1.1 -Wall -O3 -o ./sdl.air ./SDL_shaders_metal.metal -/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metal-ar rc sdl.metalar sdl.air -/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metallib -o sdl.metallib sdl.metalar -xxd -i sdl.metallib |perl -w -p -e 's/\Aunsigned /const unsigned /;' >./SDL_shaders_metal.c -rm -f sdl.air sdl.metalar sdl.metallib +generate_shaders() +{ + platform=$1 + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metal -std=$platform-metal1.1 -Wall -O3 -o ./sdl.air ./SDL_shaders_metal.metal || exit $? + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metal-ar rc sdl.metalar sdl.air || exit $? + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/usr/bin/metallib -o sdl.metallib sdl.metalar || exit $? + xxd -i sdl.metallib | perl -w -p -e 's/\Aunsigned /const unsigned /;' >./SDL_shaders_metal_$platform.h + rm -f sdl.air sdl.metalar sdl.metallib +} + +generate_shaders osx +generate_shaders ios