diff --git a/ADVect/ADVect.cpp b/ADVect/ADVect.cpp index 5349359..fcaeadc 100644 --- a/ADVect/ADVect.cpp +++ b/ADVect/ADVect.cpp @@ -25,16 +25,10 @@ namespace { NVL::String speaker; u32 scene_pos = 0; - char* date; } namespace ADVect { void Init(std::string name, const std::vector& sc) { - std::time_t now_time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); - date = std::ctime(&now_time); - date[10] = '\0'; - date = &date[4]; - m_name = name; scenes = sc; // sure make a copy whatever @@ -151,7 +145,7 @@ namespace ADVect { bgfx::dbgTextClear(); - bgfx::dbgTextPrintf(0, 44, 0xF0, "NouVeL x ADVect :: %s 2022", date); + bgfx::dbgTextPrintf(0, 44, 0xF0, "NouVeL x ADVect :: %s %s", __DATE__, __TIME__); bgfx::dbgTextPrintf(0, 43, 0xF0, "Current Position: %u", scene_pos); bgfx::dbgTextPrintf(0, 42, 0xF0, "Current Scene: %s", NVL::to_std_string(scenes[current_scene].name).c_str()); diff --git a/ADVect/CMakeLists.txt b/ADVect/CMakeLists.txt index 435fbae..d2aed14 100644 --- a/ADVect/CMakeLists.txt +++ b/ADVect/CMakeLists.txt @@ -12,8 +12,9 @@ include_directories ("include" "../NVL/") add_subdirectory("ext/freetype") add_subdirectory("ext/bgfx") if (WIN32) - target_link_libraries (Game ${PROJECT_SOURCE_DIR}/lib/SDL2.lib ${PROJECT_SOURCE_DIR}/lib/SDL2main.lib NVL freetype bgfx bx) + include_directories("include_windows") + target_link_libraries (Game PRIVATE ${PROJECT_SOURCE_DIR}/lib/SDL2.lib ${PROJECT_SOURCE_DIR}/lib/SDL2main.lib NVL freetype bgfx bx) else () - target_link_libraries (Game NVL freetype bgfx bx) - add_compile_options(-lSDL2) + find_package(SDL2 REQUIRED) + target_link_libraries (Game PRIVATE NVL freetype bgfx bx SDL2::SDL2 SDL2::SDL2main) endif () \ No newline at end of file diff --git a/ADVect/Graphics.cpp b/ADVect/Graphics.cpp index 997e969..f6dacb1 100644 --- a/ADVect/Graphics.cpp +++ b/ADVect/Graphics.cpp @@ -14,14 +14,14 @@ namespace { FT_Error error; FT_Face face_regular, face_bold; - static struct PosUVVertex - { + struct PosUVVertex { f32 x; f32 y; f32 z; f32 u; f32 v; - } quad_vert[] = + }; + static PosUVVertex quad_vert[] = { { 0.f, 0.f, 0.0f, 0.0f, 0.0f }, { 0.f, 1.f, 0.0f, 0.0f, 1.0f }, diff --git a/ADVect/include/SDL2/SDL.h b/ADVect/include_windows/SDL2/SDL.h similarity index 100% rename from ADVect/include/SDL2/SDL.h rename to ADVect/include_windows/SDL2/SDL.h diff --git a/ADVect/include/SDL2/SDL_assert.h b/ADVect/include_windows/SDL2/SDL_assert.h similarity index 100% rename from ADVect/include/SDL2/SDL_assert.h rename to ADVect/include_windows/SDL2/SDL_assert.h diff --git a/ADVect/include/SDL2/SDL_atomic.h b/ADVect/include_windows/SDL2/SDL_atomic.h similarity index 100% rename from ADVect/include/SDL2/SDL_atomic.h rename to ADVect/include_windows/SDL2/SDL_atomic.h diff --git a/ADVect/include/SDL2/SDL_audio.h b/ADVect/include_windows/SDL2/SDL_audio.h similarity index 100% rename from ADVect/include/SDL2/SDL_audio.h rename to ADVect/include_windows/SDL2/SDL_audio.h diff --git a/ADVect/include/SDL2/SDL_bits.h b/ADVect/include_windows/SDL2/SDL_bits.h similarity index 100% rename from ADVect/include/SDL2/SDL_bits.h rename to ADVect/include_windows/SDL2/SDL_bits.h diff --git a/ADVect/include/SDL2/SDL_blendmode.h b/ADVect/include_windows/SDL2/SDL_blendmode.h similarity index 100% rename from ADVect/include/SDL2/SDL_blendmode.h rename to ADVect/include_windows/SDL2/SDL_blendmode.h diff --git a/ADVect/include/SDL2/SDL_clipboard.h b/ADVect/include_windows/SDL2/SDL_clipboard.h similarity index 100% rename from ADVect/include/SDL2/SDL_clipboard.h rename to ADVect/include_windows/SDL2/SDL_clipboard.h diff --git a/ADVect/include/SDL2/SDL_config.h b/ADVect/include_windows/SDL2/SDL_config.h similarity index 100% rename from ADVect/include/SDL2/SDL_config.h rename to ADVect/include_windows/SDL2/SDL_config.h diff --git a/ADVect/include/SDL2/SDL_config.h.cmake b/ADVect/include_windows/SDL2/SDL_config.h.cmake similarity index 100% rename from ADVect/include/SDL2/SDL_config.h.cmake rename to ADVect/include_windows/SDL2/SDL_config.h.cmake diff --git a/ADVect/include/SDL2/SDL_config.h.in b/ADVect/include_windows/SDL2/SDL_config.h.in similarity index 100% rename from ADVect/include/SDL2/SDL_config.h.in rename to ADVect/include_windows/SDL2/SDL_config.h.in diff --git a/ADVect/include/SDL2/SDL_config_android.h b/ADVect/include_windows/SDL2/SDL_config_android.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_android.h rename to ADVect/include_windows/SDL2/SDL_config_android.h diff --git a/ADVect/include/SDL2/SDL_config_iphoneos.h b/ADVect/include_windows/SDL2/SDL_config_iphoneos.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_iphoneos.h rename to ADVect/include_windows/SDL2/SDL_config_iphoneos.h diff --git a/ADVect/include/SDL2/SDL_config_macosx.h b/ADVect/include_windows/SDL2/SDL_config_macosx.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_macosx.h rename to ADVect/include_windows/SDL2/SDL_config_macosx.h diff --git a/ADVect/include/SDL2/SDL_config_macosx.h.orig b/ADVect/include_windows/SDL2/SDL_config_macosx.h.orig similarity index 100% rename from ADVect/include/SDL2/SDL_config_macosx.h.orig rename to ADVect/include_windows/SDL2/SDL_config_macosx.h.orig diff --git a/ADVect/include/SDL2/SDL_config_minimal.h b/ADVect/include_windows/SDL2/SDL_config_minimal.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_minimal.h rename to ADVect/include_windows/SDL2/SDL_config_minimal.h diff --git a/ADVect/include/SDL2/SDL_config_pandora.h b/ADVect/include_windows/SDL2/SDL_config_pandora.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_pandora.h rename to ADVect/include_windows/SDL2/SDL_config_pandora.h diff --git a/ADVect/include/SDL2/SDL_config_psp.h b/ADVect/include_windows/SDL2/SDL_config_psp.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_psp.h rename to ADVect/include_windows/SDL2/SDL_config_psp.h diff --git a/ADVect/include/SDL2/SDL_config_windows.h b/ADVect/include_windows/SDL2/SDL_config_windows.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_windows.h rename to ADVect/include_windows/SDL2/SDL_config_windows.h diff --git a/ADVect/include/SDL2/SDL_config_winrt.h b/ADVect/include_windows/SDL2/SDL_config_winrt.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_winrt.h rename to ADVect/include_windows/SDL2/SDL_config_winrt.h diff --git a/ADVect/include/SDL2/SDL_config_wiz.h b/ADVect/include_windows/SDL2/SDL_config_wiz.h similarity index 100% rename from ADVect/include/SDL2/SDL_config_wiz.h rename to ADVect/include_windows/SDL2/SDL_config_wiz.h diff --git a/ADVect/include/SDL2/SDL_copying.h b/ADVect/include_windows/SDL2/SDL_copying.h similarity index 100% rename from ADVect/include/SDL2/SDL_copying.h rename to ADVect/include_windows/SDL2/SDL_copying.h diff --git a/ADVect/include/SDL2/SDL_cpuinfo.h b/ADVect/include_windows/SDL2/SDL_cpuinfo.h similarity index 100% rename from ADVect/include/SDL2/SDL_cpuinfo.h rename to ADVect/include_windows/SDL2/SDL_cpuinfo.h diff --git a/ADVect/include/SDL2/SDL_egl.h b/ADVect/include_windows/SDL2/SDL_egl.h similarity index 100% rename from ADVect/include/SDL2/SDL_egl.h rename to ADVect/include_windows/SDL2/SDL_egl.h diff --git a/ADVect/include/SDL2/SDL_endian.h b/ADVect/include_windows/SDL2/SDL_endian.h similarity index 100% rename from ADVect/include/SDL2/SDL_endian.h rename to ADVect/include_windows/SDL2/SDL_endian.h diff --git a/ADVect/include/SDL2/SDL_error.h b/ADVect/include_windows/SDL2/SDL_error.h similarity index 100% rename from ADVect/include/SDL2/SDL_error.h rename to ADVect/include_windows/SDL2/SDL_error.h diff --git a/ADVect/include/SDL2/SDL_events.h b/ADVect/include_windows/SDL2/SDL_events.h similarity index 100% rename from ADVect/include/SDL2/SDL_events.h rename to ADVect/include_windows/SDL2/SDL_events.h diff --git a/ADVect/include/SDL2/SDL_filesystem.h b/ADVect/include_windows/SDL2/SDL_filesystem.h similarity index 100% rename from ADVect/include/SDL2/SDL_filesystem.h rename to ADVect/include_windows/SDL2/SDL_filesystem.h diff --git a/ADVect/include/SDL2/SDL_gamecontroller.h b/ADVect/include_windows/SDL2/SDL_gamecontroller.h similarity index 100% rename from ADVect/include/SDL2/SDL_gamecontroller.h rename to ADVect/include_windows/SDL2/SDL_gamecontroller.h diff --git a/ADVect/include/SDL2/SDL_gesture.h b/ADVect/include_windows/SDL2/SDL_gesture.h similarity index 100% rename from ADVect/include/SDL2/SDL_gesture.h rename to ADVect/include_windows/SDL2/SDL_gesture.h diff --git a/ADVect/include/SDL2/SDL_haptic.h b/ADVect/include_windows/SDL2/SDL_haptic.h similarity index 100% rename from ADVect/include/SDL2/SDL_haptic.h rename to ADVect/include_windows/SDL2/SDL_haptic.h diff --git a/ADVect/include/SDL2/SDL_hidapi.h b/ADVect/include_windows/SDL2/SDL_hidapi.h similarity index 100% rename from ADVect/include/SDL2/SDL_hidapi.h rename to ADVect/include_windows/SDL2/SDL_hidapi.h diff --git a/ADVect/include/SDL2/SDL_hints.h b/ADVect/include_windows/SDL2/SDL_hints.h similarity index 100% rename from ADVect/include/SDL2/SDL_hints.h rename to ADVect/include_windows/SDL2/SDL_hints.h diff --git a/ADVect/include/SDL2/SDL_joystick.h b/ADVect/include_windows/SDL2/SDL_joystick.h similarity index 100% rename from ADVect/include/SDL2/SDL_joystick.h rename to ADVect/include_windows/SDL2/SDL_joystick.h diff --git a/ADVect/include/SDL2/SDL_keyboard.h b/ADVect/include_windows/SDL2/SDL_keyboard.h similarity index 100% rename from ADVect/include/SDL2/SDL_keyboard.h rename to ADVect/include_windows/SDL2/SDL_keyboard.h diff --git a/ADVect/include/SDL2/SDL_keycode.h b/ADVect/include_windows/SDL2/SDL_keycode.h similarity index 100% rename from ADVect/include/SDL2/SDL_keycode.h rename to ADVect/include_windows/SDL2/SDL_keycode.h diff --git a/ADVect/include/SDL2/SDL_loadso.h b/ADVect/include_windows/SDL2/SDL_loadso.h similarity index 100% rename from ADVect/include/SDL2/SDL_loadso.h rename to ADVect/include_windows/SDL2/SDL_loadso.h diff --git a/ADVect/include/SDL2/SDL_locale.h b/ADVect/include_windows/SDL2/SDL_locale.h similarity index 100% rename from ADVect/include/SDL2/SDL_locale.h rename to ADVect/include_windows/SDL2/SDL_locale.h diff --git a/ADVect/include/SDL2/SDL_log.h b/ADVect/include_windows/SDL2/SDL_log.h similarity index 100% rename from ADVect/include/SDL2/SDL_log.h rename to ADVect/include_windows/SDL2/SDL_log.h diff --git a/ADVect/include/SDL2/SDL_main.h b/ADVect/include_windows/SDL2/SDL_main.h similarity index 100% rename from ADVect/include/SDL2/SDL_main.h rename to ADVect/include_windows/SDL2/SDL_main.h diff --git a/ADVect/include/SDL2/SDL_messagebox.h b/ADVect/include_windows/SDL2/SDL_messagebox.h similarity index 100% rename from ADVect/include/SDL2/SDL_messagebox.h rename to ADVect/include_windows/SDL2/SDL_messagebox.h diff --git a/ADVect/include/SDL2/SDL_metal.h b/ADVect/include_windows/SDL2/SDL_metal.h similarity index 100% rename from ADVect/include/SDL2/SDL_metal.h rename to ADVect/include_windows/SDL2/SDL_metal.h diff --git a/ADVect/include/SDL2/SDL_misc.h b/ADVect/include_windows/SDL2/SDL_misc.h similarity index 100% rename from ADVect/include/SDL2/SDL_misc.h rename to ADVect/include_windows/SDL2/SDL_misc.h diff --git a/ADVect/include/SDL2/SDL_mouse.h b/ADVect/include_windows/SDL2/SDL_mouse.h similarity index 100% rename from ADVect/include/SDL2/SDL_mouse.h rename to ADVect/include_windows/SDL2/SDL_mouse.h diff --git a/ADVect/include/SDL2/SDL_mutex.h b/ADVect/include_windows/SDL2/SDL_mutex.h similarity index 100% rename from ADVect/include/SDL2/SDL_mutex.h rename to ADVect/include_windows/SDL2/SDL_mutex.h diff --git a/ADVect/include/SDL2/SDL_name.h b/ADVect/include_windows/SDL2/SDL_name.h similarity index 100% rename from ADVect/include/SDL2/SDL_name.h rename to ADVect/include_windows/SDL2/SDL_name.h diff --git a/ADVect/include/SDL2/SDL_opengl.h b/ADVect/include_windows/SDL2/SDL_opengl.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengl.h rename to ADVect/include_windows/SDL2/SDL_opengl.h diff --git a/ADVect/include/SDL2/SDL_opengl_glext.h b/ADVect/include_windows/SDL2/SDL_opengl_glext.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengl_glext.h rename to ADVect/include_windows/SDL2/SDL_opengl_glext.h diff --git a/ADVect/include/SDL2/SDL_opengles.h b/ADVect/include_windows/SDL2/SDL_opengles.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengles.h rename to ADVect/include_windows/SDL2/SDL_opengles.h diff --git a/ADVect/include/SDL2/SDL_opengles2.h b/ADVect/include_windows/SDL2/SDL_opengles2.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengles2.h rename to ADVect/include_windows/SDL2/SDL_opengles2.h diff --git a/ADVect/include/SDL2/SDL_opengles2_gl2.h b/ADVect/include_windows/SDL2/SDL_opengles2_gl2.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengles2_gl2.h rename to ADVect/include_windows/SDL2/SDL_opengles2_gl2.h diff --git a/ADVect/include/SDL2/SDL_opengles2_gl2ext.h b/ADVect/include_windows/SDL2/SDL_opengles2_gl2ext.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengles2_gl2ext.h rename to ADVect/include_windows/SDL2/SDL_opengles2_gl2ext.h diff --git a/ADVect/include/SDL2/SDL_opengles2_gl2platform.h b/ADVect/include_windows/SDL2/SDL_opengles2_gl2platform.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengles2_gl2platform.h rename to ADVect/include_windows/SDL2/SDL_opengles2_gl2platform.h diff --git a/ADVect/include/SDL2/SDL_opengles2_khrplatform.h b/ADVect/include_windows/SDL2/SDL_opengles2_khrplatform.h similarity index 100% rename from ADVect/include/SDL2/SDL_opengles2_khrplatform.h rename to ADVect/include_windows/SDL2/SDL_opengles2_khrplatform.h diff --git a/ADVect/include/SDL2/SDL_pixels.h b/ADVect/include_windows/SDL2/SDL_pixels.h similarity index 100% rename from ADVect/include/SDL2/SDL_pixels.h rename to ADVect/include_windows/SDL2/SDL_pixels.h diff --git a/ADVect/include/SDL2/SDL_platform.h b/ADVect/include_windows/SDL2/SDL_platform.h similarity index 100% rename from ADVect/include/SDL2/SDL_platform.h rename to ADVect/include_windows/SDL2/SDL_platform.h diff --git a/ADVect/include/SDL2/SDL_power.h b/ADVect/include_windows/SDL2/SDL_power.h similarity index 100% rename from ADVect/include/SDL2/SDL_power.h rename to ADVect/include_windows/SDL2/SDL_power.h diff --git a/ADVect/include/SDL2/SDL_quit.h b/ADVect/include_windows/SDL2/SDL_quit.h similarity index 100% rename from ADVect/include/SDL2/SDL_quit.h rename to ADVect/include_windows/SDL2/SDL_quit.h diff --git a/ADVect/include/SDL2/SDL_rect.h b/ADVect/include_windows/SDL2/SDL_rect.h similarity index 100% rename from ADVect/include/SDL2/SDL_rect.h rename to ADVect/include_windows/SDL2/SDL_rect.h diff --git a/ADVect/include/SDL2/SDL_render.h b/ADVect/include_windows/SDL2/SDL_render.h similarity index 100% rename from ADVect/include/SDL2/SDL_render.h rename to ADVect/include_windows/SDL2/SDL_render.h diff --git a/ADVect/include/SDL2/SDL_revision.h b/ADVect/include_windows/SDL2/SDL_revision.h similarity index 100% rename from ADVect/include/SDL2/SDL_revision.h rename to ADVect/include_windows/SDL2/SDL_revision.h diff --git a/ADVect/include/SDL2/SDL_rwops.h b/ADVect/include_windows/SDL2/SDL_rwops.h similarity index 100% rename from ADVect/include/SDL2/SDL_rwops.h rename to ADVect/include_windows/SDL2/SDL_rwops.h diff --git a/ADVect/include/SDL2/SDL_scancode.h b/ADVect/include_windows/SDL2/SDL_scancode.h similarity index 100% rename from ADVect/include/SDL2/SDL_scancode.h rename to ADVect/include_windows/SDL2/SDL_scancode.h diff --git a/ADVect/include/SDL2/SDL_sensor.h b/ADVect/include_windows/SDL2/SDL_sensor.h similarity index 100% rename from ADVect/include/SDL2/SDL_sensor.h rename to ADVect/include_windows/SDL2/SDL_sensor.h diff --git a/ADVect/include/SDL2/SDL_shape.h b/ADVect/include_windows/SDL2/SDL_shape.h similarity index 100% rename from ADVect/include/SDL2/SDL_shape.h rename to ADVect/include_windows/SDL2/SDL_shape.h diff --git a/ADVect/include/SDL2/SDL_stdinc.h b/ADVect/include_windows/SDL2/SDL_stdinc.h similarity index 100% rename from ADVect/include/SDL2/SDL_stdinc.h rename to ADVect/include_windows/SDL2/SDL_stdinc.h diff --git a/ADVect/include/SDL2/SDL_surface.h b/ADVect/include_windows/SDL2/SDL_surface.h similarity index 100% rename from ADVect/include/SDL2/SDL_surface.h rename to ADVect/include_windows/SDL2/SDL_surface.h diff --git a/ADVect/include/SDL2/SDL_system.h b/ADVect/include_windows/SDL2/SDL_system.h similarity index 100% rename from ADVect/include/SDL2/SDL_system.h rename to ADVect/include_windows/SDL2/SDL_system.h diff --git a/ADVect/include/SDL2/SDL_syswm.h b/ADVect/include_windows/SDL2/SDL_syswm.h similarity index 100% rename from ADVect/include/SDL2/SDL_syswm.h rename to ADVect/include_windows/SDL2/SDL_syswm.h diff --git a/ADVect/include/SDL2/SDL_test.h b/ADVect/include_windows/SDL2/SDL_test.h similarity index 100% rename from ADVect/include/SDL2/SDL_test.h rename to ADVect/include_windows/SDL2/SDL_test.h diff --git a/ADVect/include/SDL2/SDL_test_assert.h b/ADVect/include_windows/SDL2/SDL_test_assert.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_assert.h rename to ADVect/include_windows/SDL2/SDL_test_assert.h diff --git a/ADVect/include/SDL2/SDL_test_common.h b/ADVect/include_windows/SDL2/SDL_test_common.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_common.h rename to ADVect/include_windows/SDL2/SDL_test_common.h diff --git a/ADVect/include/SDL2/SDL_test_compare.h b/ADVect/include_windows/SDL2/SDL_test_compare.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_compare.h rename to ADVect/include_windows/SDL2/SDL_test_compare.h diff --git a/ADVect/include/SDL2/SDL_test_crc32.h b/ADVect/include_windows/SDL2/SDL_test_crc32.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_crc32.h rename to ADVect/include_windows/SDL2/SDL_test_crc32.h diff --git a/ADVect/include/SDL2/SDL_test_font.h b/ADVect/include_windows/SDL2/SDL_test_font.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_font.h rename to ADVect/include_windows/SDL2/SDL_test_font.h diff --git a/ADVect/include/SDL2/SDL_test_fuzzer.h b/ADVect/include_windows/SDL2/SDL_test_fuzzer.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_fuzzer.h rename to ADVect/include_windows/SDL2/SDL_test_fuzzer.h diff --git a/ADVect/include/SDL2/SDL_test_harness.h b/ADVect/include_windows/SDL2/SDL_test_harness.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_harness.h rename to ADVect/include_windows/SDL2/SDL_test_harness.h diff --git a/ADVect/include/SDL2/SDL_test_images.h b/ADVect/include_windows/SDL2/SDL_test_images.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_images.h rename to ADVect/include_windows/SDL2/SDL_test_images.h diff --git a/ADVect/include/SDL2/SDL_test_log.h b/ADVect/include_windows/SDL2/SDL_test_log.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_log.h rename to ADVect/include_windows/SDL2/SDL_test_log.h diff --git a/ADVect/include/SDL2/SDL_test_md5.h b/ADVect/include_windows/SDL2/SDL_test_md5.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_md5.h rename to ADVect/include_windows/SDL2/SDL_test_md5.h diff --git a/ADVect/include/SDL2/SDL_test_memory.h b/ADVect/include_windows/SDL2/SDL_test_memory.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_memory.h rename to ADVect/include_windows/SDL2/SDL_test_memory.h diff --git a/ADVect/include/SDL2/SDL_test_random.h b/ADVect/include_windows/SDL2/SDL_test_random.h similarity index 100% rename from ADVect/include/SDL2/SDL_test_random.h rename to ADVect/include_windows/SDL2/SDL_test_random.h diff --git a/ADVect/include/SDL2/SDL_thread.h b/ADVect/include_windows/SDL2/SDL_thread.h similarity index 100% rename from ADVect/include/SDL2/SDL_thread.h rename to ADVect/include_windows/SDL2/SDL_thread.h diff --git a/ADVect/include/SDL2/SDL_timer.h b/ADVect/include_windows/SDL2/SDL_timer.h similarity index 100% rename from ADVect/include/SDL2/SDL_timer.h rename to ADVect/include_windows/SDL2/SDL_timer.h diff --git a/ADVect/include/SDL2/SDL_touch.h b/ADVect/include_windows/SDL2/SDL_touch.h similarity index 100% rename from ADVect/include/SDL2/SDL_touch.h rename to ADVect/include_windows/SDL2/SDL_touch.h diff --git a/ADVect/include/SDL2/SDL_types.h b/ADVect/include_windows/SDL2/SDL_types.h similarity index 100% rename from ADVect/include/SDL2/SDL_types.h rename to ADVect/include_windows/SDL2/SDL_types.h diff --git a/ADVect/include/SDL2/SDL_version.h b/ADVect/include_windows/SDL2/SDL_version.h similarity index 100% rename from ADVect/include/SDL2/SDL_version.h rename to ADVect/include_windows/SDL2/SDL_version.h diff --git a/ADVect/include/SDL2/SDL_video.h b/ADVect/include_windows/SDL2/SDL_video.h similarity index 100% rename from ADVect/include/SDL2/SDL_video.h rename to ADVect/include_windows/SDL2/SDL_video.h diff --git a/ADVect/include/SDL2/SDL_vulkan.h b/ADVect/include_windows/SDL2/SDL_vulkan.h similarity index 100% rename from ADVect/include/SDL2/SDL_vulkan.h rename to ADVect/include_windows/SDL2/SDL_vulkan.h diff --git a/ADVect/include/SDL2/begin_code.h b/ADVect/include_windows/SDL2/begin_code.h similarity index 100% rename from ADVect/include/SDL2/begin_code.h rename to ADVect/include_windows/SDL2/begin_code.h diff --git a/ADVect/include/SDL2/close_code.h b/ADVect/include_windows/SDL2/close_code.h similarity index 100% rename from ADVect/include/SDL2/close_code.h rename to ADVect/include_windows/SDL2/close_code.h diff --git a/ADVect/shader.py b/ADVect/shader.py index f0eb8e0..8961612 100644 --- a/ADVect/shader.py +++ b/ADVect/shader.py @@ -1,7 +1,7 @@ import subprocess, os plats = [ - { 'location': 'glsl', 'frag': '440', 'vert': '440' }, + { 'location': 'glsl', 'frag': '140', 'vert': '140' }, { 'location': 'dx11', 'frag': 'ps_5_0', 'vert': 'vs_5_0' }, { 'location': 'spirv', 'frag': 'spirv', 'vert': 'spirv' } ] diff --git a/ADVect/shaders/swizzle_aaaa/swizzle_aaaa.frag b/ADVect/shaders/swizzle_aaaa/swizzle_aaaa.frag index 6181bc8..f13c668 100644 --- a/ADVect/shaders/swizzle_aaaa/swizzle_aaaa.frag +++ b/ADVect/shaders/swizzle_aaaa/swizzle_aaaa.frag @@ -7,6 +7,6 @@ SAMPLER2D(s_texColor, 0); void main() { - vec2 uv = { v_texcoord0.x, 1.0f - v_texcoord0.y }; + vec2 uv = vec2(v_texcoord0.x, 1.0f - v_texcoord0.y); gl_FragColor = vec4(1.0, 1.0, 1.0, texture2D(s_texColor, uv).a); } diff --git a/ADVect/shaders/test/test.frag b/ADVect/shaders/test/test.frag index b4773bc..04671ca 100644 --- a/ADVect/shaders/test/test.frag +++ b/ADVect/shaders/test/test.frag @@ -7,6 +7,6 @@ SAMPLER2D(s_texColor, 0); void main() { - vec2 uv = { v_texcoord0.x, 1.0f - v_texcoord0.y }; + vec2 uv = vec2(v_texcoord0.x, 1.0f - v_texcoord0.y); gl_FragColor = texture2D(s_texColor, uv); } diff --git a/CMakeSettings.json b/CMakeSettings.json index 8ae910e..c756a11 100644 --- a/CMakeSettings.json +++ b/CMakeSettings.json @@ -11,6 +11,18 @@ "buildCommandArgs": "", "ctestCommandArgs": "", "intelliSenseMode": "windows-clang-x64" + }, + { + "name": "x64-Release", + "generator": "Ninja", + "configurationType": "RelWithDebInfo", + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "", + "inheritEnvironments": [ "msvc_x64_x64" ], + "variables": [] } ] } \ No newline at end of file diff --git a/NVL/CMakeLists.txt b/NVL/CMakeLists.txt index 7102d80..7926c16 100644 --- a/NVL/CMakeLists.txt +++ b/NVL/CMakeLists.txt @@ -4,6 +4,7 @@ cmake_minimum_required (VERSION 3.8) project (NVL) +include_directories("include") add_library (NVL STATIC "NouVeL.cpp" "Parser.cpp" "Environment.cpp" "Environment.h" "Common.h") # add_executable (NVL "NouVeL.cpp" "Parser.cpp" "Environment.cpp" "Environment.h" "Common.h" ) diff --git a/NVL/Environment.h b/NVL/Environment.h index 2510ce5..d544950 100644 --- a/NVL/Environment.h +++ b/NVL/Environment.h @@ -41,5 +41,6 @@ namespace NVL::Environment { struct Markup { u32 begin, end; std::vector>> efs; - } UnpackMarkupVariable(const Variable& m); + }; + Markup UnpackMarkupVariable(const Variable& m); } diff --git a/NVL/Parser.cpp b/NVL/Parser.cpp index b379851..1a2d27c 100644 --- a/NVL/Parser.cpp +++ b/NVL/Parser.cpp @@ -5,10 +5,9 @@ #include -#include +#include #include -#include #include "Environment.h" @@ -18,10 +17,10 @@ namespace { struct ParseGroup { String accept; - operator String() const { + constexpr operator String() const { return accept; } - bool operator== (const String& other) const { + constexpr bool operator== (const String& other) const { return accept == other; } }; @@ -29,7 +28,7 @@ namespace { struct Match { String accept; - operator Char() const { + constexpr operator Char() const { if (accept.length() == 1) return accept[0]; else { @@ -37,7 +36,7 @@ namespace { return '\0'; } } - bool operator== (const String& other) const { + constexpr bool operator== (const String& other) const { return accept == other; } }; @@ -344,15 +343,16 @@ namespace { * - Vec: Params */ Parse::Object MatchMarkup(String& s) { - static const std::regex typer(R"((?:^|[^\\])\[([^\]]+)\]\s*\{([^\}]+)\})"); // G1 -> Specifiers, G2 -> Contents - static const std::regex effect(R"(\s*(?:([^,\(\)]+?)\s*\(\s*([^\(\)]+?)\s*\)|([^,\(\)]+?))\s*(?:,\s*|$))"); // G1 & G2 -> Func, G3 -> Attr - static const std::regex param(R"(([^,]+?)\s*(?:,\s*|$))"); // Comma split of func args + static const srell::basic_regex + typer(uR"((?:^|[^\\])\[([^\]]+)\]\s*\{([^\}]+)\})"), // G1 -> Specifiers, G2 -> Contents + effect(uR"(\s*(?:([^,\(\)]+?)\s*\(\s*([^\(\)]+?)\s*\)|([^,\(\)]+?))\s*(?:,\s*|$))"), // G1 & G2 -> Func, G3 -> Attr + param(uR"(([^,]+?)\s*(?:,\s*|$))"); // Comma split of func args std::vector tags; - std::match_results tags_match; - std::match_results effects_match; - std::match_results params_match; + srell::match_results tags_match; + srell::match_results effects_match; + srell::match_results params_match; String reconstruction{}; @@ -362,7 +362,7 @@ namespace { // Match tags String::const_iterator tags_start(s.cbegin()); - while (std::regex_search(tags_start, s.cend(), tags_match, typer)) { + while (srell::regex_search(tags_start, s.cend(), tags_match, typer)) { has_markup = true; Parse::Object m{ Parse::Type::Array, std::vector{} }; reconstruction.append(tags_match.prefix().first, std::next(tags_match[0].first, 1)); // match will overmatch behind by 1 @@ -381,14 +381,14 @@ namespace { // Match markup options String::const_iterator effects_start(tags_match[1].first); - while (std::regex_search(effects_start, tags_match[1].second, effects_match, effect)) { + while (srell::regex_search(effects_start, tags_match[1].second, effects_match, effect)) { if (effects_match[3].matched) { effects.push_back({ Parse::Type::String, effects_match[3].str() }); } else { std::vector args; String::const_iterator params_start(effects_match[2].first); - while (std::regex_search(params_start, effects_match[2].second, params_match, param)) { + while (srell::regex_search(params_start, effects_match[2].second, params_match, param)) { size_t temp = 0; args.push_back(ParseExpression(params_match[1].str() + SEPARATOR.accept[0], temp)); // PeekToken will freak out if I don't do this params_start = params_match.suffix().first; diff --git a/NVL/include/srell.hpp b/NVL/include/srell.hpp new file mode 100644 index 0000000..02a59bc --- /dev/null +++ b/NVL/include/srell.hpp @@ -0,0 +1,11238 @@ +/***************************************************************************** +** +** SRELL (std::regex-like library) version 4.000 +** +** Copyright (c) 2012-2022, Nozomu Katoo. All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** +** 1. Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS +** IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +****************************************************************************** +**/ + +#ifndef SRELL_REGEX_TEMPLATE_LIBRARY +#define SRELL_REGEX_TEMPLATE_LIBRARY + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cpp_unicode_characters + #ifndef SRELL_CPP11_CHAR1632_ENABLED + #define SRELL_CPP11_CHAR1632_ENABLED + #endif +#endif +#ifdef __cpp_initializer_lists +#include + #ifndef SRELL_CPP11_INITIALIZER_LIST_ENABLED + #define SRELL_CPP11_INITIALIZER_LIST_ENABLED + #endif +#endif +#ifdef __cpp_rvalue_references + #ifndef SRELL_CPP11_MOVE_ENABLED + #define SRELL_CPP11_MOVE_ENABLED + #endif +#endif +#ifdef SRELL_CPP11_MOVE_ENABLED + #if defined(_MSC_VER) && _MSC_VER < 1900 + #define SRELL_NOEXCEPT + #else + #define SRELL_NOEXCEPT noexcept + #endif +#endif +#ifdef __cpp_char8_t + #ifndef SRELL_CPP20_CHAR8_ENABLED + #ifdef __cpp_lib_char8_t + #define SRELL_CPP20_CHAR8_ENABLED 2 + #else + #define SRELL_CPP20_CHAR8_ENABLED 1 + #endif + #endif +#endif + +// The following SRELL_NO_* macros would be useful when wanting to +// reduce the size of a binary by turning off some feature(s). + +#ifdef SRELL_NO_UNICODE_DATA + +// Prevents Unicode data used for icase (case-insensitive) matching +// from being output into a resulting binary. In this case only the +// ASCII characters are case-folded when icase matching is performed +// (i.e., [A-Z] -> [a-z] only). +#define SRELL_NO_UNICODE_ICASE + +// Disables the Unicode property (\p{...} and \P{...}) and prevents +// Unicode property data from being output into a resulting binary. +#define SRELL_NO_UNICODE_PROPERTY +#endif + +// Prevents icase matching specific functions into a resulting binary. +// In this case the icase flag is ignored and icase matching becomes +// unavailable. +#ifdef SRELL_NO_ICASE +#ifndef SRELL_NO_UNICODE_ICASE +#define SRELL_NO_UNICODE_ICASE +#endif +#endif + +// This macro might be removed in the future. +#ifdef SRELL_V1_COMPATIBLE +#ifndef SRELL_NO_UNICODE_PROPERTY +#define SRELL_NO_UNICODE_PROPERTY +#endif +#ifndef SRELL_NO_VMODE +#define SRELL_NO_VMODE +#endif +#define SRELL_NO_NAMEDCAPTURE +#define SRELL_NO_SINGLELINE +#define SRELL_FIXEDWIDTHLOOKBEHIND +#endif + +namespace srell +{ +// ["regex_constants.h" ... + + namespace regex_constants + { + enum syntax_option_type + { + icase = 1 << 0, + nosubs = 1 << 1, + optimize = 1 << 2, + collate = 1 << 3, + ECMAScript = 1 << 4, + basic = 1 << 5, + extended = 1 << 6, + awk = 1 << 7, + grep = 1 << 8, + egrep = 1 << 9, + multiline = 1 << 10, + + // SRELL's extension. + dotall = 1 << 11, // singleline. + unicodesets = 1 << 12 + }; + + inline syntax_option_type operator&(const syntax_option_type left, const syntax_option_type right) + { + return static_cast(static_cast(left) & static_cast(right)); + } + inline syntax_option_type operator|(const syntax_option_type left, const syntax_option_type right) + { + return static_cast(static_cast(left) | static_cast(right)); + } + inline syntax_option_type operator^(const syntax_option_type left, const syntax_option_type right) + { + return static_cast(static_cast(left) ^ static_cast(right)); + } + inline syntax_option_type operator~(const syntax_option_type b) + { + return static_cast(~static_cast(b)); + } + inline syntax_option_type &operator&=(syntax_option_type &left, const syntax_option_type right) + { + left = left & right; + return left; + } + inline syntax_option_type &operator|=(syntax_option_type &left, const syntax_option_type right) + { + left = left | right; + return left; + } + inline syntax_option_type &operator^=(syntax_option_type &left, const syntax_option_type right) + { + left = left ^ right; + return left; + } + } + // namespace regex_constants + + namespace regex_constants + { + enum match_flag_type + { + match_default = 0, + match_not_bol = 1 << 0, + match_not_eol = 1 << 1, + match_not_bow = 1 << 2, + match_not_eow = 1 << 3, + match_any = 1 << 4, + match_not_null = 1 << 5, + match_continuous = 1 << 6, + match_prev_avail = 1 << 7, + + format_default = 0, + format_sed = 1 << 8, + format_no_copy = 1 << 9, + format_first_only = 1 << 10, + + // For internal use. + match_match_ = 1 << 11 + }; + + inline match_flag_type operator&(const match_flag_type left, const match_flag_type right) + { + return static_cast(static_cast(left) & static_cast(right)); + } + inline match_flag_type operator|(const match_flag_type left, const match_flag_type right) + { + return static_cast(static_cast(left) | static_cast(right)); + } + inline match_flag_type operator^(const match_flag_type left, const match_flag_type right) + { + return static_cast(static_cast(left) ^ static_cast(right)); + } + inline match_flag_type operator~(const match_flag_type b) + { + return static_cast(~static_cast(b)); + } + inline match_flag_type &operator&=(match_flag_type &left, const match_flag_type right) + { + left = left & right; + return left; + } + inline match_flag_type &operator|=(match_flag_type &left, const match_flag_type right) + { + left = left | right; + return left; + } + inline match_flag_type &operator^=(match_flag_type &left, const match_flag_type right) + { + left = left ^ right; + return left; + } + } + // namespace regex_constants + + // 28.5, regex constants: + namespace regex_constants + { + typedef int error_type; + + static const error_type error_collate = 100; + static const error_type error_ctype = 101; + static const error_type error_escape = 102; + static const error_type error_backref = 103; + static const error_type error_brack = 104; + static const error_type error_paren = 105; + static const error_type error_brace = 106; + static const error_type error_badbrace = 107; + static const error_type error_range = 108; + static const error_type error_space = 109; + static const error_type error_badrepeat = 110; + static const error_type error_complexity = 111; + static const error_type error_stack = 112; + + // SRELL's extensions. + static const error_type error_utf8 = 113; + // The expression contained an invalid UTF-8 sequence. + + static const error_type error_property = 114; + // The expression contained an invalid Unicode property name or value. + + static const error_type error_noescape = 115; + // (Only in v-mode) ( ) [ ] { } / - \ | need to be escaped in a character class. + + static const error_type error_operator = 116; + // (Only in v-mode) A character class contained a reserved double punctuation + // operator or different types of operators at the same level, such as [ab--cd]. + + static const error_type error_complement = 117; + // (Only in v-mode) \P or a negated character class contained a property of strings. + + static const error_type error_modifier = 118; + // A specific flag modifier appears more then once. + +#if defined(SRELL_FIXEDWIDTHLOOKBEHIND) + static const error_type error_lookbehind = 200; +#endif + static const error_type error_internal = 999; + } + // namespace regex_constants + +// ... "regex_constants.h"] +// ["regex_error.hpp" ... + +// 28.6, class regex_error: +class regex_error : public std::runtime_error +{ +public: + + explicit regex_error(const regex_constants::error_type ecode) + : std::runtime_error("regex_error") // added for error C2512. + , ecode_(ecode) + { + } + + regex_constants::error_type code() const + { + return ecode_; + } + +private: + + regex_constants::error_type ecode_; +}; + +// ... "regex_error.hpp"] +// ["rei_type.h" ... + + namespace regex_internal + { + +#if defined(SRELL_CPP11_CHAR1632_ENABLED) + + typedef char32_t uchar32; + +#elif defined(UINT_MAX) && UINT_MAX >= 0xFFFFFFFF + + typedef unsigned int uchar32; + +#elif defined(ULONG_MAX) && ULONG_MAX >= 0xFFFFFFFF + + typedef unsigned long uchar32; + +#else +#error could not find a suitable type for 32-bit Unicode integer values. +#endif // defined(SRELL_CPP11_CHAR1632_ENABLED) + + typedef uchar32 uint_l32; // uint_least32. + + } // regex_internal + +// ... "rei_type.h"] +// ["rei_constants.h" ... + + namespace regex_internal + { + enum re_state_type + { + st_character, // 0x00 + st_character_class, // 0x01 + + st_epsilon, // 0x02 + + st_check_counter, // 0x03 +// st_increment_counter, // 0x04 + st_decrement_counter, // 0x04 + st_save_and_reset_counter, // 0x05 + st_restore_counter, // 0x06 + + st_roundbracket_open, // 0x07 + st_roundbracket_pop, // 0x08 + st_roundbracket_close, // 0x09 + + st_repeat_in_push, // 0x0a + st_repeat_in_pop, // 0x0b + st_check_0_width_repeat, // 0x0c + + st_backreference, // 0x0d + + st_lookaround_open, // 0x0e + +// st_lookaround_pop, // 0x10 + + st_bol, // 0x0f + st_eol, // 0x10 + st_boundary, // 0x11 + + st_success, // 0x12 + +#if !defined(SRELLDBG_NO_NEXTPOS_OPT) + st_move_nextpos, // 0x13 +#endif + + st_lookaround_close = st_success, + st_zero_width_boundary = st_lookaround_open, + }; + // re_state_type + + namespace constants + { + static const uchar32 unicode_max_codepoint = 0x10ffff; + static const uchar32 invalid_u32value = static_cast(-1); + static const uchar32 max_u32value = static_cast(-2); + static const uchar32 asc_icase = 0x20; + static const uchar32 ccstr_empty = static_cast(-1); + static const uint_l32 infinity = static_cast(~0); + } + // constants + + namespace meta_char + { + static const uchar32 mc_exclam = 0x21; // '!' + static const uchar32 mc_sharp = 0x23; // '#' + static const uchar32 mc_dollar = 0x24; // '$' + static const uchar32 mc_rbraop = 0x28; // '(' + static const uchar32 mc_rbracl = 0x29; // ')' + static const uchar32 mc_astrsk = 0x2a; // '*' + static const uchar32 mc_plus = 0x2b; // '+' + static const uchar32 mc_comma = 0x2c; // ',' + static const uchar32 mc_minus = 0x2d; // '-' + static const uchar32 mc_period = 0x2e; // '.' + static const uchar32 mc_colon = 0x3a; // ':' + static const uchar32 mc_lt = 0x3c; // '<' + static const uchar32 mc_eq = 0x3d; // '=' + static const uchar32 mc_gt = 0x3e; // '>' + static const uchar32 mc_query = 0x3f; // '?' + static const uchar32 mc_sbraop = 0x5b; // '[' + static const uchar32 mc_escape = 0x5c; // '\\' + static const uchar32 mc_sbracl = 0x5d; // ']' + static const uchar32 mc_caret = 0x5e; // '^' + static const uchar32 mc_cbraop = 0x7b; // '{' + static const uchar32 mc_bar = 0x7c; // '|' + static const uchar32 mc_cbracl = 0x7d; // '}' + } + // meta_char + + namespace char_ctrl + { + static const uchar32 cc_nul = 0x00; // '\0' //0x00:NUL + static const uchar32 cc_bs = 0x08; // '\b' //0x08:BS + static const uchar32 cc_htab = 0x09; // '\t' //0x09:HT + static const uchar32 cc_nl = 0x0a; // '\n' //0x0a:LF + static const uchar32 cc_vtab = 0x0b; // '\v' //0x0b:VT + static const uchar32 cc_ff = 0x0c; // '\f' //0x0c:FF + static const uchar32 cc_cr = 0x0d; // '\r' //0x0d:CR + } + // char_ctrl + + namespace char_alnum + { + static const uchar32 ch_0 = 0x30; // '0' + static const uchar32 ch_1 = 0x31; // '1' + static const uchar32 ch_7 = 0x37; // '7' + static const uchar32 ch_8 = 0x38; // '8' + static const uchar32 ch_9 = 0x39; // '9' + static const uchar32 ch_A = 0x41; // 'A' + static const uchar32 ch_B = 0x42; // 'B' + static const uchar32 ch_D = 0x44; // 'D' + static const uchar32 ch_F = 0x46; // 'F' + static const uchar32 ch_P = 0x50; // 'P' + static const uchar32 ch_S = 0x53; // 'S' + static const uchar32 ch_W = 0x57; // 'W' + static const uchar32 ch_Z = 0x5a; // 'Z' + static const uchar32 ch_a = 0x61; // 'a' + static const uchar32 ch_b = 0x62; // 'b' + static const uchar32 ch_c = 0x63; // 'c' + static const uchar32 ch_d = 0x64; // 'd' + static const uchar32 ch_f = 0x66; // 'f' + static const uchar32 ch_k = 0x6b; // 'k' + static const uchar32 ch_n = 0x6e; // 'n' + static const uchar32 ch_p = 0x70; // 'p' + static const uchar32 ch_q = 0x71; // 'q' + static const uchar32 ch_r = 0x72; // 'r' + static const uchar32 ch_s = 0x73; // 's' + static const uchar32 ch_t = 0x74; // 't' + static const uchar32 ch_u = 0x75; // 'u' + static const uchar32 ch_v = 0x76; // 'v' + static const uchar32 ch_w = 0x77; // 'w' + static const uchar32 ch_x = 0x78; // 'x' + static const uchar32 ch_z = 0x7a; // 'z' + } + // char_alnum + + namespace char_other + { + static const uchar32 co_sp = 0x20; // ' ' + static const uchar32 co_perc = 0x25; // '%' + static const uchar32 co_amp = 0x26; // '&' + static const uchar32 co_apos = 0x27; // '\'' + static const uchar32 co_slash = 0x2f; // '/' + static const uchar32 co_smcln = 0x3b; // ';' + static const uchar32 co_atmrk = 0x40; // '@' + static const uchar32 co_ll = 0x5f; // '_' + static const uchar32 co_grav = 0x60; // '`' + static const uchar32 co_tilde = 0x7e; // '~' + } + // char_other + } + // namespace regex_internal + +// ... "rei_constants.h"] +// ["rei_utf_traits.hpp" ... + + namespace regex_internal + { + +template +struct utf_traits_core +{ +public: + + static const std::size_t maxseqlen = 1; + static const int utftype = 0; + + static const std::size_t bitsetsize = 0x100; + static const uchar32 bitsetmask = 0xff; + static const uchar32 cumask = 0xff; + + // *iter + template + static uchar32 codepoint(ForwardIterator begin, const ForwardIterator /* end */) + { + return static_cast(*begin); + // Caller is responsible for begin != end. + } + + // *iter++ + template + static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator /* end */) + { + return static_cast(*begin++); + // Caller is responsible for begin != end. + } + + // iter2 = iter; return *--iter2; + template + static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator /* begin */) + { + return static_cast(*--cur); + } + + // *--iter + template + static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator /* begin */) + { + return static_cast(*--cur); + // Caller is responsible for cur != begin. + } + +#if !defined(SRELLDBG_NO_BMH) + + template + static bool is_trailing(const charT2 /* cu */) + { + return false; + } + +#endif // !defined(SRELLDBG_NO_BMH) + + static uchar32 to_codeunits(charT out[maxseqlen], uchar32 cp) + { + out[0] = static_cast(cp); + return 1; + } + + static uchar32 firstcodeunit(const uchar32 cp) + { + return cp; + } + + template + static bool seek_charboundary(ForwardIterator &begin, const ForwardIterator end) + { + return begin != end; + } +}; +template + const std::size_t utf_traits_core::maxseqlen; +template + const int utf_traits_core::utftype; +template + const std::size_t utf_traits_core::bitsetsize; +template + const uchar32 utf_traits_core::bitsetmask; +template + const uchar32 utf_traits_core::cumask; +// utf_traits_core + +// common and utf-32. +template +struct utf_traits : public utf_traits_core +{ + static const int utftype = 32; + + static const std::size_t bitsetsize = 0x10000; + static const uchar32 bitsetmask = 0xffff; + static const uchar32 cumask = 0x1fffff; +}; +template + const int utf_traits::utftype; +template + const std::size_t utf_traits::bitsetsize; +template + const uchar32 utf_traits::bitsetmask; +template + const uchar32 utf_traits::cumask; +// utf_traits + +// utf-8 specific. +template +struct utf8_traits : public utf_traits_core +{ +public: + + // utf-8 specific. + static const std::size_t maxseqlen = 4; + static const int utftype = 8; + + template + static uchar32 codepoint(ForwardIterator begin, const ForwardIterator end) + { +// return codepoint_inc(begin, end); + + uchar32 codepoint = static_cast(*begin & 0xff); + + if ((codepoint & 0x80) == 0) // 1 octet. + return codepoint; + + if (++begin != end && (codepoint >= 0xc0 && codepoint <= 0xf7) && (*begin & 0xc0) == 0x80) + { + codepoint = static_cast((codepoint << 6) | (*begin & 0x3f)); + + if ((codepoint & 0x800) == 0) // 2 octets. + return static_cast(codepoint & 0x7ff); + + if (++begin != end && (*begin & 0xc0) == 0x80) + { + codepoint = static_cast((codepoint << 6) | (*begin & 0x3f)); + + if ((codepoint & 0x10000) == 0) // 3 octets. + return static_cast(codepoint & 0xffff); + + if (++begin != end && (*begin & 0xc0) == 0x80) // 4 octets. + { + codepoint = static_cast((codepoint << 6) | (*begin & 0x3f)); + + return static_cast(codepoint & 0x1fffff); + } + } + } +// else // 80-bf, f8-ff: invalid. + + return regex_internal::constants::invalid_u32value; + } + + template + static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator end) + { + uchar32 codepoint = static_cast(*begin++ & 0xff); + + if ((codepoint & 0x80) == 0) // 1 octet. + return codepoint; + + // Expects transformation to (codepoint - 0xc0) <= 0x37 by optimisation. + // 0xF7 instead of 0xF4 is for consistency with reverse iterators. + if (begin != end && (codepoint >= 0xc0 && codepoint <= 0xf7) && (*begin & 0xc0) == 0x80) +// if (begin != end && (0x7f00 & (1 << ((codepoint >> 3) & 0xf))) && (*begin & 0xc0) == 0x80) // c0, c8, d0, d8, e0, e8, f0. + { + codepoint = static_cast((codepoint << 6) | (*begin++ & 0x3f)); + + // 11 ?aaa aabb bbbb + if ((codepoint & 0x800) == 0) // 2 octets. + return static_cast(codepoint & 0x7ff); + // c080-c1bf: invalid. 00-7F. + // c280-dfbf: valid. 080-7FF. + + // 11 1aaa aabb bbbb + if (begin != end && (*begin & 0xc0) == 0x80) + { + codepoint = static_cast((codepoint << 6) | (*begin++ & 0x3f)); + + // 111? aaaa bbbb bbcc cccc + if ((codepoint & 0x10000) == 0) // 3 octets. + return static_cast(codepoint & 0xffff); + // e08080-e09fbf: invalid. 000-7FF. + // e0a080-efbfbf: valid. 0800-FFFF. + + // 1111 0aaa bbbb bbcc cccc + if (begin != end && (*begin & 0xc0) == 0x80) // 4 octets. + { + codepoint = static_cast((codepoint << 6) | (*begin++ & 0x3f)); + // f0808080-f08fbfbf: invalid. 0000-FFFF. + // f0908080-f3bfbfbf: valid. 10000-FFFFF. + // f4808080-f48fbfbf: valid. 100000-10FFFF. + // f4908080-f4bfbfbf: invalid. 110000-13FFFF. + // f5808080-f7bfbfbf: invalid. 140000-1FFFFF. + + // 11 110a aabb bbbb cccc ccdd dddd + return static_cast(codepoint & 0x1fffff); + } + } + } +// else // 80-bf, f8-ff: invalid. + + return regex_internal::constants::invalid_u32value; + } + + template + static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator begin) + { + uchar32 codepoint = static_cast(*--cur); + + if ((codepoint & 0x80) == 0) + return static_cast(codepoint & 0xff); + + if ((codepoint & 0x40) == 0 && cur != begin) + { + codepoint = static_cast((codepoint & 0x3f) | (*--cur << 6)); + + if ((codepoint & 0x3800) == 0x3000) // 2 octets. + return static_cast(codepoint & 0x7ff); + + if ((codepoint & 0x3000) == 0x2000 && cur != begin) + { + codepoint = static_cast((codepoint & 0xfff) | (*--cur << 12)); + + if ((codepoint & 0xf0000) == 0xe0000) // 3 octets. + return static_cast(codepoint & 0xffff); + + if ((codepoint & 0xc0000) == 0x80000 && cur != begin) + { + if ((*--cur & 0xf8) == 0xf0) // 4 octets. + return static_cast((codepoint & 0x3ffff) | ((*cur & 7) << 18)); + } + } + } + return regex_internal::constants::invalid_u32value; + } + + template + static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator begin) + { + uchar32 codepoint = static_cast(*--cur); + + if ((codepoint & 0x80) == 0) + return static_cast(codepoint & 0xff); + + if ((codepoint & 0x40) == 0 && cur != begin) + { + codepoint = static_cast((codepoint & 0x3f) | (*--cur << 6)); + + // 11 0bbb bbaa aaaa? + if ((codepoint & 0x3800) == 0x3000) // 2 octets. +// if ((*cur & 0xe0) == 0xc0) + return static_cast(codepoint & 0x7ff); + + // 10 bbbb bbaa aaaa? + if ((codepoint & 0x3000) == 0x2000 && cur != begin) // [\x80-\xbf]{2}. +// if ((*cur & 0xc0) == 0x80 && cur != begin) + { + codepoint = static_cast((codepoint & 0xfff) | (*--cur << 12)); + + // 1110 cccc bbbb bbaa aaaa? + if ((codepoint & 0xf0000) == 0xe0000) // 3 octets. +// if ((*cur & 0xf0) == 0xe0) + return static_cast(codepoint & 0xffff); + + // 10cc cccc bbbb bbaa aaaa? + if ((codepoint & 0xc0000) == 0x80000 && cur != begin) // [\x80-\xbf]{3}. +// if ((*cur & 0xc0) == 0x80 && cur != begin) + { + if ((*--cur & 0xf8) == 0xf0) // 4 octets. + return static_cast((codepoint & 0x3ffff) | ((*cur & 7) << 18)); + // d ddcc cccc bbbb bbaa aaaa + //else // [\0-\xef\xf8-\xff][\x80-\xbf]{3}. + + // Sequences [\xc0-\xdf][\x80-\xbf] and [\xe0-\xef][\x80-\xbf]{2} are valid. + // To give a chance to them, rewinds cur. + ++cur; + } + //else // [\0-\x7f\xc0-\xdf\xf0-\xff][\x80-\xbf]{2}. + ++cur; // Sequence [\xc0-\xdf][\x80-\xbf] is valid. Rewinds to give a chance to it. + } + //else // [\0-\x7f\xe0-\xff][\x80-\xbf]. + ++cur; // Rewinds to give a chance to [\0-\x7f]. + } + //else // [\xc0-\xff]. + + return regex_internal::constants::invalid_u32value; + } + +#if !defined(SRELLDBG_NO_BMH) + + template + static bool is_trailing(const charT2 cu) + { + return (cu & 0xc0) == 0x80; + } + +#endif // !defined(SRELLDBG_NO_BMH) + + static uchar32 to_codeunits(charT out[maxseqlen], uchar32 cp) + { + if (cp < 0x80) + { + out[0] = static_cast(cp); + return 1; + } + else if (cp < 0x800) + { + out[0] = static_cast(((cp >> 6) & 0x1f) | 0xc0); + out[1] = static_cast((cp & 0x3f) | 0x80); + return 2; + } + else if (cp < 0x10000) + { + out[0] = static_cast(((cp >> 12) & 0x0f) | 0xe0); + out[1] = static_cast(((cp >> 6) & 0x3f) | 0x80); + out[2] = static_cast((cp & 0x3f) | 0x80); + return 3; + } +// else // if (cp < 0x110000) + { + out[0] = static_cast(((cp >> 18) & 0x07) | 0xf0); + out[1] = static_cast(((cp >> 12) & 0x3f) | 0x80); + out[2] = static_cast(((cp >> 6) & 0x3f) | 0x80); + out[3] = static_cast((cp & 0x3f) | 0x80); + return 4; + } + } + + static uchar32 firstcodeunit(const uchar32 cp) + { + if (cp < 0x80) + return cp; + + if (cp < 0x800) + return static_cast(((cp >> 6) & 0x1f) | 0xc0); + + if (cp < 0x10000) + return static_cast(((cp >> 12) & 0x0f) | 0xe0); + + return static_cast(((cp >> 18) & 0x07) | 0xf0); + } + + template + static bool seek_charboundary(ForwardIterator &begin, const ForwardIterator end) + { + for (; begin != end; ++begin) + { +// if ((*begin & 0xc0) != 0x80 && (*begin & 0xf8) != 0xf8) // 00-7f, c0-f7. + if ((*begin & 0xc0) != 0x80) // 00-7f, c0-ff. + return true; + } + return false; + } +}; +template + const std::size_t utf8_traits::maxseqlen; +template + const int utf8_traits::utftype; +// utf8_traits + +// utf-16 specific. +template +struct utf16_traits : public utf_traits_core +{ +public: + + // utf-16 specific. + static const std::size_t maxseqlen = 2; + static const int utftype = 16; + + static const std::size_t bitsetsize = 0x10000; + static const uchar32 bitsetmask = 0xffff; + static const uchar32 cumask = 0xffff; + + template + static uchar32 codepoint(ForwardIterator begin, const ForwardIterator end) + { + const uchar32 codeunit = *begin; + + if ((codeunit & 0xdc00) != 0xd800) + return static_cast(codeunit & 0xffff); + + if (++begin != end && (*begin & 0xdc00) == 0xdc00) + return static_cast((((codeunit & 0x3ff) << 10) | (*begin & 0x3ff)) + 0x10000); + + return static_cast(codeunit & 0xffff); + } + + template + static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator end) + { + const uchar32 codeunit = *begin++; + + if ((codeunit & 0xdc00) != 0xd800) + return static_cast(codeunit & 0xffff); + + if (begin != end && (*begin & 0xdc00) == 0xdc00) + return static_cast((((codeunit & 0x3ff) << 10) | (*begin++ & 0x3ff)) + 0x10000); + + return static_cast(codeunit & 0xffff); + } + + template + static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator begin) + { + const uchar32 codeunit = *--cur; + + if ((codeunit & 0xdc00) != 0xdc00 || cur == begin) + return static_cast(codeunit & 0xffff); + + if ((*--cur & 0xdc00) == 0xd800) + return static_cast((((*cur & 0x3ff) << 10) | (codeunit & 0x3ff)) + 0x10000); + + return static_cast(codeunit & 0xffff); + } + + template + static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator begin) + { + const uchar32 codeunit = *--cur; + + if ((codeunit & 0xdc00) != 0xdc00 || cur == begin) + return static_cast(codeunit & 0xffff); + + if ((*--cur & 0xdc00) == 0xd800) + return static_cast((((*cur & 0x3ff) << 10) | (codeunit & 0x3ff)) + 0x10000); + //else // (codeunit & 0xdc00) == 0xdc00 && (*cur & 0xdc00) != 0xd800 + + ++cur; + + return static_cast(codeunit & 0xffff); + } + +#if !defined(SRELLDBG_NO_BMH) + + template + static bool is_trailing(const charT2 cu) + { + return (cu & 0xdc00) == 0xdc00; + } + +#endif // !defined(SRELLDBG_NO_BMH) + + static uchar32 to_codeunits(charT out[maxseqlen], uchar32 cp) + { + if (cp < 0x10000) + { + out[0] = static_cast(cp); + return 1; + } +// else // if (cp < 0x110000) + { + cp -= 0x10000; + out[0] = static_cast(((cp >> 10) & 0x3ff) | 0xd800); + out[1] = static_cast((cp & 0x3ff) | 0xdc00); + return 2; + } + } + + static uchar32 firstcodeunit(const uchar32 cp) + { + if (cp < 0x10000) + return cp; + + return static_cast((cp >> 10) + 0xd7c0); + // aaaaa bbbbcccc ddddeeee -> AA AAbb bbcc/cc dddd eeee where AAAA = aaaaa - 1. + } + + template + static bool seek_charboundary(ForwardIterator &begin, const ForwardIterator end) + { + for (; begin != end; ++begin) + { + if ((*begin & 0xdc00) != 0xdc00) + return true; + } + return false; + } +}; +template + const std::size_t utf16_traits::maxseqlen; +template + const int utf16_traits::utftype; +template + const std::size_t utf16_traits::bitsetsize; +template + const uchar32 utf16_traits::bitsetmask; +template + const uchar32 utf16_traits::cumask; +// utf16_traits + +// specialisation for char. +template <> +struct utf_traits : public utf_traits_core +{ +public: + + template + static uchar32 codepoint(ForwardIterator begin, const ForwardIterator /* end */) + { + return static_cast(static_cast(*begin)); + } + + template + static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator /* end */) + { + return static_cast(static_cast(*begin++)); + } + + template + static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator /* begin */) + { + return static_cast(static_cast(*--cur)); + } + + template + static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator /* begin */) + { + return static_cast(static_cast(*--cur)); + } + +#if !defined(SRELLDBG_NO_BMH) +#endif // !defined(SRELLDBG_NO_BMH) +}; // utf_traits + +// specialisation for signed char. +template <> +struct utf_traits : public utf_traits +{ +}; + +// (signed) short, (signed) int, (signed) long, (signed) long long, ... + +#if defined(SRELL_CPP11_CHAR1632_ENABLED) +template <> +struct utf_traits : public utf16_traits +{ +}; +#endif + +#if defined(SRELL_CPP20_CHAR8_ENABLED) +template <> +struct utf_traits : public utf8_traits +{ +}; +#endif + + } // regex_internal + +// ... "rei_utf_traits.hpp"] +// ["regex_traits.hpp" ... + +// 28.7, class template regex_traits: +template +struct regex_traits +{ +public: + + typedef charT char_type; + typedef std::basic_string string_type; + typedef std::locale locale_type; +// typedef bitmask_type char_class_type; + typedef int char_class_type; + + typedef regex_internal::utf_traits utf_traits; + +public: + +// regex_traits(); + + static std::size_t length(const char_type *p) + { + return std::char_traits::length(p); + } + + charT translate(const charT c) const + { + return c; + } + + charT translate_nocase(const charT c) const + { + return c; + } + + template + string_type transform(ForwardIterator first, ForwardIterator last) const + { + return string_type(first, last); + } + + template + string_type transform_primary(ForwardIterator first, ForwardIterator last) const + { + return string_type(first, last); + } + + template + string_type lookup_collatename(ForwardIterator first, ForwardIterator last) const + { + return string_type(first, last); + } + + template + char_class_type lookup_classname(ForwardIterator /* first */, ForwardIterator /* last */, bool /* icase */ = false) const + { + return static_cast(0); + } + + bool isctype(const charT /* c */, const char_class_type /* f */) const + { + return false; + } + + int value(const charT /* ch */, const int /* radix */) const + { + return -1; + } + + locale_type imbue(const locale_type /* l */) + { + return locale_type(); + } + + locale_type getloc() const + { + return locale_type(); + } +}; // regex_traits + +template +struct u8regex_traits : public regex_traits +{ + typedef regex_internal::utf8_traits utf_traits; +}; + +template +struct u16regex_traits : public regex_traits +{ + typedef regex_internal::utf16_traits utf_traits; +}; + +// ... "regex_traits.hpp"] +// ["rei_memory.hpp" ... + + namespace regex_internal + { +/* + * Similar to std::basic_string, except for: + * a. only allocates memory, does not initialise it. + * b. uses realloc() to avoid moving data as much as possible when + * resizing an allocated buffer. + */ +template +class simple_array +{ +public: + + typedef ElemT value_type; + typedef std::size_t size_type; + typedef ElemT &reference; + typedef const ElemT &const_reference; + typedef ElemT *pointer; + typedef const ElemT *const_pointer; + + static const size_type npos = static_cast(-1); + +public: + + simple_array() + : buffer_(NULL) + , size_(0) + , capacity_(0) + { + } + + simple_array(const size_type initsize) + : buffer_(NULL) + , size_(0) + , capacity_(0) + { + if (initsize) + { + buffer_ = static_cast(std::malloc(initsize * sizeof (ElemT))); + + if (buffer_ != NULL) + size_ = capacity_ = initsize; + else + throw std::bad_alloc(); + } + } + + simple_array(const simple_array &right, size_type pos, size_type len = npos) + : buffer_(NULL) + , size_(0) + , capacity_(0) + { + if (pos > right.size_) + pos = right.size_; + + { + const size_type len2 = right.size_ - pos; + if (len > len2) + len = len2; + } + + if (len) + { + buffer_ = static_cast(std::malloc(len * sizeof (ElemT))); + + if (buffer_ != NULL) + { + for (capacity_ = len; size_ < capacity_;) + buffer_[size_++] = right[pos++]; + } + else + { + throw std::bad_alloc(); + } + } + } + + simple_array(const simple_array &right) + : buffer_(NULL) + , size_(0) + , capacity_(0) + { + operator=(right); + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + simple_array(simple_array &&right) SRELL_NOEXCEPT + : buffer_(right.buffer_) + , size_(right.size_) + , capacity_(right.capacity_) + { + right.size_ = 0; + right.capacity_ = 0; + right.buffer_ = NULL; + } +#endif + + simple_array &operator=(const simple_array &right) + { + if (this != &right) + { + resize(right.size_); + for (size_type i = 0; i < right.size_; ++i) + buffer_[i] = right.buffer_[i]; + } + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + simple_array &operator=(simple_array &&right) SRELL_NOEXCEPT + { + if (this != &right) + { + if (this->buffer_ != NULL) + std::free(this->buffer_); + + this->size_ = right.size_; + this->capacity_ = right.capacity_; + this->buffer_ = right.buffer_; + + right.size_ = 0; + right.capacity_ = 0; + right.buffer_ = NULL; + } + return *this; + } +#endif + + ~simple_array() + { + if (buffer_ != NULL) + std::free(buffer_); + } + + size_type size() const + { + return size_; + } + + void clear() + { + size_ = 0; + } + + void resize(const size_type newsize) + { + if (newsize > capacity_) + reserve(newsize); + + size_ = newsize; + } + + void resize(const size_type newsize, const ElemT &type) + { + size_type oldsize = size_; + + resize(newsize); + for (; oldsize < size_; ++oldsize) + buffer_[oldsize] = type; + } + + reference operator[](const size_type pos) + { + return buffer_[pos]; + } + + const_reference operator[](const size_type pos) const + { + return buffer_[pos]; + } + + void push_back(const_reference n) + { + const size_type oldsize = size_; + + if (++size_ > capacity_) + reserve(size_); + + buffer_[oldsize] = n; + } + + void push_backncr(const ElemT e) + { + push_back(e); + } + + const_reference back() const + { + return buffer_[size_ - 1]; + } + + reference back() + { + return buffer_[size_ - 1]; + } + + void pop_back() + { + --size_; + } + + simple_array &operator+=(const simple_array &right) + { + return append(right); + } + + simple_array &append(const size_type size, const ElemT &type) + { + resize(size_ + size, type); + return *this; + } + + simple_array &append(const simple_array &right) + { + size_type oldsize = size_; + + resize(size_ + right.size_); + for (size_type i = 0; i < right.size_; ++i, ++oldsize) + buffer_[oldsize] = right.buffer_[i]; + + return *this; + } + + simple_array &append(const simple_array &right, size_type pos, size_type len /* = npos */) + { + { + const size_type len2 = right.size_ - pos; + if (len > len2) + len = len2; + } + + size_type oldsize = size_; + + resize(size_ + len); + len += pos; // end. + for (; pos < len; ++oldsize, ++pos) + buffer_[oldsize] = right.buffer_[pos]; + + return *this; + } + + void erase(const size_type pos) + { + if (pos < size_) + { + std::memmove(buffer_ + pos, buffer_ + pos + 1, (size_ - pos - 1) * sizeof (ElemT)); + --size_; + } + } + void erase(const size_type pos, const size_type len) + { + if (pos < size_) + { + size_type rmndr = size_ - pos; + + if (rmndr > len) + { + rmndr -= len; + std::memmove(buffer_ + pos, buffer_ + pos + len, rmndr * sizeof (ElemT)); + size_ -= len; + } + else + size_ = pos; + } + } + + // For rei_compiler class. + void insert(const size_type pos, const ElemT &type) + { + move_forward(pos, 1); + buffer_[pos] = type; + } + + void insert(size_type pos, const simple_array &right) + { + move_forward(pos, right.size_); + for (size_type i = 0; i < right.size_; ++i, ++pos) + buffer_[pos] = right.buffer_[i]; + } + + void insert(size_type destpos, const simple_array &right, size_type srcpos, size_type srclen = npos) + { + { + const size_type len2 = right.size_ - srcpos; + if (srclen > len2) + srclen = len2; + } + + move_forward(destpos, srclen); + srclen += srcpos; // srcend. + for (; srcpos < srclen; ++destpos, ++srcpos) + buffer_[destpos] = right.buffer_[srcpos]; + } + + simple_array &replace(size_type pos, size_type count, const simple_array &right) + { + if (count < right.size_) + move_forward(pos + count, right.size_ - count); + else if (count > right.size_) + { + const pointer base = buffer_ + pos; + + std::memmove(base + right.size_, base + count, (size_ - pos - count) * sizeof (ElemT)); + size_ -= count - right.size_; + } + + for (size_type i = 0; i < right.size_; ++pos, ++i) + buffer_[pos] = right[i]; + + return *this; + } + + size_type find(const value_type c, size_type pos = 0) const + { + for (; pos <= size_; ++pos) + if (buffer_[pos] == c) + return pos; + + return npos; + } + + const_pointer data() const + { + return buffer_; + } + + int compare(size_type pos, const size_type count1, const_pointer p, const size_type count2) const + { + size_type count = count1 <= count2 ? count1 : count2; + + for (; count; ++pos, ++p, --count) + { + const value_type &v = buffer_[pos]; + if (v != *p) + return v < *p ? -1 : 1; + } + return count1 == count2 ? 0 : (count1 < count2 ? -1 : 1); + } + + size_type max_size() const + { + return maxsize_; + } + + void swap(simple_array &right) + { + if (this != &right) + { + const pointer tmpbuffer = this->buffer_; + const size_type tmpsize = this->size_; + const size_type tmpcapacity = this->capacity_; + + this->buffer_ = right.buffer_; + this->size_ = right.size_; + this->capacity_ = right.capacity_; + + right.buffer_ = tmpbuffer; + right.size_ = tmpsize; + right.capacity_ = tmpcapacity; + } + } + +private: + + void reserve(const size_type newsize) + { +// if (newsize > capacity_) + { + if (newsize <= maxsize_) + { +// capacity_ = newsize + (newsize >> 1); // newsize * 1.5. + capacity_ = ((newsize >> 8) + 1) << 8; // Round up to a multiple of 256. + + if (capacity_ > maxsize_) + capacity_ = maxsize_; + + const size_type newsize_in_byte = capacity_ * sizeof (ElemT); + const pointer oldbuffer = buffer_; + + buffer_ = static_cast(std::realloc(buffer_, newsize_in_byte)); + if (buffer_ != NULL) + return; + + // Even if realloc() failed, already-existing buffer remains valid. + std::free(oldbuffer); +// buffer_ = NULL; + size_ = capacity_ = 0; + } + throw std::bad_alloc(); + } + } + + void move_forward(const size_type pos, const size_type count) + { + const size_type oldsize = size_; + + resize(size_ + count); + + if (pos < oldsize) + { + const pointer base = buffer_ + pos; + + std::memmove(base + count, base, (oldsize - pos) * sizeof (ElemT)); + } + } + +private: + + pointer buffer_; + size_type size_; + size_type capacity_; + +// static const size_type maxsize_ = (npos - sizeof (simple_array)) / sizeof (ElemT); + static const size_type maxsize_ = (npos - sizeof (pointer) - sizeof (size_type) * 2) / sizeof (ElemT) / 2; +}; +template +const typename simple_array::size_type simple_array::npos; +// simple_array + + } // namespace regex_internal + +// ... "rei_memory.hpp"] +// ["rei_bitset.hpp" ... + + namespace regex_internal + { + +// Always uses a heap instead of the stack. +template +class bitset +{ +private: + + typedef unsigned long array_type; + +public: + + bitset() + : buffer_(static_cast(std::malloc(size_in_byte_))) + { + if (buffer_ != NULL) + { + reset(); + return; + } + throw std::bad_alloc(); + } + + bitset(const bitset &right) + : buffer_(static_cast(std::malloc(size_in_byte_))) + { + if (buffer_ != NULL) + { + operator=(right); + return; + } + throw std::bad_alloc(); + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + bitset(bitset &&right) SRELL_NOEXCEPT + : buffer_(right.buffer_) + { + right.buffer_ = NULL; + } +#endif + + bitset &operator=(const bitset &right) + { + if (this != &right) + { +// for (std::size_t i = 0; i < arraylength_; ++i) +// buffer_[i] = right.buffer_[i]; + std::memcpy(buffer_, right.buffer_, size_in_byte_); + } + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + bitset &operator=(bitset &&right) SRELL_NOEXCEPT + { + if (this != &right) + { + if (this->buffer_ != NULL) + std::free(this->buffer_); + + this->buffer_ = right.buffer_; + right.buffer_ = NULL; + } + return *this; + } +#endif + + ~bitset() + { + if (buffer_ != NULL) + std::free(buffer_); + } + + bitset &reset() + { + std::memset(buffer_, 0, size_in_byte_); + return *this; + } + + bitset &reset(const std::size_t bit) + { + buffer_[bit / bits_per_elem_] &= ~(1 << (bit & bitmask_)); + return *this; + } + + bitset &set(const std::size_t bit) + { + buffer_[bit / bits_per_elem_] |= (1 << (bit & bitmask_)); + return *this; + } + +#if 0 + void set_range(const std::size_t firstbit, const std::size_t lastbit) + { + const std::size_t lastelemidx = lastbit / bits_per_elem_; + std::size_t firstelemidx = firstbit / bits_per_elem_; + const array_type lastelemmask = ~(allbits1_ << ((lastbit & bitmask_) + 1)); + array_type ormask = allbits1_ << (firstbit & bitmask_); + + if (firstelemidx < lastelemidx) + { + buffer_[firstelemidx] |= ormask; + ormask = allbits1_; + + for (++firstelemidx; firstelemidx < lastelemidx; ++firstelemidx) + buffer_[firstelemidx] |= ormask; + } + ormask &= lastelemmask; + buffer_[lastelemidx] |= ormask; + + } +#endif + + bool test(const std::size_t bit) const + { + return (buffer_[bit / bits_per_elem_] & (1 << (bit & bitmask_))) != 0; + } + + bool operator[](const std::size_t bit) const + { + return (buffer_[bit / bits_per_elem_] & (1 << (bit & bitmask_))) != 0; + } + + bitset &flip() + { + for (std::size_t i = 0; i < arraylength_; ++i) + buffer_[i] = ~buffer_[i]; + return *this; + } + + void swap(bitset &right) + { + if (this != &right) + { + array_type *const tmpbuffer = this->buffer_; + this->buffer_ = right.buffer_; + right.buffer_ = tmpbuffer; + } + } + +private: + +#if defined(__cpp_constexpr) + static constexpr std::size_t pow2leN(const std::size_t n, const std::size_t p2) + { + return ((p2 << 1) == 0 || (p2 << 1) > n) ? p2 : pow2leN(n, p2 << 1); + } + static const std::size_t bits_per_elem_ = pow2leN(CHAR_BIT * sizeof (array_type), 8); +#else + static const std::size_t bpe_tmp_ = CHAR_BIT * sizeof (array_type); + static const std::size_t bits_per_elem_ = bpe_tmp_ >= 64 ? 64 : (bpe_tmp_ >= 32 ? 32 : (bpe_tmp_ >= 16 ? 16 : 8)); +#endif + static const std::size_t bitmask_ = bits_per_elem_ - 1; + static const std::size_t arraylength_ = (Bits + bitmask_) / bits_per_elem_; + static const std::size_t size_in_byte_ = arraylength_ * sizeof (array_type); + static const array_type allbits1_ = ~static_cast(0); + + array_type *buffer_; +}; + + } // namespace regex_internal + +// ... "rei_bitset.hpp"] +// ["rei_ucf.hpp" ... + + namespace regex_internal + { + +#if !defined(SRELL_NO_UNICODE_ICASE) + + namespace ucf_constants + { + +#include "srell_ucfdata2.hpp" + + } // namespace ucf_constants + + namespace ucf_internal + { + +typedef ucf_constants::unicode_casefolding ucfdata; + + } // namespace ucf_internal +#endif // !defined(SRELL_NO_UNICODE_ICASE) + + namespace ucf_constants + { +#if !defined(SRELL_NO_UNICODE_ICASE) + static const uchar32 rev_maxset = ucf_internal::ucfdata::rev_maxset; +#else + static const uchar32 rev_maxset = 2; +#endif + } // namespace ucf_constants + +class unicode_case_folding +{ +public: + + static uchar32 do_casefolding(const uchar32 cp) + { +#if !defined(SRELL_NO_UNICODE_ICASE) + if (cp <= ucf_internal::ucfdata::ucf_maxcodepoint) + return cp + ucf_internal::ucfdata::ucf_deltatable[ucf_internal::ucfdata::ucf_segmenttable[cp >> 8] + (cp & 0xff)]; +#else + if (cp >= char_alnum::ch_A && cp <= char_alnum::ch_Z) // 'A' && 'Z' + return static_cast(cp - char_alnum::ch_A + char_alnum::ch_a); // - 'A' + 'a' +#endif + return cp; + } + + static uchar32 casefoldedcharset(uchar32 out[ucf_constants::rev_maxset], const uchar32 cp) + { +#if !defined(SRELL_NO_UNICODE_ICASE) + uchar32 count = 0; + + if (cp <= ucf_internal::ucfdata::rev_maxcodepoint) + { + const uchar32 offset_of_charset = ucf_internal::ucfdata::rev_indextable[ucf_internal::ucfdata::rev_segmenttable[cp >> 8] + (cp & 0xff)]; + const uchar32 *ptr = &ucf_internal::ucfdata::rev_charsettable[offset_of_charset]; + + for (; *ptr != cfcharset_eos_ && count < ucf_constants::rev_maxset; ++ptr, ++count) + out[count] = *ptr; + } + if (count == 0) + out[count++] = cp; + + return count; +#else +// const uchar32 nocase = static_cast(cp & ~0x20); + const uchar32 nocase = static_cast(cp | constants::asc_icase); + + out[0] = cp; +// if (nocase >= char_alnum::ch_A && nocase <= char_alnum::ch_Z) + if (nocase >= char_alnum::ch_a && nocase <= char_alnum::ch_z) + { + out[1] = static_cast(cp ^ constants::asc_icase); + return 2; + } + return 1; +#endif + } + + unicode_case_folding &operator=(const unicode_case_folding &) + { + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + unicode_case_folding &operator=(unicode_case_folding &&) SRELL_NOEXCEPT + { + return *this; + } +#endif + + void swap(unicode_case_folding & /* right */) + { + } + +private: + +#if !defined(SRELL_NO_UNICODE_ICASE) + static const uchar32 cfcharset_eos_ = ucf_internal::ucfdata::eos; +#endif + +public: // For debug. + + void print_tables() const; +}; +// unicode_case_folding + + } // namespace regex_internal + +// ... "rei_ucf.hpp"] +// ["rei_up.hpp" ... + + namespace regex_internal + { + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + + namespace up_constants + { + +#include "srell_updata2.hpp" + + static const uint_l32 error_property = static_cast(-1); + } // namespace up_constants + + namespace up_internal + { + typedef up_constants::up_type pname_type; + typedef const char *pname_string_type; + +#if defined(SRELL_UPDATA_VERSION) && (SRELL_UPDATA_VERSION >= 200) + struct pvalue_type + { + pname_type pname; + uint_l32 pnumber; + pname_string_type csstrings; + }; +#else + struct pvalue_type + { + pname_type pname; + pname_string_type csstrings; + uint_l32 pnumber; + }; +#endif + + struct offset_and_number + { + std::size_t offset; + std::size_t number_of_pairs; + }; + + typedef up_constants::unicode_property_data< + pname_string_type, + uchar32, + pvalue_type, + offset_and_number + > + updata; + + } // namespace up_internal + +//template +class unicode_property +{ +public: + + typedef simple_array pstring; + + unicode_property() + { + } + + unicode_property &operator=(const unicode_property &) + { + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + unicode_property &operator=(unicode_property &&) SRELL_NOEXCEPT + { + return *this; + } +#endif + + static uint_l32 lookup_property(const pstring &name, const pstring &value) + { + pname_type ptype = name.size() ? lookup_property_name(name) : up_constants::uptype_general_category; +// property_type property_number = lookup_property_value(ptype, value); + uint_l32 property_number = lookup_property_value(ptype, value); + + if (property_number == static_cast(up_constants::upid_unknown) && name.size() == 0) + { + ptype = up_constants::uptype_binary; + property_number = lookup_property_value(ptype, value); + } + + return property_number != static_cast(up_constants::upid_unknown) ? property_number : up_constants::error_property; + } + + static std::size_t ranges_offset(const uint_l32 property_number) + { +#if defined(SRELL_UPDATA_VERSION) + return updata::positiontable[property_number].offset; +#else + const offset_and_number *const postable = updata::position_table(); + return postable[property_number].offset; +#endif + } + + static std::size_t number_of_ranges(const uint_l32 property_number) + { +#if defined(SRELL_UPDATA_VERSION) + return updata::positiontable[property_number].number_of_pairs; +#else + const offset_and_number *const postable = updata::position_table(); + return postable[property_number].number_of_pairs; +#endif + } + + static const uchar32 *ranges_address(const uint_l32 property_number) + { +#if defined(SRELL_UPDATA_VERSION) + return &updata::rangetable[ranges_offset(property_number) << 1]; +#else + const uchar32 *const ranges = updata::ranges(); + return &ranges[ranges_offset(property_number) << 1]; +#endif + } + + static bool is_valid_pno(const uint_l32 pno) + { + return pno != up_constants::error_property && pno <= max_property_number; + } + + static bool is_pos(const uint_l32 pno) + { + return pno > max_property_number && pno <= max_pos_number; + } + +private: + + typedef up_internal::pname_type pname_type; + typedef up_internal::pname_string_type pname_string_type; + typedef up_internal::pvalue_type pvalue_type; + typedef up_internal::offset_and_number offset_and_number; + typedef up_internal::updata updata; + + static pname_type lookup_property_name(const pstring &name) + { +#if defined(SRELL_UPDATA_VERSION) + for (std::size_t pno = 0; *updata::propertynametable[pno]; ++pno) + { + if (check_if_included(name, updata::propertynametable[pno])) + return static_cast(pno); + } +#else + const pname_string_type *const pname_table = updata::propertyname_table(); + + for (std::size_t pno = 0; *pname_table[pno]; ++pno) + { + if (check_if_included(name, pname_table[pno])) + return static_cast(pno); + } +#endif + return up_constants::uptype_unknown; + } + + // Checks if value is included in colon-separated strings. + static bool check_if_included(const pstring &value, pname_string_type csstrings) + { + if (static_cast(*csstrings) != meta_char::mc_astrsk) // '*' + { + while (*csstrings) + { + const pname_string_type begin = csstrings; + + for (; static_cast(*csstrings) != meta_char::mc_colon && static_cast(*csstrings) != char_ctrl::cc_nul; ++csstrings); + + const std::size_t length = csstrings - begin; + + if (static_cast(value.size()) == length) + if (value.compare(0, value.size(), begin, length) == 0) + return true; + + if (static_cast(*csstrings) == meta_char::mc_colon) + ++csstrings; + } + } + return false; + } + + static uint_l32 lookup_property_value(const pname_type ptype, const pstring &value) + { +#if defined(SRELL_UPDATA_VERSION) + for (std::size_t pno = 0; *updata::rangenumbertable[pno].csstrings; ++pno) + { + const pvalue_type &pvalue = updata::rangenumbertable[pno]; + if (pvalue.pname == ptype && check_if_included(value, pvalue.csstrings)) + return pvalue.pnumber; + } +#else + const pvalue_type *const pvalue_table = updata::rangenumber_table(); + + for (std::size_t pno = 0; *pvalue_table[pno].csstrings; ++pno) + { + const pvalue_type &pvalue = pvalue_table[pno]; + if (pvalue.pname == ptype && check_if_included(value, pvalue.csstrings)) + return pvalue.pnumber; + } +#endif + return static_cast(up_constants::upid_unknown); + } + +private: + + static const std::size_t max_property_number = static_cast(up_constants::upid_max_property_number); + static const std::size_t max_pos_number = static_cast(up_constants::upid_max_pos_number); +}; +// unicode_property + +#endif // !defined(SRELL_NO_UNICODE_PROPERTY) + } // namespace regex_internal + +// ... "rei_up.hpp"] +// ["rei_range_pair.hpp" ... + + namespace regex_internal + { + +struct range_pair // , public std::pair +{ + uchar32 second; + uchar32 first; + + void set(const uchar32 min, const uchar32 max) + { + this->first = min; + this->second = max; + } + + void set(const uchar32 minmax) + { + this->first = minmax; + this->second = minmax; + } + + bool is_range_valid() const + { + return first <= second; + } + + bool operator==(const range_pair &right) const + { + return this->first == right.first && this->second == right.second; + } + + bool operator<(const range_pair &right) const + { + return this->second < right.first; // This assumes that optimise() has been called. + } + + void swap(range_pair &right) + { + const range_pair tmp = *this; + *this = right; + right = tmp; + } + + bool unify_range(const range_pair &right) + { + range_pair &left = *this; + + if (right.first <= left.second || left.second + 1 == right.first) // r1 <= l2 || l2+1 == r1 + { + // l1 l2+1 < r1 r2 excluded. + + if (left.first <= right.second || right.second + 1 == left.first) // l1 <= r2 || r2+1 == l1 + { + // r1 r2+1 < l1 l2 excluded. + + if (left.first > right.first) + left.first = right.first; + + if (left.second < right.second) + left.second = right.second; + + return true; + } + } + return false; + } +}; +// range_pair + +struct range_pair_helper : public range_pair +{ + range_pair_helper(const uchar32 min, const uchar32 max) + { + this->first = min; + this->second = max; + } + + range_pair_helper(const uchar32 minmax) + { + this->first = minmax; + this->second = minmax; + } +}; +// range_pair_helper + +struct range_pairs // : public simple_array +{ +public: + + typedef simple_array array_type; + typedef array_type::size_type size_type; + + range_pairs() + { + } + + range_pairs(const range_pairs &rp) : rparray_(rp.rparray_) + { + } + + range_pairs &operator=(const range_pairs &rp) + { + rparray_.operator=(rp.rparray_); + return *this; + } + + range_pairs(const size_type initsize) : rparray_(initsize) + { + } + + range_pairs(const range_pairs &right, size_type pos, size_type size) + : rparray_(right.rparray_, pos, size) + { + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + range_pairs(range_pairs &&rp) SRELL_NOEXCEPT + : rparray_(std::move(rp.rparray_)) + { + } + + range_pairs &operator=(range_pairs &&rp) SRELL_NOEXCEPT + { + rparray_.operator=(std::move(rp.rparray_)); + return *this; + } +#endif + + void clear() + { + rparray_.clear(); + } + + size_type size() const + { + return rparray_.size(); + } + + const range_pair &operator[](const size_type pos) const + { + return rparray_[pos]; + } + range_pair &operator[](const size_type pos) + { + return rparray_[pos]; + } + + void resize(const size_type size) + { + rparray_.resize(size); + } + + void swap(range_pairs &right) + { + rparray_.swap(right.rparray_); + } + + void set_solerange(const range_pair &right) + { + rparray_.clear(); + rparray_.push_back(right); + } + + void append_newclass(const range_pairs &right) + { + rparray_.append(right.rparray_); + } + + void append_newpair(const range_pair &right) + { + rparray_.push_back(right); + } + + void join(const range_pair &right) + { + size_type pos = 0; + + for (; pos < rparray_.size(); ++pos) + { + range_pair &curpair = rparray_[pos]; + + if (curpair.unify_range(right)) + { + for (++pos; pos < rparray_.size();) + { + if (curpair.unify_range(rparray_[pos])) + rparray_.erase(pos); + else + break; + } + return; + } + if (right.second < curpair.first) + break; + } + rparray_.insert(pos, right); + } + + void merge(const range_pairs &right) + { + for (size_type i = 0; i < right.size(); ++i) + join(right[i]); + } + + bool same(uchar32 pos, const uchar32 count, const range_pairs &right) const + { + if (count == right.size()) + { + for (uchar32 i = 0; i < count; ++i, ++pos) + if (!(rparray_[pos] == right[i])) + return false; + + return true; + } + return false; + } + + int relationship(const range_pairs &right) const + { + if (rparray_.size() == right.rparray_.size()) + { + for (size_type i = 0; i < rparray_.size(); ++i) + { + if (!(this->rparray_[i] == right.rparray_[i])) + { + if (i == 0) + goto check_overlap; + + return 1; // Overlapped. + } + } + return 0; // Same. + } + check_overlap: + return is_overlap(right) ? 1 : 2; // Overlapped or exclusive. + } + + void negation() + { + uchar32 begin = 0; + range_pairs newpairs; + + for (size_type i = 0; i < rparray_.size(); ++i) + { + const range_pair &range = rparray_[i]; + + if (begin < range.first) + newpairs.join(range_pair_helper(begin, range.first - 1)); + + begin = range.second + 1; + } + + if (begin <= constants::unicode_max_codepoint) + newpairs.join(range_pair_helper(begin, constants::unicode_max_codepoint)); + + *this = newpairs; + } + + bool is_overlap(const range_pairs &right) const + { + for (size_type i = 0; i < rparray_.size(); ++i) + { + const range_pair &leftrange = rparray_[i]; + + for (size_type j = 0; j < right.size(); ++j) + { + const range_pair &rightrange = right[j]; + + if (rightrange.first <= leftrange.second) // Excludes l1 l2 < r1 r2. + if (leftrange.first <= rightrange.second) // Excludes r1 r2 < l1 l2. + return true; + } + } + return false; + } + + void load_from_memory(const uchar32 *array, size_type number_of_pairs) + { + for (; number_of_pairs; --number_of_pairs, array += 2) + join(range_pair_helper(array[0], array[1])); + } + + void make_caseunfoldedcharset() + { + uchar32 table[ucf_constants::rev_maxset] = {}; + bitset bs; + + for (size_type i = 0; i < rparray_.size(); ++i) + { + const range_pair &range = rparray_[i]; + + for (uchar32 ucp = range.first; ucp <= range.second; ++ucp) + { + const uchar32 setnum = unicode_case_folding::casefoldedcharset(table, ucp); + + for (uchar32 j = 0; j < setnum; ++j) + bs.set(table[j]); + } + } + load_from_bitset(bs); + } + + // For updataout.hpp. + void remove_range(const range_pair &right) + { + for (size_type pos = 0; pos < rparray_.size();) + { + range_pair &left = rparray_[pos]; + + if (right.first <= left.first && left.first <= right.second) // r1 <= l1 <= r2. + { + if (left.second > right.second) // r1 <= l1 <= r2 < l2. + { + left.first = right.second + 1; // carry doesn't happen. + ++pos; + } + else // r1 <= l1 <= l2 <= r2. + rparray_.erase(pos); + } + else if (right.first <= left.second && left.second <= right.second) // r1 <= l2 <= r2. + { + if (left.first < right.first) // l1 < r1 <= l2 <= r2. + { + left.second = right.first - 1; + ++pos; + } + else // r1 <= l1 <= l2 <= r2. + rparray_.erase(pos); + } + else if (left.first < right.first && right.second < left.second) // l1 < r1 && r2 < l2. + { + range_pair newrange(left); + + left.second = right.first - 1; + newrange.first = right.second + 1; + rparray_.insert(++pos, newrange); + ++pos; + } + else + ++pos; + } + } + +// template + uchar32 consists_of_one_character(const bool icase) const + { + if (rparray_.size() >= 1) + { + uchar32 (*const casefolding_func)(const uchar32) = !icase ? do_nothing : unicode_case_folding::do_casefolding; + const uchar32 ucp1st = casefolding_func(rparray_[0].first); + + for (size_type no = 0; no < rparray_.size(); ++no) + { + const range_pair &cr = rparray_[no]; + + for (uchar32 ucp = cr.first;; ++ucp) + { + if (ucp1st != casefolding_func(ucp)) + return constants::invalid_u32value; + + if (ucp == cr.second) + break; + } + } + return ucp1st; + } + return constants::invalid_u32value; + } + + void split_ranges(range_pairs &kept, range_pairs &removed, const range_pairs &rightranges) const + { + range_pair newpair; + + kept.rparray_ = this->rparray_; // Subtraction set. + removed.clear(); // Intersection set. + + for (size_type i = 0;; ++i) + { + RETRY_SAMEINDEXNO: + if (i >= kept.rparray_.size()) + break; + + range_pair &left = kept.rparray_[i]; + + for (size_type j = 0; j < rightranges.rparray_.size(); ++j) + { + const range_pair &right = rightranges.rparray_[j]; + + if (right.first <= left.second) // Excludes l1 l2 < r1 r2. + { + if (left.first <= right.second) // Excludes r1 r2 < l1 l2. + { + if (left.first < right.first) + { + if (right.second < left.second) + { + removed.join(range_pair_helper(right.first, right.second)); + + newpair.set(right.second + 1, left.second); + left.second = right.first - 1; + kept.rparray_.insert(i + 1, newpair); + } + else + { + removed.join(range_pair_helper(right.first, left.second)); + left.second = right.first - 1; + } + } + else if (right.second < left.second) + { + removed.join(range_pair_helper(left.first, right.second)); + left.first = right.second + 1; + } + else + { + removed.join(range_pair_helper(left.first, left.second)); + kept.rparray_.erase(i); + goto RETRY_SAMEINDEXNO; + } + } + } + else + break; + } + } + } + +#if defined(SRELLDBG_NO_BITSET) + bool is_included(const uchar32 ch) const + { +#if 01 + const range_pair *const end = rparray_.data() + rparray_.size(); + + for (const range_pair *cur = rparray_.data(); cur != end; ++cur) + { + if (ch <= cur->second) + return ch >= cur->first; +#else + for (size_type i = 0; i < rparray_.size(); ++i) + { + if (rparray_[i].is_included(ch)) + return true; +#endif + } + return false; + } +#endif // defined(SRELLDBG_NO_BITSET) + + // For multiple_range_pairs functions. + + bool is_included_ls(const uchar32 pos, uchar32 count, const uchar32 c) const + { + const range_pair *cur = &rparray_[pos]; + + for (; count; ++cur, --count) + { + if (c <= cur->second) + return c >= cur->first; + } + return false; + } + + bool is_included(const uchar32 pos, uchar32 count, const uchar32 c) const + { + const range_pair *base = &rparray_[pos]; + + while (count) + { + uchar32 mid = count >> 1; + const range_pair &rp = base[mid]; + + if (c <= rp.second) + { + if (c >= rp.first) + return true; + + count = mid; + } + else + { + ++mid; + count -= mid; + base += mid; + } + } + return false; + } + + void replace(const size_type pos, const size_type count, const range_pairs &right) + { + rparray_.replace(pos, count, right.rparray_); + } + +#if !defined(SRELLDBG_NO_CCPOS) + + // For Eytzinger layout functions. + + bool is_included_el(uchar32 pos, const uchar32 len, const uchar32 c) const + { + const range_pair *const base = &rparray_[pos]; + +#if defined(__GNUC__) + __builtin_prefetch(base); +#endif + for (pos = 0; pos < len;) + { + const range_pair &rp = base[pos]; + + if (c <= rp.second) + { + if (c >= rp.first) + return true; + + pos = (pos << 1) + 1; + } + else + { + pos = (pos << 1) + 2; + } + } + return false; + } + + uchar32 create_el(const range_pair *srcbase, const uchar32 srcsize) + { + const uchar32 basepos = static_cast(rparray_.size()); + + rparray_.resize(basepos + srcsize); + set_eytzinger_layout(0, srcbase, srcsize, &rparray_[basepos], 0); + + return srcsize; + } + +#endif // !defined(SRELLDBG_NO_CCPOS) + + uint_l32 total_codepoints() const + { + uint_l32 num = 0; + + for (size_type no = 0; no < rparray_.size(); ++no) + { + const range_pair &cr = rparray_[no]; + + num += cr.second - cr.first + 1; + } + return num; + } + +private: + +#if !defined(SRELLDBG_NO_CCPOS) + + uchar32 set_eytzinger_layout(uchar32 srcpos, const range_pair *const srcbase, const uchar32 srclen, + range_pair *const destbase, const uchar32 destpos) + { + if (destpos < srclen) + { + const uchar32 nextpos = (destpos << 1) + 1; + + srcpos = set_eytzinger_layout(srcpos, srcbase, srclen, destbase, nextpos); + destbase[destpos] = srcbase[srcpos++]; + srcpos = set_eytzinger_layout(srcpos, srcbase, srclen, destbase, nextpos + 1); + } + return srcpos; + } + +#endif // !defined(SRELLDBG_NO_CCPOS) + + static uchar32 do_nothing(const uchar32 cp) + { + return cp; + } + + template + void load_from_bitset(const BitSetT &bs) + { + uchar32 begin = constants::invalid_u32value; + range_pairs newranges; + + for (uchar32 ucp = 0;; ++ucp) + { + if (ucp > constants::unicode_max_codepoint || !bs.test(ucp)) + { + if (begin != constants::invalid_u32value) + { + newranges.join(range_pair_helper(begin, ucp - 1)); + begin = constants::invalid_u32value; + } + if (ucp > constants::unicode_max_codepoint) + break; + } + else if (begin == constants::invalid_u32value && bs.test(ucp)) + begin = ucp; + } + rparray_.swap(newranges.rparray_); + } + + array_type rparray_; + +public: // For debug. + + void print_pairs(const int, const char *const = NULL, const char *const = NULL) const; +}; +// range_pairs + + } // namespace regex_internal + +// ... "rei_range_pair.hpp"] +// ["rei_char_class.hpp" ... + + namespace regex_internal + { + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + +// For RegExpIdentifierStart and RegExpIdentifierPart +struct identifier_charclass +{ +public: + + void clear() + { + char_class_.clear(); + char_class_pos_.clear(); + } + + void setup() + { + if (char_class_pos_.size() == 0) + { + static const uchar32 additions[] = { + // reg_exp_identifier_start, reg_exp_identifier_part. + 0x24, 0x24, 0x5f, 0x5f, 0x200c, 0x200d // '$' '_' - + }; + range_pairs ranges; + + // For reg_exp_identifier_start. + { + const uchar32 *const IDs_address = unicode_property::ranges_address(upid_bp_ID_Start); + const std::size_t IDs_number = unicode_property::number_of_ranges(upid_bp_ID_Start); + ranges.load_from_memory(IDs_address, IDs_number); + } + ranges.load_from_memory(&additions[0], 2); + append_charclass(ranges); + + // For reg_exp_identifier_part. + ranges.clear(); + { + const uchar32 *const IDc_address = unicode_property::ranges_address(upid_bp_ID_Continue); + const std::size_t IDc_number = unicode_property::number_of_ranges(upid_bp_ID_Continue); + ranges.load_from_memory(IDc_address, IDc_number); + } + ranges.load_from_memory(&additions[0], 3); + append_charclass(ranges); + } + } + + bool is_identifier(const uchar32 ch, const bool part) const + { + const range_pair &rp = char_class_pos_[part ? 1 : 0]; + + return char_class_.is_included(rp.first, rp.second, ch); + } + +private: + + void append_charclass(const range_pairs &rps) + { + char_class_pos_.push_back(range_pair_helper(static_cast(char_class_.size()), static_cast(rps.size()))); + char_class_.append_newclass(rps); + } + + range_pairs char_class_; + range_pairs::array_type char_class_pos_; + +// UnicodeIDStart:: +// any Unicode code point with the Unicode property "ID_Start" +// UnicodeIDContinue:: +// any Unicode code point with the Unicode property "ID_Continue" + static const uint_l32 upid_bp_ID_Start = static_cast(up_constants::bp_ID_Start); + static const uint_l32 upid_bp_ID_Continue = static_cast(up_constants::bp_ID_Continue); +}; +// identifier_charclass +#endif // !defined(SRELL_NO_UNICODE_PROPERTY) + +class re_character_class +{ +public: + + enum + { // 0 1 2 3 4 5 + newline, dotall, space, digit, word, icase_word, + // 6 + number_of_predefcls + }; + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + typedef unicode_property::pstring pstring; +#endif + + re_character_class() + { + setup_predefinedclass(); + } + + re_character_class &operator=(const re_character_class &that) + { + if (this != &that) + { + this->char_class_ = that.char_class_; + this->char_class_pos_ = that.char_class_pos_; +#if !defined(SRELLDBG_NO_CCPOS) + this->char_class_el_ = that.char_class_el_; + this->char_class_pos_el_ = that.char_class_pos_el_; +#endif + } + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + re_character_class &operator=(re_character_class &&that) SRELL_NOEXCEPT + { + if (this != &that) + { + this->char_class_ = std::move(that.char_class_); + this->char_class_pos_ = std::move(that.char_class_pos_); +#if !defined(SRELLDBG_NO_CCPOS) + this->char_class_el_ = std::move(that.char_class_el_); + this->char_class_pos_el_ = std::move(that.char_class_pos_el_); +#endif + } + return *this; + } +#endif + + bool is_included(const uint_l32 class_number, const uchar32 c) const + { +// return char_class_.is_included(char_class_pos_[class_number], c); + const range_pair &rp = char_class_pos_[class_number]; + + return char_class_.is_included(rp.first, rp.second, c); + } + +#if !defined(SRELLDBG_NO_CCPOS) +// bool is_included(const uint_l32 pos, const uint_l32 len, const uchar32 &c) const + bool is_included(const uchar32 pos, const uchar32 len, const uchar32 c) const + { + return char_class_el_.is_included_el(pos, len, c); + } +#endif + + void setup_icase_word() + { + range_pair &icase_pos = char_class_pos_[icase_word]; + + if (icase_pos.second == char_class_pos_[word].second) + { + range_pairs icasewordclass(char_class_, icase_pos.first, icase_pos.second); + + icasewordclass.make_caseunfoldedcharset(); + // Includes 017f and 212a so that they and their case-folded + // characters 's' and 'k' will be excluded from the character + // set that /[\W]/i matches. + + char_class_.replace(icase_pos.first, icase_pos.second, icasewordclass); + + if (icase_pos.second < static_cast(icasewordclass.size())) + { + const uchar32 delta = static_cast(icasewordclass.size() - icase_pos.second); + + for (int i = number_of_predefcls; i < static_cast(char_class_pos_.size()); ++i) + char_class_pos_[i].first += delta; + } + icase_pos.second = static_cast(icasewordclass.size()); + } + } + + void clear() + { + char_class_pos_.resize(number_of_predefcls); + + uchar32 basesize = 0; + for (int i = 0; i < number_of_predefcls; ++i) + basesize += char_class_pos_[i].second; + + char_class_.resize(basesize); + +#if !defined(SRELLDBG_NO_CCPOS) + char_class_el_.clear(); + char_class_pos_el_.clear(); +#endif + } + + uint_l32 register_newclass(const range_pairs &rps) + { + for (range_pairs::size_type no = 0; no < char_class_pos_.size(); ++no) + { + const range_pair &rp = char_class_pos_[no]; + + if (char_class_.same(rp.first, rp.second, rps)) + return static_cast(no); + } + + append_charclass(rps); + return static_cast(char_class_pos_.size() - 1); + } + + range_pairs operator[](const uint_l32 no) const + { + const range_pair &ccpos = char_class_pos_[no]; + range_pairs rp(ccpos.second); + + for (uchar32 i = 0; i < ccpos.second; ++i) + rp[i] = char_class_[ccpos.first + i]; + + return rp; + } + +#if !defined(SRELLDBG_NO_CCPOS) + const range_pair &charclasspos(const uint_l32 no) // const + { + const range_pair &pos = char_class_pos_el_[no]; + + if (pos.second == 0) + finalise(no); + return pos; + } + + void finalise() + { + char_class_el_.clear(); + char_class_pos_el_.resize(char_class_pos_.size()); + std::memset(&char_class_pos_el_[0], 0, char_class_pos_el_.size() * sizeof (range_pairs::array_type::value_type)); + } + + void finalise(const uint_l32 no) + { + const range_pair &posinfo = char_class_pos_[no]; + range_pair &outpair = char_class_pos_el_[no]; + + outpair.first = static_cast(char_class_el_.size()); + outpair.second = char_class_el_.create_el(&char_class_[posinfo.first], posinfo.second); //arraysize; + + } + +#endif // #if !defined(SRELLDBG_NO_CCPOS) + + void optimise() + { + } + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + + uint_l32 get_propertynumber(const pstring &pname, const pstring &pvalue) const + { + const uint_l32 pno = static_cast(unicode_property::lookup_property(pname, pvalue)); + + return (pno != up_constants::error_property) ? pno : up_constants::error_property; + } + + bool load_upranges(range_pairs &newranges, const uint_l32 property_number) const + { + newranges.clear(); + + if (unicode_property::is_valid_pno(property_number)) + { + if (property_number == upid_bp_Assigned) + { + load_updata(newranges, upid_gc_Cn); + newranges.negation(); + } + else + load_updata(newranges, property_number); + + return true; + } + return false; + } + + // Properties of strings. + bool is_pos(const uint_l32 pno) const + { + return unicode_property::is_pos(pno); + } + + bool get_prawdata(simple_array &seq, uint_l32 property_number) + { + if (property_number != up_constants::error_property) + { + if (property_number == upid_bp_Assigned) + property_number = upid_gc_Cn; + + const uchar32 *const address = unicode_property::ranges_address(property_number); +// const std::size_t offset = unicode_property::ranges_offset(property_number); + const std::size_t number = unicode_property::number_of_ranges(property_number) * 2; + + seq.resize(number); + for (uchar32 i = 0; i < number; ++i) + seq[i] = address[i]; + + return true; + } + seq.clear(); + return false; + } + +#endif // !defined(SRELL_NO_UNICODE_PROPERTY) + + void swap(re_character_class &right) + { + if (this != &right) + { + this->char_class_.swap(right.char_class_); + this->char_class_pos_.swap(right.char_class_pos_); +#if !defined(SRELLDBG_NO_CCPOS) + this->char_class_el_.swap(right.char_class_el_); + this->char_class_pos_el_.swap(right.char_class_pos_el_); +#endif + } + } + +private: + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + + void load_updata(range_pairs &newranges, const uint_l32 property_number) const + { + const uchar32 *const address = unicode_property::ranges_address(property_number); +// const std::size_t offset = unicode_property::ranges_offset(property_number); + const std::size_t number = unicode_property::number_of_ranges(property_number); + + newranges.load_from_memory(address, number); + } + +#endif // !defined(SRELL_NO_UNICODE_PROPERTY) + + void append_charclass(const range_pairs &rps) + { + char_class_pos_.push_back(range_pair_helper(static_cast(char_class_.size()), static_cast(rps.size()))); + char_class_.append_newclass(rps); + } + +// The production CharacterClassEscape::s evaluates as follows: +// Return the set of characters containing the characters that are on the right-hand side of the WhiteSpace or LineTerminator productions. +// WhiteSpace:: +// 0009 000B 000C 0020 00A0 FEFF Zs +// LineTerminator:: +// 000A 000D 2028 2029 + + void setup_predefinedclass() + { +#if !defined(SRELL_NO_UNICODE_PROPERTY) + const uchar32 *const Zs_address = unicode_property::ranges_address(upid_gc_Zs); +// const std::size_t Zs_offset = unicode_property::ranges_offset(upid_gc_Zs); + const std::size_t Zs_number = unicode_property::number_of_ranges(upid_gc_Zs); +#else + static const uchar32 Zs[] = { + 0x1680, 0x1680, 0x2000, 0x200a, // 0x2028, 0x2029, + 0x202f, 0x202f, 0x205f, 0x205f, 0x3000, 0x3000 + }; +#endif // defined(SRELL_NO_UNICODE_PROPERTY) + static const uchar32 allranges[] = { + // dotall. + 0x0000, 0x10ffff, + // newline. + 0x0a, 0x0a, 0x0d, 0x0d, // \n \r + // newline, space. + 0x2028, 0x2029, + // space. + 0x09, 0x0d, // \t \n \v \f \r + 0x20, 0x20, // ' ' + 0xa0, 0xa0, // + 0xfeff, 0xfeff, // + // digit, word. + 0x30, 0x39, // '0'-'9' + 0x41, 0x5a, 0x5f, 0x5f, 0x61, 0x7a // 'A'-'Z' '_' 'a'-'z' + }; + range_pairs ranges; + + // newline. + ranges.load_from_memory(&allranges[2], 3); + append_charclass(ranges); + + // dotall. + ranges.clear(); + ranges.load_from_memory(&allranges[0], 1); + append_charclass(ranges); + + // space. + ranges.clear(); + ranges.load_from_memory(&allranges[6], 5); +#if !defined(SRELL_NO_UNICODE_PROPERTY) + ranges.load_from_memory(Zs_address, Zs_number); +#else + ranges.load_from_memory(Zs, 5); +#endif + append_charclass(ranges); + + // digit. + ranges.clear(); + ranges.load_from_memory(&allranges[16], 1); + append_charclass(ranges); + + // word. + ranges.clear(); + ranges.load_from_memory(&allranges[16], 4); + append_charclass(ranges); + + // Reservation for icase_word. + append_charclass(ranges); + } + +private: + + range_pairs char_class_; + range_pairs::array_type char_class_pos_; + +#if !defined(SRELLDBG_NO_CCPOS) + range_pairs char_class_el_; + range_pairs::array_type char_class_pos_el_; + +#endif + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + static const uint_l32 upid_gc_Zs = static_cast(up_constants::gc_Space_Separator); + static const uint_l32 upid_gc_Cn = static_cast(up_constants::gc_Unassigned); + static const uint_l32 upid_bp_Assigned = static_cast(up_constants::bp_Assigned); + +#endif + +public: // For debug. + + void print_classes(const int) const; +}; +// re_character_class + + } // namespace regex_internal + +// ... "rei_char_class.hpp"] +// ["rei_groupname_mapper.hpp" ... + + namespace regex_internal + { + +#if !defined(SRELL_NO_NAMEDCAPTURE) + +template +class groupname_mapper +{ +public: + + typedef simple_array gname_string; + typedef typename gname_string::size_type size_type; + static const uint_l32 notfound = static_cast(-1); + + groupname_mapper() + { + } + + groupname_mapper(const groupname_mapper &right) + : names_(right.names_), keysize_classno_(right.keysize_classno_) + { + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + groupname_mapper(groupname_mapper &&right) SRELL_NOEXCEPT + : names_(std::move(right.names_)), keysize_classno_(std::move(right.keysize_classno_)) + { + } +#endif + + groupname_mapper &operator=(const groupname_mapper &right) + { + if (this != &right) + { + names_ = right.names_; + keysize_classno_ = right.keysize_classno_; + } + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + groupname_mapper &operator=(groupname_mapper &&right) SRELL_NOEXCEPT + { + if (this != &right) + { + names_ = std::move(right.names_); + keysize_classno_ = std::move(right.keysize_classno_); + } + return *this; + } +#endif + + void clear() + { + names_.clear(); + keysize_classno_.clear(); + } + + uint_l32 operator[](const gname_string &gname) const + { + uint_l32 pos = 0; + for (std::size_t i = 0; i < static_cast(keysize_classno_.size()); i += 2) + { + const uint_l32 keysize = keysize_classno_[i]; + + if (keysize == static_cast(gname.size()) && sameseq(pos, gname)) + return keysize_classno_[++i]; + + pos += keysize; + } + return notfound; + } + + gname_string operator[](const uint_l32 indexno) const + { + uint_l32 pos = 0; + for (std::size_t i = 0; i < static_cast(keysize_classno_.size()); ++i) + { + const uint_l32 keysize = keysize_classno_[i]; + const uint_l32 classno = keysize_classno_[++i]; + + if (classno == indexno) + return gname_string(names_, pos, keysize); + + pos += keysize; + } + return gname_string(); + } + + size_type size() const + { + return static_cast(keysize_classno_.size() >> 1); + } + + bool push_back(const gname_string &gname, const uint_l32 class_number) + { + const uint_l32 num = operator[](gname); + + if (num == notfound) + { + names_.append(gname); + keysize_classno_.append(1, static_cast(gname.size())); + keysize_classno_.append(1, class_number); + return true; + } + return false; // Already exists. + } + + void swap(groupname_mapper &right) + { + this->names_.swap(right.names_); + keysize_classno_.swap(right.keysize_classno_); + } + +private: + + bool sameseq(size_type pos, const gname_string &gname) const + { + for (size_type i = 0; i < gname.size(); ++i, ++pos) + if (pos >= names_.size() || names_[pos] != gname[i]) + return false; + + return true; + } + + gname_string names_; + simple_array keysize_classno_; + +public: // For debug. + + void print_mappings(const int) const; +}; +template +const uint_l32 groupname_mapper::notfound; +// groupname_mapper + +#endif // !defined(SRELL_NO_NAMEDCAPTURE) + + } // namespace regex_internal + +// ... "rei_groupname_mapper.hpp"] +// ["rei_state.hpp" ... + + namespace regex_internal + { + +struct re_quantifier +{ + // atleast and atmost: for check_counter. + // offset and length: for charcter_class. + // (Special case 1) in roundbracket_open and roundbracket_pop atleast and atmost represent + // the minimum and maximum bracket numbers respectively inside the brackets itself. + // (Special case 2) in repeat_in_push and repeat_in_pop atleast and atmost represent the + // minimum and maximum bracket numbers respectively inside the repetition. + union + { + uint_l32 atleast; + // (Special case 3: v1) in lookaround_open represents the number of characters to be rewound. + // (Special case 3: v2) in lookaround_open represents: 0=lookaheads, 1=lookbehinds, + // 2=matchpointrewinder. + // (Special case 4) in NFA_states[0] represents the class number of the first character class. + uchar32 offset; + }; + union + { + uint_l32 atmost; + uchar32 length; + }; + + union + { + bool is_greedy; + uint_l32 padding_; + }; + + void reset(const uint_l32 len = 1) + { + atleast = atmost = len; + is_greedy = true; + } + + void set(const uint_l32 min, const uint_l32 max) + { + atleast = min; + atmost = max; + } + + void set(const uint_l32 min, const uint_l32 max, const bool greedy) + { + atleast = min; + atmost = max; + is_greedy = greedy; + } + + void setccpos(const uchar32 o, const uchar32 l) + { + offset = o; + length = l; + } + + bool is_valid() const + { + return atleast <= atmost && atmost > 0; + } + + void set_infinity() + { + atmost = constants::infinity; + } + + bool is_infinity() const + { + return atmost == constants::infinity; + } + + bool is_same() const + { + return atleast == atmost; + } + + bool is_default() const + { + return atleast == 1 && atmost == 1; + } + + bool is_asterisk() const + { + return atleast == 0 && atmost == constants::infinity; + } + bool is_plus() const + { + return atleast == 1 && atmost == constants::infinity; + } + bool is_asterisk_or_plus() const + { + return atleast <= 1 && atmost == constants::infinity; + } + bool is_question_or_asterisk() const + { + return atleast == 0 && (atmost == 1 || atmost == constants::infinity); + } + + bool has_simple_equivalence() const + { + return (atleast <= 1 && atmost <= 3) || (atleast == 2 && atmost <= 4) || (atleast == atmost && atmost <= 6); + } + + void multiply(const re_quantifier &q) + { + if (atleast != constants::infinity) + { + if (q.atleast != constants::infinity) + atleast *= q.atleast; + else + atleast = constants::infinity; + } + + if (atmost != constants::infinity) + { + if (q.atmost != constants::infinity) + atmost *= q.atmost; + else + atmost = constants::infinity; + } + } + + void add(const re_quantifier &q) + { + if (atleast != constants::infinity) + { + if (q.atleast != constants::infinity && (atleast + q.atleast) >= atleast) + atleast += q.atleast; + else + atleast = constants::infinity; + } + + if (atmost != constants::infinity) + { + if (q.atmost != constants::infinity && (atmost + q.atmost) >= atmost) + atmost += q.atmost; + else + atmost = constants::infinity; + } + } +}; +// re_quantifier + +struct re_state +{ + union + { + uchar32 character; // For character. + uint_l32 number; // For character_class, brackets, counter, repeat, backreference. + }; + + re_state_type type; + + union + { + std::ptrdiff_t next1; + re_state *next_state1; + // Points to the next state. + // (Special case 1) in lookaround_open points to the next of lookaround_close. + }; + union + { + std::ptrdiff_t next2; + re_state *next_state2; + // character and character_class: points to another possibility, non-backtracking. + // epsilon: points to another possibility, backtracking. + // save_and_reset_counter, roundbracket_open, and repeat_in_push: points to a + // restore state, backtracking. + // check_counter: complementary to next1 based on quantifier.is_greedy. + // (Special case 1) roundbracket_close, check_0_width_repeat, and backreference: + // points to the next state as an exit after 0 width match. + // (Special case 2) in NFA_states[0] holds the entry point for match_continuous/regex_match. + // (Special case 3) in lookaround_open points to the contents of brackets. + }; + + re_quantifier quantifier; // For check_counter, roundbrackets, repeasts, (?<=...) and (? number of chars to be rewound (for (?<=...) (? 0: lookahead, 1: lookbehind, 2: mprewinder. + // q.atmost: - + // q.greedy: - + // is_not/dont_push: not + + // st_bol, // 0x0f + // char/number: - + // next1/next2: - + // quantifiers: - + // is_not/dont_push: - + + // st_eol, // 0x10 + // char/number: - + // next1/next2: - + // quantifiers: - + // is_not/dont_push: - + + // st_boundary, // 0x11 + // char/number: - + // next1/next2: - + // quantifiers: - + // is_not/dont_push: not + + // st_success, // 0x12 + // char/number: - + // next1/next2: - + // quantifiers: - + // is_not/dont_push: - + + // st_move_nextpos, // 0x13 + // char/number: - + // next1/next2: - + // quantifiers: - + // is_not/dont_push: - + + void reset() + { + number = 0; + type = st_character; + next1 = 1; + next2 = 0; + is_not = false; + quantifier.reset(); + } + + bool is_character_or_class() const + { + return type == st_character || type == st_character_class; + } + + bool has_quantifier() const + { + // 1. character: size == 1 && type == character, + // 2. [...]: size == 1 && type == character_class, + // 3. (...): size == ? && type == roundbracket_open, + // 4. (?:...): size == ? && type == epsilon && character == ':', + // 5. backref: size == ? && type == backreference, + // -- assertions boundary -- + // 6. lookaround: size == ? && type == lookaround, + // 7. assertion: size == 0 && type == one of assertions (^, $, \b and \B). +#if !defined(SRELL_ENABLE_GT) + return type < st_zero_width_boundary; +#else + // 5.5. independent: size == ? && type == lookaround && character == '>', + return type < st_zero_width_boundary || (type == st_lookaround_open && character == meta_char::mc_gt); +#endif + } + + bool is_noncapturinggroup() const + { + return type == st_epsilon && character == meta_char::mc_colon; + } + + bool has_0widthchecker() const + { + return type == st_roundbracket_open || type == st_backreference; + } + + bool is_negcharclass() const + { + return type == st_character_class && is_not; + } + + bool is_branch() const + { + return type == st_epsilon && next2 != 0 && character == meta_char::mc_bar; // '|' + } +}; +// re_state + +struct re_flags +{ +// bool i; +// bool m; +// bool s; + +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + bool back; +#endif + + void reset(const regex_constants::syntax_option_type /* flags */) + { +// i = (flags & regex_constants::icase) != 0; // Case-insensitive. +// m = (flags & regex_constants::multiline) != 0; +// s = (flags & regex_constants::dotall) != 0; + +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + back = false; +#endif + } + + void restore_from(const re_flags &backup) + { +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + back = backup.back; +#endif + } +}; +// re_flags + +template +struct re_compiler_state : public re_flags +{ + bool backref_used; + + simple_array atleast_widths_of_brackets; +#if !defined(SRELL_NO_NAMEDCAPTURE) + groupname_mapper unresolved_gnames; +#endif + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + identifier_charclass idchecker; +#endif + + void reset(const regex_constants::syntax_option_type flags) + { + re_flags::reset(flags); + + backref_used = false; + atleast_widths_of_brackets.clear(); + +#if !defined(SRELL_NO_NAMEDCAPTURE) + unresolved_gnames.clear(); +#endif + +#if !defined(SRELL_NO_UNICODE_PROPERTY) +// idchecker.clear(); // Keeps data once created. +#endif + } +}; +// re_compiler_state + + } // namespace regex_internal + +// ... "rei_state.hpp"] +// ["rei_search_state.hpp" ... + +template +class sub_match /* : std::pair */; + + namespace regex_internal + { + +//template +struct re_state; + +template +struct re_search_state_core +{ + const re_state/* */ *in_NFA_states; + BidirectionalIterator in_string; +}; + +template +struct re_submatch_core +{ + BidirectionalIterator open_at; + BidirectionalIterator close_at; +}; + +template +struct re_submatch_type +{ + re_submatch_core core; + uint_l32 counter; +}; + +template +struct re_search_state_types +{ + typedef re_submatch_core submatch_core; + typedef re_submatch_type submatch_type; + typedef uint_l32 counter_type; + typedef BidirectionalIterator position_type; + + typedef std::vector submatch_array; + + typedef re_search_state_core search_core_state; + + typedef std::vector backtracking_array; + typedef std::vector capture_array; + typedef simple_array counter_array; + typedef std::vector repeat_array; +}; + +template +struct re_search_state_types +{ + typedef re_submatch_core submatch_core; + typedef re_submatch_type submatch_type; + typedef uint_l32 counter_type; + typedef const charT2 *position_type; + + typedef simple_array submatch_array; + + typedef re_search_state_core search_core_state; + + typedef simple_array backtracking_array; + typedef simple_array capture_array; + typedef simple_array repeat_array; + typedef simple_array counter_array; +}; +// re_search_state_types + +template +class re_search_state : public re_search_state_types +{ +private: + + typedef re_search_state_types base_type; + +public: + + typedef typename base_type::submatch_core submatchcore_type; + typedef typename base_type::submatch_type submatch_type; + typedef typename base_type::counter_type counter_type; + typedef typename base_type::position_type position_type; + + typedef typename base_type::submatch_array submatch_array; + + typedef typename base_type::search_core_state search_core_state; + + typedef typename base_type::backtracking_array backtracking_array; + typedef typename base_type::capture_array capture_array; + typedef typename base_type::counter_array counter_array; + typedef typename base_type::repeat_array repeat_array; + + typedef typename backtracking_array::size_type btstack_size_type; + +public: + + struct bottom_state + { + btstack_size_type btstack_size; + typename capture_array::size_type capturestack_size; + typename counter_array::size_type counterstack_size; + typename repeat_array::size_type repeatstack_size; + + bottom_state( + const btstack_size_type bt, + const typename capture_array::size_type h, + const typename counter_array::size_type c, + const typename repeat_array::size_type r) + : btstack_size(bt) + , capturestack_size(h) + , counterstack_size(c) + , repeatstack_size(r) + { + } + }; + +public: + + search_core_state nth; + +#if !defined(SRELL_NO_LIMIT_COUNTER) + std::size_t failure_counter; +#endif + + BidirectionalIterator srchend; + BidirectionalIterator lblim; + + BidirectionalIterator nextpos; + + backtracking_array bt_stack; + + capture_array capture_stack; + counter_array counter_stack; + repeat_array repeat_stack; + + submatch_array bracket; + counter_array counter; + repeat_array repeat; + + btstack_size_type btstack_size; + + BidirectionalIterator srchbegin; + +public: + + void init + ( + const BidirectionalIterator begin, + const BidirectionalIterator end, + const BidirectionalIterator lookbehindlimit, + const regex_constants::match_flag_type flags + ) + { + lblim = lookbehindlimit; + nextpos = srchbegin = begin; + srchend = end; + flags_ = flags; + } + + void set_entrypoint(const re_state *const entry) + { + entry_state_ = entry; + } + + void init_for_automaton + ( + uint_l32 num_of_submatches, + const uint_l32 num_of_counters, + const uint_l32 num_of_repeats + ) + { + + bracket.resize(num_of_submatches); + counter.resize(num_of_counters); + repeat.resize(num_of_repeats); + + nth.in_string = (flags_ & regex_constants::match_continuous) ? srchbegin : srchend; + + while (num_of_submatches > 1) + { + submatch_type &br = bracket[--num_of_submatches]; + + br.core.open_at = br.core.close_at = this->srchend; + br.counter = 0; + // 15.10.2.9; AtomEscape: + // If the regular expression has n or more capturing parentheses + // but the nth one is undefined because it hasn't captured anything, + // then the backreference always succeeds. + + // C.f., table 27 and 28 on TR1, table 142 and 143 on C++11. + } + + clear_stacks(); + } + +#if defined(SRELL_NO_LIMIT_COUNTER) + void reset(/* const BidirectionalIterator start */) +#else + void reset(/* const BidirectionalIterator start, */ const std::size_t limit) +#endif + { + nth.in_NFA_states = this->entry_state_; + + bracket[0].core.open_at = nth.in_string; + +#if !defined(SRELL_NO_LIMIT_COUNTER) + failure_counter = limit; +#endif + } + + bool is_at_lookbehindlimit() const + { + return nth.in_string == this->lblim; + } + + bool is_at_srchend() const + { + return nth.in_string == this->srchend; + } + + bool is_null() const + { + return nth.in_string == bracket[0].core.open_at; + } + +// regex_constants::match_flag_type flags() const +// { +// return this->flags_; +// } + + bool match_not_bol_flag() const + { + if (this->flags_ & regex_constants::match_not_bol) + return true; + return false; + } + + bool match_not_eol_flag() const + { + if (this->flags_ & regex_constants::match_not_eol) + return true; + return false; + } + + bool match_not_bow_flag() const + { + if (this->flags_ & regex_constants::match_not_bow) + return true; + return false; + } + + bool match_not_eow_flag() const + { + if (this->flags_ & regex_constants::match_not_eow) + return true; + return false; + } + + bool match_prev_avail_flag() const + { + if (this->flags_ & regex_constants::match_prev_avail) + return true; + return false; + } + + bool match_not_null_flag() const + { + if (this->flags_ & regex_constants::match_not_null) + return true; + return false; + } + + bool match_continuous_flag() const + { + if (this->flags_ & regex_constants::match_continuous) + return true; + return false; + } + + bool match_match_flag() const + { + if (this->flags_ & regex_constants::match_match_) + return true; + return false; + } + + bool set_bracket0(const BidirectionalIterator begin, const BidirectionalIterator end) + { + nth.in_string = begin; + nextpos = end; + return true; + } + + void clear_stacks() + { + btstack_size = 0; + bt_stack.clear(); + capture_stack.clear(); + repeat_stack.clear(); + counter_stack.clear(); + } + + btstack_size_type size() const // For debug. + { + return bt_stack.size(); + } + + bool is_empty() const // For debug. + { + if (btstack_size == 0 + && bt_stack.size() == 0 + && capture_stack.size() == 0 + && repeat_stack.size() == 0 + && counter_stack.size() == 0) + return true; + + return false; + } + +private: + + /* const */regex_constants::match_flag_type flags_; + const re_state/* */ * /* const */entry_state_; +}; +// re_search_state + + } // namespace regex_internal + +// ... "rei_search_state.hpp"] +// ["rei_bmh.hpp" ... + + namespace regex_internal + { + +#if !defined(SRELLDBG_NO_BMH) + +template +class re_bmh +{ +public: + + re_bmh() + { + } + + re_bmh(const re_bmh &right) + { + operator=(right); + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + re_bmh(re_bmh &&right) SRELL_NOEXCEPT + { + operator=(std::move(right)); + } +#endif + + re_bmh &operator=(const re_bmh &that) + { + if (this != &that) + { + this->u32string_ = that.u32string_; + + this->bmtable_ = that.bmtable_; + this->repseq_ = that.repseq_; + } + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + re_bmh &operator=(re_bmh &&that) SRELL_NOEXCEPT + { + if (this != &that) + { + this->u32string_ = std::move(that.u32string_); + + this->bmtable_ = std::move(that.bmtable_); + this->repseq_ = std::move(that.repseq_); + } + return *this; + } +#endif + + void clear() + { + u32string_.clear(); + + bmtable_.clear(); + repseq_.clear(); + } + + void setup(const simple_array &u32s, const bool icase) + { + u32string_ = u32s; + setup_(); + + if (!icase) + setup_for_casesensitive(); + else + setup_for_icase(); + } + + template + bool do_casesensitivesearch(re_search_state &sstate, const std::random_access_iterator_tag) const + { + RandomAccessIterator begin = sstate.srchbegin; + const RandomAccessIterator end = sstate.srchend; + std::size_t offset = static_cast(repseq_.size() - 1); + const charT *const relastchar = &repseq_[offset]; + + for (; static_cast(end - begin) > offset;) + { + begin += offset; + + if (*begin == *relastchar) + { + const charT *re = relastchar; + RandomAccessIterator tail = begin; + + for (; *--re == *--tail;) + { + if (re == repseq_.data()) + return sstate.set_bracket0(tail, ++begin); + } + } + offset = bmtable_[*begin & 0xff]; + } + return false; + } + + template + bool do_casesensitivesearch(re_search_state &sstate, const std::bidirectional_iterator_tag) const + { + BidirectionalIterator begin = sstate.srchbegin; + const BidirectionalIterator end = sstate.srchend; + std::size_t offset = static_cast(repseq_.size() - 1); + const charT *const relastchar = &repseq_[offset]; + + for (;;) + { + for (; offset; --offset, ++begin) + if (begin == end) + return false; + + if (*begin == *relastchar) + { + const charT *re = relastchar; + BidirectionalIterator tail = begin; + + for (; *--re == *--tail;) + { + if (re == repseq_.data()) + return sstate.set_bracket0(tail, ++begin); + } + } + offset = bmtable_[*begin & 0xff]; + } + } + + template + bool do_icasesearch(re_search_state &sstate, const std::random_access_iterator_tag) const + { + const RandomAccessIterator begin = sstate.srchbegin; + const RandomAccessIterator end = sstate.srchend; + std::size_t offset = bmtable_[256]; + const uchar32 entrychar = u32string_[u32string_.size() - 1]; + const uchar32 *const re2ndlastchar = &u32string_[u32string_.size() - 2]; + RandomAccessIterator curpos = begin; + + for (; static_cast(end - curpos) > offset;) + { + curpos += offset; + + for (; utf_traits::is_trailing(*curpos);) + if (++curpos == end) + return false; + + const uchar32 txtlastchar = utf_traits::codepoint(curpos, end); + + if (txtlastchar == entrychar || unicode_case_folding::do_casefolding(txtlastchar) == entrychar) + { + const uchar32 *re = re2ndlastchar; + RandomAccessIterator tail = curpos; + +// for (; *--re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin));) + for (; *re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin)); --re) + { + if (re == u32string_.data()) + { + utf_traits::codepoint_inc(curpos, end); + return sstate.set_bracket0(tail, curpos); + } + if (tail == begin) + break; + } + } + offset = bmtable_[txtlastchar & 0xff]; + } + return false; + } + + template + bool do_icasesearch(re_search_state &sstate, const std::bidirectional_iterator_tag) const + { + const BidirectionalIterator begin = sstate.srchbegin; + const BidirectionalIterator end = sstate.srchend; + + if (begin != end) + { + std::size_t offset = bmtable_[256]; //static_cast(u32string_.size() - 1); + const uchar32 entrychar = u32string_[offset]; + const uchar32 *const re2ndlastchar = &u32string_[offset - 1]; + BidirectionalIterator curpos = begin; + + for (;;) + { + for (;;) + { + if (++curpos == end) + return false; + if (!utf_traits::is_trailing(*curpos)) + if (--offset == 0) + break; + } +// const uchar32 txtlastchar = unicode_case_folding::do_casefolding(utf_traits::codepoint(curpos, end)); + const uchar32 txtlastchar = utf_traits::codepoint(curpos, end); + +// if (txtlastchar == *re2ndlastchar) +// if (txtlastchar == *re2ndlastchar || unicode_case_folding::do_casefolding(txtlastchar) == *re2ndlastchar) + if (txtlastchar == entrychar || unicode_case_folding::do_casefolding(txtlastchar) == entrychar) + { + const uchar32 *re = re2ndlastchar; + BidirectionalIterator tail = curpos; + + for (; *re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin)); --re) + { + if (re == u32string_.data()) + { + utf_traits::codepoint_inc(curpos, end); + return sstate.set_bracket0(tail, curpos); + } + if (tail == begin) + break; + } + } + offset = bmtable_[txtlastchar & 0xff]; + } + } + return false; + } + +private: + + void setup_() + { + bmtable_.resize(257); + } + + void setup_for_casesensitive() + { + charT mbstr[utf_traits::maxseqlen]; + const std::size_t u32str_lastcharpos_ = static_cast(u32string_.size() - 1); + + repseq_.clear(); + + for (std::size_t i = 0; i <= u32str_lastcharpos_; ++i) + { + const uchar32 seqlen = utf_traits::to_codeunits(mbstr, u32string_[i]); + + for (uchar32 j = 0; j < seqlen; ++j) + repseq_.push_back(mbstr[j]); + } + + for (std::size_t i = 0; i < 256; ++i) + bmtable_[i] = static_cast(repseq_.size()); + + const std::size_t repseq_lastcharpos_ = static_cast(repseq_.size() - 1); + + for (std::size_t i = 0; i < repseq_lastcharpos_; ++i) + bmtable_[repseq_[i] & 0xff] = repseq_lastcharpos_ - i; + } + + void setup_for_icase() + { + charT mbstr[utf_traits::maxseqlen]; + uchar32 u32table[ucf_constants::rev_maxset]; + const std::size_t u32str_lastcharpos = static_cast(u32string_.size() - 1); + simple_array minlen(u32string_.size()); + std::size_t cu_repseq_lastcharpos = 0; + + for (std::size_t i = 0; i <= u32str_lastcharpos; ++i) + { + const uchar32 setnum = unicode_case_folding::casefoldedcharset(u32table, u32string_[i]); + uchar32 u32c = u32table[0]; + + for (uchar32 j = 1; j < setnum; ++j) + if (u32c > u32table[j]) + u32c = u32table[j]; + + if (i < u32str_lastcharpos) + cu_repseq_lastcharpos += minlen[i] = utf_traits::to_codeunits(mbstr, u32c); + } + + ++cu_repseq_lastcharpos; + + for (std::size_t i = 0; i < 256; ++i) + bmtable_[i] = cu_repseq_lastcharpos; + + bmtable_[256] = --cu_repseq_lastcharpos; + + for (std::size_t i = 0; i < u32str_lastcharpos; ++i) + { + const uchar32 setnum = unicode_case_folding::casefoldedcharset(u32table, u32string_[i]); + + for (uchar32 j = 0; j < setnum; ++j) + bmtable_[u32table[j] & 0xff] = cu_repseq_lastcharpos; + + cu_repseq_lastcharpos -= minlen[i]; + } + } + +public: // For debug. + + void print_table() const; + void print_seq() const; + +private: + + simple_array u32string_; +// std::size_t bmtable_[256]; + simple_array bmtable_; + simple_array repseq_; +}; +// re_bmh + +#endif // !defined(SRELLDBG_NO_BMH) + } // namespace regex_internal + +// ... "rei_bmh.hpp"] +// ["rei_upos.hpp" ... + + namespace regex_internal + { + +struct posdata_holder +{ + simple_array indices; + simple_array seqs; + range_pairs ranges; + range_pair length; + + void clear() + { + indices.clear(); + seqs.clear(); + ranges.clear(); + length.set(1); + } + + bool has_empty() const + { + return (indices.size() >= 2 && indices[0] != indices[1]) ? true : false; + } + + bool has_data() const + { + return ranges.size() > 0 || indices.size() > 0; + } + + bool may_contain_strings() const + { + return indices.size() > 0; // >= 2; + } + + void swap(posdata_holder &right) + { + indices.swap(right.indices); + seqs.swap(right.seqs); + ranges.swap(right.ranges); + length.swap(right.length); + } + + void do_union(const posdata_holder &right) + { + simple_array curseq; + + ranges.merge(right.ranges); + + if (right.has_empty() && !has_empty()) + register_emptystring(); + + for (uchar32 seqlen = 2; seqlen < static_cast(right.indices.size()); ++seqlen) + { + const uchar32 end = right.indices[seqlen - 1]; + uchar32 begin = right.indices[seqlen]; + + if (begin != end) + { + const std::size_t complen = seqlen * sizeof (uchar32); + + ensure_length(seqlen); + curseq.resize(seqlen); + + for (; begin < end;) + { + const uchar32 inspos = find_seq(&right.seqs[begin], seqlen, complen); + + if (inspos == indices[seqlen - 1]) + { + for (uchar32 i = 0; i < seqlen; ++i, ++begin) + curseq[i] = right.seqs[begin]; + + seqs.insert(inspos, curseq); + for (uchar32 i = 0; i < seqlen; ++i) + indices[i] += seqlen; + } + else + begin += seqlen; + } + } + } + check_lengths(); + } + + void do_subtract(const posdata_holder &right) + { + const uchar32 maxlen = static_cast(indices.size() <= right.indices.size() ? indices.size() : right.indices.size()); + + { + range_pairs kept; + range_pairs removed; + + ranges.split_ranges(kept, removed, right.ranges); + ranges.swap(kept); + } + + if (right.has_empty() && has_empty()) + unregister_emptystring(); + + for (uchar32 seqlen = 2; seqlen < maxlen; ++seqlen) + { + const uchar32 end = right.indices[seqlen - 1]; + uchar32 begin = right.indices[seqlen]; + + if (begin != end) + { + const std::size_t complen = seqlen * sizeof (uchar32); + + for (; begin < end;) + { + const uchar32 delpos = find_seq(&right.seqs[begin], seqlen, complen); + + if (delpos < indices[seqlen - 1]) + { + seqs.erase(delpos, seqlen); + + for (uchar32 i = 0; i < seqlen; ++i) + indices[i] -= seqlen; + } + else + begin += seqlen; + } + } + } + check_lengths(); + } + + void do_and(const posdata_holder &right) + { + const uchar32 maxlen = static_cast(indices.size() <= right.indices.size() ? indices.size() : right.indices.size()); + posdata_holder newpos; + simple_array curseq; + + { + range_pairs kept; + + ranges.split_ranges(kept, newpos.ranges, right.ranges); + ranges.swap(newpos.ranges); + } + + if (has_empty() && right.has_empty()) + newpos.register_emptystring(); + else if (may_contain_strings() || right.may_contain_strings()) + ensure_length(1); + + for (uchar32 seqlen = 2; seqlen < maxlen; ++seqlen) + { + const uchar32 end = right.indices[seqlen - 1]; + uchar32 begin = right.indices[seqlen]; + + if (begin != end) + { + const std::size_t complen = seqlen * sizeof (uchar32); + const uchar32 myend = indices[seqlen - 1]; + + curseq.resize(seqlen); + + for (; begin < end; begin += seqlen) + { + const uchar32 srcpos = find_seq(&right.seqs[begin], seqlen, complen); + + if (srcpos < myend) + { + newpos.ensure_length(seqlen); + + const uchar32 inspos = newpos.find_seq(&right.seqs[begin], seqlen, complen); + + if (inspos == newpos.indices[seqlen - 1]) + { + for (uchar32 i = 0; i < seqlen; ++i) + curseq[i] = right.seqs[begin + i]; + + newpos.seqs.insert(inspos, curseq); + for (uchar32 i = 0; i < seqlen; ++i) + newpos.indices[i] += seqlen; + } + } + } + } + } + this->indices.swap(newpos.indices); + this->seqs.swap(newpos.seqs); + check_lengths(); + } + + void split_seqs_and_ranges(const simple_array &inseqs, const bool icase, const bool back) + { + const uchar32 max = static_cast(inseqs.size()); + simple_array curseq; + + clear(); + + for (uchar32 indx = 0; indx < max;) + { + const uchar32 elen = inseqs[indx++]; + + if (elen == 1) // Range. + { + ranges.join(range_pair_helper(inseqs[indx], inseqs[indx + 1])); + indx += 2; + } + else if (elen == 2) + { + const uchar32 ucpval = inseqs[indx++]; + + if (ucpval != constants::ccstr_empty) + ranges.join(range_pair_helper(ucpval)); + else + register_emptystring(); + } + else if (elen >= 3) + { + const uchar32 seqlen = elen - 1; + + ensure_length(seqlen); + + const uchar32 inspos = indices[seqlen - 1]; + + curseq.resize(seqlen); + if (!back) + { + for (uchar32 j = 0; j < seqlen; ++j, ++indx) + curseq[j] = inseqs[indx]; + } + else + { + for (uchar32 j = seqlen; j; ++indx) + curseq[--j] = inseqs[indx]; + } + + if (icase) + { + for (simple_array::size_type i = 0; i < curseq.size(); ++i) + curseq[i] = unicode_case_folding::do_casefolding(curseq[i]); + } + + const std::size_t complen = seqlen * sizeof (uchar32); + + for (uchar32 i = indices[seqlen];; i += seqlen) + { + if (i == inspos) + { + seqs.insert(inspos, curseq); + for (uchar32 i = 0; i < seqlen; ++i) + indices[i] += seqlen; + break; + } + + if (std::memcmp(&seqs[i], curseq.data(), complen) == 0) + break; + } + + } + //elen == 0: Padding. + } + +// if (this->is_icase()) + if (icase) + ranges.make_caseunfoldedcharset(); + + check_lengths(); + + } + +private: + + void register_emptystring() + { + if (indices.size() < 2) + { + indices.resize(2); + indices[1] = 0; + indices[0] = 1; + } + else if (indices[0] == indices[1]) + { + ++indices[0]; + } + length.first = 0; + } + + void unregister_emptystring() + { + if (indices.size() >= 2 && indices[0] != indices[1]) + indices[0] = indices[1]; + } + + void ensure_length(const uchar32 seqlen) + { + uchar32 curlen = static_cast(indices.size()); + + if (seqlen >= curlen) + { + indices.resize(seqlen + 1); + for (; curlen <= seqlen; ++curlen) + indices[curlen] = 0; + } + } + + uchar32 find_seq(const uchar32 *const seqbegin, const uchar32 seqlen, const std::size_t complen) const + { + const uchar32 end = indices[seqlen - 1]; + + for (uchar32 begin = indices[seqlen]; begin < end; begin += seqlen) + { + if (std::memcmp(seqbegin, &seqs[begin], complen) == 0) + return begin; + } + return end; + } + + void check_lengths() + { + length.set(constants::max_u32value, 0); + + for (uchar32 i = 2; i < static_cast(indices.size()); ++i) + { + if (indices[i] != indices[i - 1]) + { + if (length.first > i) + length.first = i; + if (length.second < i) + length.second = i; + } + } + + if (ranges.size()) + { + if (length.first > 1) + length.first = 1; + if (length.second < 1) + length.second = 1; + } + + if (has_empty()) + length.first = 0; + + if (length.second == 0) + length.first = 0; + } +}; +// posdata_holder + + } // namespace regex_internal + +// ... "rei_upos.hpp"] +// ["rei_compiler.hpp" ... + + namespace regex_internal + { + +template +struct re_object_core +{ +protected: + + typedef re_state/**/ state_type; + typedef simple_array state_array; + + state_array NFA_states; + re_character_class character_class; + +#if !defined(SRELLDBG_NO_1STCHRCLS) + #if !defined(SRELLDBG_NO_BITSET) + bitset firstchar_class_bs; + #else + range_pairs firstchar_class; + #endif +#endif + +#if !defined(SRELL_NO_LIMIT_COUNTER) +public: + + std::size_t limit_counter; + +protected: +#endif + + typedef typename traits::utf_traits utf_traits; + + uint_l32 number_of_brackets; + uint_l32 number_of_counters; + uint_l32 number_of_repeats; + regex_constants::syntax_option_type soflags; + +#if !defined(SRELL_NO_NAMEDCAPTURE) + groupname_mapper namedcaptures; + typedef typename groupname_mapper::gname_string gname_string; +#endif + +#if !defined(SRELLDBG_NO_BMH) + re_bmh *bmdata; +#endif + +#if !defined(SRELL_NO_LIMIT_COUNTER) +private: + + static const std::size_t lcounter_defnum_ = 16777216; + +#endif + +protected: + + re_object_core() +#if !defined(SRELL_NO_LIMIT_COUNTER) + : limit_counter(lcounter_defnum_) + #if !defined(SRELLDBG_NO_BMH) + , bmdata(NULL) + #endif +#elif !defined(SRELLDBG_NO_BMH) + : bmdata(NULL) +#endif + { + } + + re_object_core(const re_object_core &right) +#if !defined(SRELLDBG_NO_BMH) + : bmdata(NULL) +#endif + { + operator=(right); + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + re_object_core(re_object_core &&right) SRELL_NOEXCEPT +#if !defined(SRELLDBG_NO_BMH) + : bmdata(NULL) +#endif + { + operator=(std::move(right)); + } +#endif + +#if !defined(SRELLDBG_NO_BMH) + ~re_object_core() + { + if (bmdata) + delete bmdata; + } +#endif + + void reset(const regex_constants::syntax_option_type flags) + { + NFA_states.clear(); + character_class.clear(); + +#if !defined(SRELLDBG_NO_1STCHRCLS) + #if !defined(SRELLDBG_NO_BITSET) + firstchar_class_bs.reset(); + #else + firstchar_class.clear(); + #endif +#endif + +#if !defined(SRELL_NO_LIMIT_COUNTER) + limit_counter = lcounter_defnum_; +#endif + + number_of_brackets = 1; + number_of_counters = 0; + number_of_repeats = 0; + soflags = flags; // regex_constants::ECMAScript; + +#if !defined(SRELL_NO_NAMEDCAPTURE) + namedcaptures.clear(); +#endif + +#if !defined(SRELLDBG_NO_BMH) +// bmdata->clear(); + if (bmdata) + delete bmdata; + bmdata = NULL; +#endif + } + + re_object_core &operator=(const re_object_core &that) + { + if (this != &that) + { + this->NFA_states = that.NFA_states; + this->character_class = that.character_class; + +#if !defined(SRELLDBG_NO_1STCHRCLS) + #if !defined(SRELLDBG_NO_BITSET) + this->firstchar_class_bs = that.firstchar_class_bs; + #else + this->firstchar_class = that.firstchar_class; + #endif +#endif + +#if !defined(SRELL_NO_LIMIT_COUNTER) + this->limit_counter = that.limit_counter; +#endif + +// this->utf_traits_inst = that.utf_traits_inst; + + this->number_of_brackets = that.number_of_brackets; + this->number_of_counters = that.number_of_counters; + this->number_of_repeats = that.number_of_repeats; + this->soflags = that.soflags; + +#if !defined(SRELL_NO_NAMEDCAPTURE) + this->namedcaptures = that.namedcaptures; +#endif + +#if !defined(SRELLDBG_NO_BMH) + if (that.bmdata) + { + if (this->bmdata) + *this->bmdata = *that.bmdata; + else + this->bmdata = new re_bmh(*that.bmdata); + } + else if (this->bmdata) + { + delete this->bmdata; + this->bmdata = NULL; + } +#endif + + if (that.NFA_states.size()) + repair_nextstates(&that.NFA_states[0]); + } + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + re_object_core &operator=(re_object_core &&that) SRELL_NOEXCEPT + { + if (this != &that) + { + this->NFA_states = std::move(that.NFA_states); + this->character_class = std::move(that.character_class); + +#if !defined(SRELLDBG_NO_1STCHRCLS) + #if !defined(SRELLDBG_NO_BITSET) + this->firstchar_class_bs = std::move(that.firstchar_class_bs); + #else + this->firstchar_class = std::move(that.firstchar_class); + #endif +#endif + +#if !defined(SRELL_NO_LIMIT_COUNTER) + this->limit_counter = that.limit_counter; +#endif + + this->number_of_brackets = that.number_of_brackets; + this->number_of_counters = that.number_of_counters; + this->number_of_repeats = that.number_of_repeats; + this->soflags = that.soflags; + +#if !defined(SRELL_NO_NAMEDCAPTURE) + this->namedcaptures = std::move(that.namedcaptures); +#endif + +#if !defined(SRELLDBG_NO_BMH) + if (this->bmdata) + delete this->bmdata; + this->bmdata = that.bmdata; + that.bmdata = NULL; +#endif + } + return *this; + } +#endif // defined(SRELL_CPP11_MOVE_ENABLED) + + void swap(re_object_core &right) + { + if (this != &right) + { + this->NFA_states.swap(right.NFA_states); + this->character_class.swap(right.character_class); + +#if !defined(SRELLDBG_NO_1STCHRCLS) + #if !defined(SRELLDBG_NO_BITSET) + this->firstchar_class_bs.swap(right.firstchar_class_bs); + #else + this->firstchar_class.swap(right.firstchar_class); + #endif +#endif + +#if !defined(SRELL_NO_LIMIT_COUNTER) + { + const std::size_t tmp_limit_counter = this->limit_counter; + this->limit_counter = right.limit_counter; + right.limit_counter = tmp_limit_counter; + } +#endif +// this->utf_traits_inst.swap(right.utf_traits_inst); + + { + const uint_l32 tmp_numof_brackets = this->number_of_brackets; + this->number_of_brackets = right.number_of_brackets; + right.number_of_brackets = tmp_numof_brackets; + } + { + const uint_l32 tmp_numof_counters = this->number_of_counters; + this->number_of_counters = right.number_of_counters; + right.number_of_counters = tmp_numof_counters; + } + { + const uint_l32 tmp_numof_repeats = this->number_of_repeats; + this->number_of_repeats = right.number_of_repeats; + right.number_of_repeats = tmp_numof_repeats; + } + { + const regex_constants::syntax_option_type tmp_soflags = this->soflags; + this->soflags = right.soflags; + right.soflags = tmp_soflags; + } + +#if !defined(SRELL_NO_NAMEDCAPTURE) + this->namedcaptures.swap(right.namedcaptures); +#endif + +#if !defined(SRELLDBG_NO_BMH) + { + re_bmh *const tmp_bmdata = this->bmdata; + this->bmdata = right.bmdata; + right.bmdata = tmp_bmdata; + } +#endif + } + } + + void throw_error(const regex_constants::error_type &e) + { +// reset(); + NFA_states.clear(); +#if !defined(SRELLDBG_NO_BMH) + if (bmdata) + delete bmdata; + bmdata = NULL; +#endif + throw regex_error(e); + } + +private: + + void repair_nextstates(const state_type *const oldbase) + { + state_type *const newbase = &this->NFA_states[0]; + + for (typename state_array::size_type i = 0; i < this->NFA_states.size(); ++i) + { + state_type &state = this->NFA_states[i]; + + if (state.next_state1) + state.next_state1 = state.next_state1 - oldbase + newbase; + + if (state.next_state2) + state.next_state2 = state.next_state2 - oldbase + newbase; + } + } +}; +// re_object_core + +template +class re_compiler : public re_object_core +{ +protected: + + template + bool compile(ForwardIterator begin, const ForwardIterator end, const regex_constants::syntax_option_type flags /* = regex_constants::ECMAScript */) + { + simple_array u32; + + while (begin != end) + { + const uchar32 u32c = utf_traits::codepoint_inc(begin, end); + if (u32c > constants::unicode_max_codepoint) + this->throw_error(regex_constants::error_utf8); + u32.push_backncr(u32c); + } + + return compile_core(u32.data(), u32.data() + u32.size(), flags); + } + + bool is_icase() const + { +#if !defined(SRELL_NO_ICASE) + if (this->soflags & regex_constants::icase) + return true; +#endif + return false; + } + bool is_ricase() const + { +#if !defined(SRELL_NO_ICASE) + return /* this->NFA_states.size() && */ this->NFA_states[0].icase == true; +#else + return false; +#endif + } + + bool is_multiline() const + { + if (this->soflags & regex_constants::multiline) + return true; + return false; + } + + bool is_dotall() const + { + return (this->soflags & regex_constants::dotall) ? true : false; + } + + bool is_vmode() const + { +#if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + return (this->soflags & regex_constants::unicodesets) ? true : false; +#else + return false; +#endif + + } + + bool is_optimize() const + { + return (this->soflags & regex_constants::optimize) ? true : false; + } + +private: + + typedef re_object_core base_type; + typedef typename base_type::utf_traits utf_traits; + typedef typename base_type::state_type state_type; + typedef typename base_type::state_array state_array; +#if !defined(SRELL_NO_NAMEDCAPTURE) + typedef typename base_type::gname_string gname_string; +#endif +#if !defined(SRELL_NO_UNICODE_PROPERTY) + typedef typename re_character_class::pstring pstring; +#endif + typedef typename state_array::size_type state_size_type; + + bool compile_core(const uchar32 *begin, const uchar32 *const end, const regex_constants::syntax_option_type flags) + { + re_quantifier piecesize; + re_compiler_state cstate; + state_type atom; + + this->reset(flags); +// this->soflags = flags; + cstate.reset(flags); + + atom.reset(); + atom.type = st_epsilon; + atom.next2 = 1; + this->NFA_states.push_back(atom); + + if (!make_nfa_states(this->NFA_states, piecesize, begin, end, cstate)) + { + return false; + } + + if (begin != end) + this->throw_error(regex_constants::error_paren); // ')'s are too many. + + if (!check_backreferences(cstate)) + this->throw_error(regex_constants::error_backref); + +#if !defined(SRELL_NO_ICASE) + if (this->is_icase()) + this->NFA_states[0].icase = check_if_really_needs_icase_search(); +#endif + +#if !defined(SRELLDBG_NO_BMH) + setup_bmhdata(); +#endif + + atom.type = st_success; + atom.next1 = 0; + atom.next2 = 0; + this->NFA_states.push_back(atom); + + optimise(); + relativejump_to_absolutejump(); + + return true; + } + + bool make_nfa_states(state_array &piece, re_quantifier &piecesize, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { + typename state_array::size_type prevbranch_end = 0; + state_type atom; + state_array branch; + re_quantifier branchsize; + + piecesize.reset(0); + + for (;;) + { + branch.clear(); + + if (!make_branch(branch, branchsize, curpos, end, cstate)) + return false; + + // For piecesize.atleast, 0 as the initial value and 0 as an + // actual value must be distinguished. + if (piecesize.atmost == 0 || piecesize.atleast > branchsize.atleast) + piecesize.atleast = branchsize.atleast; + + if (piecesize.atmost < branchsize.atmost) + piecesize.atmost = branchsize.atmost; + + if (curpos != end && *curpos == meta_char::mc_bar) + { + atom.reset(); + atom.character = meta_char::mc_bar; + atom.type = st_epsilon; + atom.next2 = static_cast(branch.size()) + 2; + branch.insert(0, atom); + } + + if (prevbranch_end) + piece[prevbranch_end].next1 = static_cast(branch.size()) + 1; + + piece += branch; + + // end or ')' + if (curpos == end || *curpos == meta_char::mc_rbracl) + break; + + // *curpos == '|' + + prevbranch_end = piece.size(); + atom.reset(); + atom.type = st_epsilon; + piece.push_back(atom); + + ++curpos; + } + return true; + } + + bool make_branch(state_array &branch, re_quantifier &branchsize, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { + state_array piece; + state_array piece_with_quantifier; + re_quantifier quantifier; + + branchsize.reset(0); + + for (;;) + { + re_quantifier piecesize; + + if (curpos == end) + return true; + + piece.clear(); + piece_with_quantifier.clear(); + + switch (*curpos) + { +// case char_ctrl::cc_nul: // '\0': + case meta_char::mc_bar: // '|': + case meta_char::mc_rbracl: // ')': + return true; + + default: + if (!get_atom(piece, piecesize, curpos, end, cstate)) + return false; + } + + if (piece.size()) + { + const state_type &firstatom = piece[0]; + + quantifier.reset(); // quantifier.atleast = quantifier.atmost = 1; + + if (firstatom.has_quantifier()) + { + if (curpos != end && !get_quantifier(quantifier, curpos, end)) + return false; + } + + if (piece.size() == 2 && firstatom.is_noncapturinggroup() && piece[1].is_noncapturinggroup()) + { + // (?:) alone or followed by a quantifier. +// piece_with_quantifier += piece; + ; // Do nothing. + } + else + combine_piece_with_quantifier(piece_with_quantifier, piece, quantifier, piecesize); + +#if 01 + piecesize.multiply(quantifier); + branchsize.add(piecesize); +#else + branchsize.atleast += piecesize.atleast * quantifier.atleast; + if (!branchsize.is_infinity()) + { + if (piecesize.is_infinity() || quantifier.is_infinity()) + branchsize.set_infinity(); + else + branchsize.atmost += piecesize.atmost * quantifier.atmost; + } +#endif + +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + + if (!cstate.back) + branch += piece_with_quantifier; + else + branch.insert(0, piece_with_quantifier); +#else + branch += piece_with_quantifier; +#endif + } + } + } + + bool get_atom(state_array &piece, re_quantifier &piecesize, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { + state_type atom; + + atom.reset(); + atom.character = *curpos++; + + switch (atom.character) + { + case meta_char::mc_rbraop: // '(': + return get_piece_in_roundbrackets(piece, piecesize, curpos, end, cstate); + + case meta_char::mc_sbraop: // '[': +#if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + if (this->is_vmode()) // vmode. + return parse_charclass_v(piece, piecesize, curpos, end, cstate); +#endif + if (!register_character_class(atom, curpos, end, cstate)) + return false; + + break; + + case meta_char::mc_escape: // '\\': + if (!translate_atom_escape(atom, piece, piecesize, curpos, end, cstate)) + return false; + + if (piece.size()) + return true; + break; + + case meta_char::mc_period: // '.': + atom.type = st_character_class; +#if !defined(SRELL_NO_SINGLELINE) + if (this->is_dotall()) + { + atom.number = static_cast(re_character_class::dotall); + } + else +#endif + { +// atom.number = static_cast(re_character_class::newline); + range_pairs nlclass = this->character_class[static_cast(re_character_class::newline)]; + + nlclass.negation(); + atom.number = this->character_class.register_newclass(nlclass); + } + break; + + case meta_char::mc_caret: // '^': + atom.type = st_bol; + atom.quantifier.reset(0); +// if (current_flags.m) + if (is_multiline()) + atom.multiline = true; + break; + + case meta_char::mc_dollar: // '$': + atom.type = st_eol; + atom.quantifier.reset(0); +// if (current_flags.m) + if (is_multiline()) + atom.multiline = true; + break; + + case meta_char::mc_astrsk: // '*': + case meta_char::mc_plus: // '+': + case meta_char::mc_query: // '?': + case meta_char::mc_cbraop: // '{' + this->throw_error(regex_constants::error_badrepeat); + + default:; + } + + if (atom.type == st_character) + { + if (this->is_icase()) + atom.character = unicode_case_folding::do_casefolding(atom.character); + } + + piece.push_back(atom); + piecesize = atom.quantifier; + + return true; + } + + // '('. + + bool get_piece_in_roundbrackets(state_array &piece, re_quantifier &piecesize, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { + const re_flags originalflags(cstate); + state_type atom; + + if (curpos == end) + this->throw_error(regex_constants::error_paren); + + atom.reset(); + atom.type = st_roundbracket_open; + + if (*curpos == meta_char::mc_query) // '?' + { + if (!extended_roundbrackets(piece, atom, ++curpos, end, cstate)) + return false; + } + + if (atom.type == st_roundbracket_open) + { + push_bracket_open(piece, atom); + } + +// if (curpos == end) +// this->throw_error(regex_constants::error_paren); + + if (!make_nfa_states(piece, piecesize, curpos, end, cstate)) + return false; + + // end or ')'? + if (curpos == end) + this->throw_error(regex_constants::error_paren); + + ++curpos; + + cstate.restore_from(originalflags); + + switch (atom.type) + { + case st_epsilon: + +// if (piece.size() <= 2) // ':' or ':' + one. + if (piece.size() == 2) // ':' + something. + { + piece.erase(0); + return true; + } + + piece[0].quantifier.atmost = this->number_of_brackets - 1; + break; + +// case st_lookaround_pop: + case st_lookaround_open: + { + state_type &firstatom = piece[0]; + +#if defined(SRELL_FIXEDWIDTHLOOKBEHIND) +// if (firstatom.reverse) + if (firstatom.quantifier.atleast) // > 0 means lookbehind. + { + if (!piecesize.is_same() || piecesize.is_infinity()) + this->throw_error(regex_constants::error_lookbehind); + + firstatom.quantifier = piecesize; + } +#endif + +#if defined(SRELL_ENABLE_GT) + if (firstatom.character != meta_char::mc_gt) +#endif + piecesize.reset(0); + + firstatom.next1 = static_cast(piece.size()) + 1; + + atom.type = st_lookaround_close; + atom.next1 = 0; + atom.next2 = 0; + } + break; + + default: + set_bracket_close(piece, atom, piecesize, cstate); + } + + piece.push_back(atom); + return true; + } + + bool extended_roundbrackets(state_array &piece, state_type &atom, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + bool lookbehind = false; +#endif + + if (curpos == end) + this->throw_error(regex_constants::error_paren); + + atom.character = *curpos; + + if (atom.character == meta_char::mc_lt) // '<' + { +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + lookbehind = true; +#endif + if (++curpos == end) + this->throw_error(regex_constants::error_paren); + + atom.character = *curpos; + + if (atom.character != meta_char::mc_eq && atom.character != meta_char::mc_exclam) + { +#if !defined(SRELL_NO_NAMEDCAPTURE) + return parse_groupname(curpos, end, cstate); +#else + this->throw_error(regex_constants::error_paren); +#endif // !defined(SRELL_NO_NAMEDCAPTURE) + } + } + else + atom.quantifier.atleast = 0; + // Sets atleast to 0 for other assertions than lookbehinds. The automaton + // checks atleast to know whether lookbehinds or other assertions. + + switch (atom.character) + { + case meta_char::mc_colon: + atom.type = st_epsilon; + atom.quantifier.atleast = this->number_of_brackets; + break; + + case meta_char::mc_exclam: // '!': + atom.is_not = true; + //@fallthrough@ + + case meta_char::mc_eq: // '=': +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + cstate.back = lookbehind; +#else +// atom.reverse = lookbehind; +#endif + +#if defined(SRELL_ENABLE_GT) + case meta_char::mc_gt: +#endif + atom.type = st_lookaround_open; + atom.next2 = 1; + break; + + default: + this->throw_error(regex_constants::error_paren); + } + + ++curpos; + piece.push_back(atom); + return true; + } + + void push_bracket_open(state_array &piece, state_type &atom) + { + atom.number = this->number_of_brackets; + atom.next1 = 2; + atom.next2 = 1; + piece.push_back(atom); + ++this->number_of_brackets; + + atom.type = st_roundbracket_pop; + atom.next1 = 0; + atom.next2 = 0; + piece.push_back(atom); + } + + void set_bracket_close(state_array &piece, state_type &atom, const re_quantifier &piecesize, re_compiler_state &cstate) + { +// uint_l32 max_bracketno = atom.number; + + atom.type = st_roundbracket_close; + atom.next1 = 1; + atom.next2 = 1; +#if 0 + for (typename state_array::size_type i = 0; i < piece.size(); ++i) + { + const state_type &state = piece[i]; + + if (state.type == st_roundbracket_open && max_bracketno < state.number) + max_bracketno = state.number; + } +#endif + + re_quantifier &rb_open = piece[0].quantifier; + re_quantifier &rb_pop = piece[1].quantifier; + + rb_open.atleast = rb_pop.atleast = atom.number + 1; + rb_open.atmost = rb_pop.atmost = this->number_of_brackets - 1; // max_bracketno; + + if (cstate.atleast_widths_of_brackets.size() < atom.number) + cstate.atleast_widths_of_brackets.resize(atom.number, 0); + + cstate.atleast_widths_of_brackets[atom.number - 1] = piecesize.atleast; + } + + void combine_piece_with_quantifier(state_array &piece_with_quantifier, state_array &piece, const re_quantifier &quantifier, const re_quantifier &piecesize) + { + state_type &firstatom = piece[0]; +// const bool firstpiece_is_roundbracket_open = (firstatom.type == st_roundbracket_open); + const bool piece_has_0widthchecker = firstatom.has_0widthchecker(); + const bool piece_is_noncapturinggroup_contaning_capturinggroup = firstatom.is_noncapturinggroup() && firstatom.quantifier.is_valid(); + state_type atom; + + if (quantifier.atmost == 0) + return; + + atom.reset(); + atom.quantifier = quantifier; + if (firstatom.is_character_or_class()) + atom.character = meta_char::mc_astrsk; // For nextpos_optimisation1_3(). + + if (quantifier.atmost == 1) + { + if (quantifier.atleast == 0) + { + atom.type = st_epsilon; + atom.next2 = static_cast(piece.size()) + 1; + + if (!quantifier.is_greedy) + { + atom.next1 = atom.next2; + atom.next2 = 1; + } + + if (atom.character == meta_char::mc_astrsk) + firstatom.quantifier = quantifier; + + piece_with_quantifier.push_back(atom); + // (push) + } + + if (piece.size() >= 2 && firstatom.type == st_roundbracket_open && piece[1].type == st_roundbracket_pop) + { + firstatom.quantifier.atmost = 0u; + piece[1].quantifier.atmost = 0u; + } + + piece_with_quantifier += piece; + return; + } + + // atmost >= 2 + +#if !defined(SRELLDBG_NO_SIMPLEEQUIV) + // The counter requires at least 6 states: save, restore, check, inc, dec, atom(s). + // A character or charclass quantified by one of these has a simple equivalent representation: + // a{0,2} 1.epsilon(2|5), 2.CHorCL(3), 3.epsilon(4|5), 4.CHorCL(5), [5]. + // a{0,3} 1.epsilon(2|7), 2.CHorCL(3), 3.epsilon(4|7), 4.CHorCL(5), 5.epsilon(6|7), 6.CHorCL(7), [7]. + // a{1,2} 1.CHorCL(2), 2.epsilon(3|4), 3.CHorCL(4), [4]. + // a{1,3} 1.CHorCL(2), 2.epsilon(3|6), 3.CHorCL(4), 4.epsilon(5|6), 5.CHorCL(6), [6]. + // a{2,3} 1.CHorCL(2), 2.CHorCL(3), 3.epsilon(4|5), 4.CHorCL(5), [5]. + // a{2,4} 1.CHorCL(2), 2.CHorCL(3), 3.epsilon(4|7), 4.CHorCL(5), 5.epsilon(6|7), 6.CHorCL(7), [7]. + if (piece.size() == 1 && firstatom.is_character_or_class() && quantifier.has_simple_equivalence()) + { + const typename state_array::size_type branchsize = piece.size() + 1; + + for (uint_l32 i = 0; i < quantifier.atleast; ++i) + piece_with_quantifier += piece; + + if (atom.character == meta_char::mc_astrsk) + firstatom.quantifier.set(0, 1, quantifier.is_greedy); + + atom.type = st_epsilon; + atom.next2 = (quantifier.atmost - quantifier.atleast) * branchsize; + if (!quantifier.is_greedy) + { + atom.next1 = atom.next2; + atom.next2 = 1; + } + for (uint_l32 i = quantifier.atleast; i < quantifier.atmost; ++i) + { + piece_with_quantifier.push_back(atom); + piece_with_quantifier += piece; + quantifier.is_greedy ? (atom.next2 -= branchsize) : (atom.next1 -= branchsize); + } + return; + } +#endif // !defined(SRELLDBG_NO_SIMPLEEQUIV) + + atom.type = st_epsilon; + if (quantifier.is_asterisk()) // {0,} + { + // greedy: 1.epsilon(2|4), 2.piece, 3.LAorC0WR(1|0), 4.OutOfLoop. + // !greedy: 1.epsilon(4|2), 2.piece, 3.LAorC0WR(1|0), 4.OutOfLoop. + // LAorC0WR: LastAtomOfPiece or Check0WidthRepeat. + // atom.type points to 1. + } + else if (quantifier.is_plus()) // {1,} + { +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + + if (piece.size() == 1 && firstatom.is_character_or_class()) + { + piece_with_quantifier += piece; + --atom.quantifier.atleast; // /.+/ -> /..*/. + } + else +#endif + { + atom.next1 = 2; + atom.next2 = 0; + piece_with_quantifier.push_back(atom); + // greedy: 1.epsilon(3), 2.epsilon(3|5), 3.piece, 4.LAorC0WR(2|0), 5.OutOfLoop. + // !greedy: 1.epsilon(3), 2.epsilon(5|3), 3.piece, 4.LAorC0WR(2|0), 5.OutOfLoop. + // atom.type points to 2. + } + } + else + { + atom.number = this->number_of_counters; + ++this->number_of_counters; + + atom.type = st_save_and_reset_counter; + atom.next1 = 2; + atom.next2 = 1; + piece_with_quantifier.push_back(atom); + + atom.type = st_restore_counter; + atom.next1 = 0; + atom.next2 = 0; + piece_with_quantifier.push_back(atom); + // 1.save_and_reset_counter(3|2), 2.restore_counter(0|0), + + atom.next1 = 0; + atom.next2 = 0; + atom.type = st_decrement_counter; + piece.insert(0, atom); + + atom.next1 = 2; +// atom.next2 = piece[1].is_character_or_class() ? 0 : 1; +// atom.next2 = 0; + for (state_size_type i = 1; i < piece.size(); ++i) + { + const state_type &state = piece[i]; + + if (state.is_character_or_class() || (state.type == st_epsilon && state.next2 == 0)) + ; + else + { + atom.next2 = 1; + break; + } + } + atom.type = st_epsilon; // st_increment_counter; + piece.insert(0, atom); + piece[0].number = 0; + + atom.type = st_check_counter; + // greedy: 3.check_counter(4|6), 4.piece, 5.LAorC0WR(3|0), 6.OutOfLoop. + // !greedy: 3.check_counter(6|4), 4.piece, 5.LAorC0WR(3|0), 6.OutOfLoop. + // 4.piece = { 4a.increment_counter(4c|4b), 4b.decrement_counter(0|0), 4c.OriginalPiece }. + } + + // atom.type is epsilon or check_counter. + // Its "next"s point to piece and OutOfLoop. + + if (!piece_is_noncapturinggroup_contaning_capturinggroup && (piecesize.atleast || piece_has_0widthchecker)) + { + const typename state_array::size_type piece_size = piece.size(); + state_type &lastatom = piece[piece_size - 1]; + + lastatom.next1 = 0 - static_cast(piece_size); + // Points to the one immediately before piece, which will be pushed last in this block. + + // atom.type has already been set. epsilon or check_counter. + atom.next1 = 1; + atom.next2 = static_cast(piece_size) + 1; + if (!quantifier.is_greedy) + { + atom.next1 = atom.next2; + atom.next2 = 1; + } + piece_with_quantifier.push_back(atom); + } + else + { + // atom.type has already been set. epsilon or check_counter. + atom.next1 = 1; + atom.next2 = static_cast(piece.size()) + 4; // To OutOfLoop. + // The reason for +3 than above is that push, pop, and check_0_width are added below. + if (!quantifier.is_greedy) + { + atom.next1 = atom.next2; + atom.next2 = 1; + } + piece_with_quantifier.push_back(atom); // *1 + + atom.number = this->number_of_repeats; + ++this->number_of_repeats; + + const state_size_type org1stpos = (atom.type == st_check_counter) ? 2 : 0; + + if (piece_is_noncapturinggroup_contaning_capturinggroup) + atom.quantifier = piece[org1stpos].quantifier; + else + atom.quantifier.set(1, 0); + + atom.type = st_repeat_in_pop; + atom.next1 = 0; + atom.next2 = 0; + piece.insert(org1stpos, atom); + + atom.type = st_repeat_in_push; + atom.next1 = 2; + atom.next2 = 1; + piece.insert(org1stpos, atom); + + atom.type = st_check_0_width_repeat; + atom.next1 = 0 - static_cast(piece.size()) - 1; // Points to *1. + atom.next2 = 1; + piece.push_back(atom); + // greedy: 1.epsilon(2|6), + // !greedy: 1.epsilon(6|2), + // 2.repeat_in_push(4|3), 3.repeat_in_pop(0|0), 4.piece, + // 5.check_0_width_repeat(1|6), 6.OutOfLoop. + // or + // greedy: 1.check_counter(2|8), + // !greedy: 1.check_counter(8|2), + // 2.increment_counter(4|3), 3.decrement_counter(0|0) + // 4.repeat_in_push(6|5), 5.repeat_in_pop(0|0), 6.piece, + // 7.check_0_width_repeat(1|8), 8.OutOfLoop. + } + piece_with_quantifier += piece; + } + +#if !defined(SRELL_NO_NAMEDCAPTURE) + bool parse_groupname(const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { + const gname_string groupname = get_groupname(curpos, end, cstate); + + if (!this->namedcaptures.push_back(groupname, this->number_of_brackets)) + this->throw_error(regex_constants::error_backref); + + return true; + } +#endif // !defined(SRELL_NO_NAMEDCAPTURE) + + // '['. + + bool register_character_class(state_type &atom, const uchar32 *&curpos, const uchar32 *const end, const re_compiler_state & /* cstate */) + { + range_pairs ranges; + range_pair code_range; + state_type classatom; + range_pairs curranges; + + if (curpos == end) + this->throw_error(regex_constants::error_brack); + + atom.type = st_character_class; + + if (*curpos == meta_char::mc_caret) // '^' + { + atom.is_not = true; + ++curpos; + } + + for (;;) + { + if (curpos == end) + this->throw_error(regex_constants::error_brack); + + if (*curpos == meta_char::mc_sbracl) // ']' + break; + + classatom.reset(); + + if (!get_character_in_class(curranges, classatom, curpos, end)) + return false; + + if (classatom.type == st_character_class) + { + ranges.merge(curranges); + continue; + } + + code_range.first = code_range.second = classatom.character; + + if (curpos == end) + this->throw_error(regex_constants::error_brack); + + if (*curpos == meta_char::mc_minus) // '-' + { + ++curpos; + + if (curpos == end) + this->throw_error(regex_constants::error_brack); + + if (*curpos == meta_char::mc_sbracl) + { + PUSH_SEPARATELY: + ranges.join(code_range); + code_range.first = code_range.second = meta_char::mc_minus; + } + else + { + if (!get_character_in_class(curranges, classatom, curpos, end)) + return false; + + if (classatom.type == st_character_class) + { + ranges.merge(curranges); + goto PUSH_SEPARATELY; + } + + code_range.second = classatom.character; + + if (!code_range.is_range_valid()) + this->throw_error(regex_constants::error_range); + } + } + ranges.join(code_range); + } + + // *curpos == ']' + ++curpos; + if (this->is_icase()) + ranges.make_caseunfoldedcharset(); + + if (atom.is_not) + { + ranges.negation(); + atom.is_not = false; + } + +// atom.character = this->is_icase() ? ranges.template consists_of_one_character() : ranges.template consists_of_one_character(); + atom.character = ranges.consists_of_one_character(this->is_icase()); + + if (atom.character != constants::invalid_u32value) + { + atom.type = st_character; + return true; + } + + atom.number = this->character_class.register_newclass(ranges); + + return true; + } + + bool get_character_in_class(range_pairs &rp, state_type &atom, const uchar32 *&curpos, const uchar32 *const end /* , const re_compiler_state &cstate */) + { + atom.character = *curpos++; + + if (atom.character != meta_char::mc_escape) // '\\' + return true; + + rp.clear(); + return translate_escseq(&rp, atom, curpos, end, true); + } + + void add_predefclass_to_charclass(range_pairs &cls, const state_type &classatom) + { + range_pairs predefclass = this->character_class[classatom.number]; + + if (classatom.is_not) + predefclass.negation(); + + cls.merge(predefclass); + } + +#if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + + bool parse_charclass_v(state_array &piece, re_quantifier &piecesize, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { + posdata_holder pos; + + parse_unicharset(pos, curpos, end, cstate); + + if (!pos.may_contain_strings()) + { + state_type atom; + + atom.reset(); + atom.character = pos.ranges.consists_of_one_character(this->is_icase()); + + if (atom.character == constants::invalid_u32value) + { + atom.type = st_character_class; + atom.number = this->character_class.register_newclass(pos.ranges); + } + + piece.push_back(atom); + piecesize = atom.quantifier; + } + else + { + transform_seqdata(piece, pos); + + piecesize.atleast = static_cast(pos.length.first); + piecesize.atmost = static_cast(pos.length.second); + } + return true; + } + + void parse_unicharset(posdata_holder &basepos, const uchar32 *&curpos, const uchar32 *const end, const re_compiler_state &cstate) + { + enum operation_type + { + op_init, op_firstcc, op_union, op_intersection, op_subtraction + }; + operation_type otype = op_init; + posdata_holder newpos; + range_pair code_range; + state_type ccatom; + bool invert; + + if (curpos == end) + goto ERROR_NOT_CLOSED; + + if (*curpos == meta_char::mc_caret) // '^' + { + invert = true; + ++curpos; + } + else + invert = false; + + // ClassSetCharacter :: + // \ CharacterEscape[+UnicodeMode] + // \ ClassSetReservedPunctuator + // \ b + + for (;;) + { + if (curpos == end) + goto ERROR_NOT_CLOSED; + + if (*curpos == meta_char::mc_sbracl) // ']' + break; + + const uchar32 next2chars = check_doublepunctuators(curpos, end); + + switch (otype) + { + case op_intersection: + if (next2chars != char_other::co_amp) + goto ERROR_DOUBLE_PUNCT; + curpos += 2; + break; + + case op_subtraction: + if (next2chars != meta_char::mc_minus) + goto ERROR_DOUBLE_PUNCT; + curpos += 2; + break; + + case op_firstcc: + if (next2chars == char_other::co_amp) + otype = op_intersection; + else if (next2chars == meta_char::mc_minus) + otype = op_subtraction; + else if (next2chars == constants::invalid_u32value) + break; + else + goto ERROR_DOUBLE_PUNCT; + + curpos += 2; + break; + +// case op_union: +// case op_init: + default: + if (next2chars != constants::invalid_u32value) + goto ERROR_DOUBLE_PUNCT; + } + + AFTER_OPERATOR: + + if (curpos == end) + goto ERROR_NOT_CLOSED; + + ccatom.reset(); + + if (*curpos == meta_char::mc_sbraop) // '[' + { + ++curpos; + parse_unicharset(newpos, curpos, end, cstate); + } + else + get_character_in_class_vmode(newpos, ccatom, curpos, end, cstate, false); + + if (otype == op_init) + otype = op_firstcc; + else if (otype == op_firstcc) + otype = op_union; + + if (curpos == end) + goto ERROR_NOT_CLOSED; + + if (ccatom.type == st_character_class) + { + } + else if (ccatom.type == st_character) + { + if (!newpos.has_data()) + { + code_range.set(ccatom.character); + + if (otype <= op_union) + { + if (*curpos == meta_char::mc_minus) // '-' + { + ++curpos; + + if (curpos == end) + goto ERROR_BROKEN_RANGE; + + if (otype < op_union && *curpos == meta_char::mc_minus) // '-' + { + otype = op_subtraction; + ++curpos; + basepos.ranges.join(code_range); + goto AFTER_OPERATOR; + } + + get_character_in_class_vmode(newpos, ccatom, curpos, end, cstate, true); + + otype = op_union; + code_range.second = ccatom.character; + if (!code_range.is_range_valid()) + goto ERROR_BROKEN_RANGE; + } + } + + newpos.ranges.join(code_range); + if (this->is_icase()) + newpos.ranges.make_caseunfoldedcharset(); + } + } + + switch (otype) + { + case op_union: + basepos.do_union(newpos); + break; + + case op_intersection: + basepos.do_and(newpos); + break; + + case op_subtraction: + basepos.do_subtract(newpos); + break; + + default: +// case op_firstcc: + basepos.swap(newpos); + } + } + + // *curpos == ']' + ++curpos; + + if (this->is_icase()) + basepos.ranges.make_caseunfoldedcharset(); + + if (invert) + { + if (basepos.may_contain_strings()) + goto ERROR_NOT_INVERTIBLE; + + basepos.ranges.negation(); + } + + return; + + ERROR_NOT_CLOSED: + this->throw_error(regex_constants::error_brack); + + ERROR_BROKEN_RANGE: + this->throw_error(regex_constants::error_range); + + ERROR_NOT_INVERTIBLE: + this->throw_error(regex_constants::error_complement); + + ERROR_DOUBLE_PUNCT: + this->throw_error(regex_constants::error_operator); + } + + uchar32 check_doublepunctuators(const uchar32 *curpos, const uchar32 *const end) const + { + const uchar32 firstchar = *curpos++; + + if (curpos == end || *curpos != firstchar) + return constants::invalid_u32value; + + switch (firstchar) + { + // ClassSetReservedDoublePunctuator :: one of + // && !! ## $$ %% ** ++ ,, .. :: ;; << == >> ?? @@ ^^ `` ~~ + case char_other::co_amp: // '&' + case meta_char::mc_exclam: // '!' + case meta_char::mc_sharp: // '#' + case meta_char::mc_dollar: // '$' + case char_other::co_perc: // '%' + case meta_char::mc_astrsk: // '*' + case meta_char::mc_plus: // '+' + case meta_char::mc_comma: // ',' + case meta_char::mc_period: // '.' + case meta_char::mc_colon: // ':' + case char_other::co_smcln: // ';' + case meta_char::mc_lt: // '<' + case meta_char::mc_eq: // '=' + case meta_char::mc_gt: // '>' + case meta_char::mc_query: // '?' + case char_other::co_atmrk: // '@' + case meta_char::mc_caret: // '^' + case char_other::co_grav: // '`' + case char_other::co_tilde: // '~' + case meta_char::mc_minus: // '-' + return firstchar; + + default: + return constants::invalid_u32value; + } + } + + bool get_character_in_class_vmode( + posdata_holder &pos, + state_type &ccatom, + const uchar32 *&curpos, + const uchar32 *const end, + const re_compiler_state &cstate, + const bool no_ccesc + ) + { + pos.clear(); + + ccatom.character = *curpos++; + + switch (ccatom.character) + { + // ClassSetSyntaxCharacter :: one of + // ( ) [ ] { } / - \ | + case meta_char::mc_rbraop: // '(' + case meta_char::mc_rbracl: // ')' + case meta_char::mc_sbraop: // '[' + case meta_char::mc_sbracl: // ']' + case meta_char::mc_cbraop: // '{' + case meta_char::mc_cbracl: // '}' + case char_other::co_slash: // '/' + case meta_char::mc_minus: // '-' + case meta_char::mc_bar: // '|' + this->throw_error(regex_constants::error_noescape); + //@fallthrough@ + + case meta_char::mc_escape: // '\\' + break; + + default: + return false; + } + + if (curpos == end) + this->throw_error(regex_constants::error_escape); + + ccatom.character = *curpos++; + + if (!no_ccesc) + { + if (((ccatom.character | constants::asc_icase) == char_alnum::ch_p)) + { + return parse_escape_p_vmode(pos, ccatom, curpos, end, cstate); + } + else if (ccatom.character == char_alnum::ch_q) + { + return parse_escape_q_vmode(pos, curpos, end, cstate); + } + } + + switch (ccatom.character) + { + // ClassSetReservedPunctuator :: one of + // & - ! # % , : ; < = > @ ` ~ + case char_other::co_amp: // '&' + case meta_char::mc_exclam: // '!' + case meta_char::mc_sharp: // '#' + case char_other::co_perc: // '%' + case meta_char::mc_comma: // ',' + case meta_char::mc_colon: // ':' + case char_other::co_smcln: // ';' + case meta_char::mc_lt: // '<' + case meta_char::mc_eq: // '=' + case meta_char::mc_gt: // '>' + case char_other::co_atmrk: // '@' + case char_other::co_grav: // '`' + case char_other::co_tilde: // '~' + return false; + + default:; + } + + translate_escseq_nocheck(&pos.ranges, ccatom, curpos, end, true, no_ccesc); + return false; + } + + bool parse_escape_q_vmode(posdata_holder &pos, const uchar32 *&curpos, const uchar32 *const end, const re_compiler_state &cstate) + { + if (curpos == end || *curpos != meta_char::mc_cbraop) // '{' + this->throw_error(regex_constants::error_escape); + + simple_array seqs; + simple_array curseq; + posdata_holder dummypos; + state_type qatom; + + ++curpos; + + for (;;) + { + if (curpos == end) + this->throw_error(regex_constants::error_escape); + + if (*curpos == meta_char::mc_bar || *curpos == meta_char::mc_cbracl) // '|' or '}'. + { + const uint_l32 seqlen = static_cast(curseq.size()); + + if (seqlen <= 1) + { + seqs.push_backncr(2); + seqs.push_backncr(seqlen != 0 ? curseq[0] : constants::ccstr_empty); + } + else // >= 2 + { + seqs.push_backncr(seqlen + 1); + seqs.append(curseq); + } + + if (*curpos == meta_char::mc_cbracl) // '}' + break; + + curseq.clear(); + ++curpos; + } + else + { + qatom.reset(); + get_character_in_class_vmode(dummypos, qatom, curpos, end, cstate, true); + + curseq.push_backncr(qatom.character); + } + } + + ++curpos; + pos.split_seqs_and_ranges(seqs, this->is_icase(), cstate.back); + + return true; + } + +#endif // !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + + bool translate_escseq(range_pairs *const rp, state_type &atom, const uchar32 *&curpos, const uchar32 *const end, const bool insidecharclass) + { + if (curpos == end) + this->throw_error(regex_constants::error_escape); + + atom.character = *curpos++; + + return translate_escseq_nocheck(rp, atom, curpos, end, insidecharclass, false); + } + + bool translate_character_class_escape(range_pairs *const rp, state_type &cceatom +#if !defined(SRELL_NO_UNICODE_PROPERTY) + , const uchar32 *&curpos + , const uchar32 *const end + , const bool insidecharclass +#else + , const uchar32 *& + , const uchar32 *const + , const bool +#endif + ) + { + // Predefined classes. + switch (cceatom.character) + { + case char_alnum::ch_D: // 'D': + cceatom.is_not = true; + //@fallthrough@ + + case char_alnum::ch_d: // 'd': + cceatom.number = static_cast(re_character_class::digit); // \d, \D. + break; + + case char_alnum::ch_S: // 'S': + cceatom.is_not = true; + //@fallthrough@ + + case char_alnum::ch_s: // 's': + cceatom.number = static_cast(re_character_class::space); // \s, \S. + break; + + case char_alnum::ch_W: // 'W': + cceatom.is_not = true; + //@fallthrough@ + + case char_alnum::ch_w: // 'w': + if (this->is_icase()) + { + this->character_class.setup_icase_word(); + cceatom.number = static_cast(re_character_class::icase_word); + } + else + cceatom.number = static_cast(re_character_class::word); // \w, \W. + break; + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + // Prepared for Unicode properties and script names. + case char_alnum::ch_P: // \P{...} + cceatom.is_not = true; + //@fallthrough@ + + case char_alnum::ch_p: // \p{...} + { + range_pairs lranges; + range_pairs *const pranges = (rp != NULL) ? rp : &lranges; + + get_property_ranges(*pranges, curpos, end); + + if (cceatom.is_not) + { + pranges->negation(); + cceatom.is_not = false; + } + + if (!insidecharclass && this->is_icase()) + pranges->make_caseunfoldedcharset(); + + if (rp == NULL) + cceatom.number = this->character_class.register_newclass(*pranges); + } + cceatom.type = st_character_class; + return true; +#endif // !defined(SRELL_NO_UNICODE_PROPERTY) + + default: + return false; + } + + if (rp != NULL) + add_predefclass_to_charclass(*rp, cceatom); + else + { + if (cceatom.is_not) + { + range_pairs lranges; + + add_predefclass_to_charclass(lranges, cceatom); + cceatom.number = this->character_class.register_newclass(lranges); + } + } + + cceatom.is_not = false; + cceatom.type = st_character_class; + return true; + } + + bool translate_escseq_nocheck(range_pairs *const rp, state_type &atom, const uchar32 *&curpos, const uchar32 *const end, const bool insidecharclass, const bool no_ccesc) + { + if (!no_ccesc && translate_character_class_escape(rp, atom, curpos, end, insidecharclass)) + return true; + + switch (atom.character) + { + case char_alnum::ch_b: + atom.character = char_ctrl::cc_bs; // '\b' 0x08:BS + break; + + case char_alnum::ch_t: + atom.character = char_ctrl::cc_htab; // '\t' 0x09:HT + break; + + case char_alnum::ch_n: + atom.character = char_ctrl::cc_nl; // '\n' 0x0a:LF + break; + + case char_alnum::ch_v: + atom.character = char_ctrl::cc_vtab; // '\v' 0x0b:VT + break; + + case char_alnum::ch_f: + atom.character = char_ctrl::cc_ff; // '\f' 0x0c:FF + break; + + case char_alnum::ch_r: + atom.character = char_ctrl::cc_cr; // '\r' 0x0d:CR + break; + + case char_alnum::ch_c: // \cX + if (curpos != end) + { +// atom.character = static_cast(utf_traits().codepoint_inc(curpos, end) & 0x1f); // *curpos++ + atom.character = static_cast(*curpos | constants::asc_icase); + + if (atom.character >= char_alnum::ch_a && atom.character <= char_alnum::ch_z) + atom.character = static_cast(*curpos++ & 0x1f); + else + { + this->throw_error(regex_constants::error_escape); // Strict. +// atom.character = char_alnum::ch_c; // Loose. + } + } + break; + + case char_alnum::ch_0: + atom.character = char_ctrl::cc_nul; // '\0' 0x00:NUL + break; + + case char_alnum::ch_x: // \xhh + atom.character = translate_numbers(curpos, end, 16, 2, 2, 0xff); + break; + + case char_alnum::ch_u: // \uhhhh, \u{h~hhhhhh} + atom.character = parse_escape_u(curpos, end); + break; + + // SyntaxCharacter, '/', and '-'. + case meta_char::mc_caret: // '^' + case meta_char::mc_dollar: // '$' + case meta_char::mc_escape: // '\\' + case meta_char::mc_period: // '.' + case meta_char::mc_astrsk: // '*' + case meta_char::mc_plus: // '+' + case meta_char::mc_query: // '?' + case meta_char::mc_rbraop: // '(' + case meta_char::mc_rbracl: // ')' + case meta_char::mc_sbraop: // '[' + case meta_char::mc_sbracl: // ']' + case meta_char::mc_cbraop: // '{' + case meta_char::mc_cbracl: // '}' + case meta_char::mc_bar: // '|' + case char_other::co_slash: // '/' + break; + + case meta_char::mc_minus: // '-' allowed only in charclass. + if (insidecharclass) + break; + //@fallthrough@ + + default: + atom.character = constants::invalid_u32value; + } + + if (atom.character == constants::invalid_u32value) + this->throw_error(regex_constants::error_escape); + + return true; + } + + uchar32 parse_escape_u(const uchar32 *&curpos, const uchar32 *const end) const + { + uchar32 ucp; + + if (curpos == end) + return constants::invalid_u32value; + + if (*curpos == meta_char::mc_cbraop) + { +// ucp = translate_numbers(++curpos, end, 16, 1, 6, constants::unicode_max_codepoint, true); + ucp = translate_numbers(++curpos, end, 16, 1, 0, constants::unicode_max_codepoint); + + if (curpos == end || *curpos != meta_char::mc_cbracl) + return constants::invalid_u32value; + + ++curpos; + } + else + { + ucp = translate_numbers(curpos, end, 16, 4, 4, 0xffff); + + if (ucp >= 0xd800 && ucp <= 0xdbff) + { + const uchar32 * prefetch = curpos; + + if (prefetch != end && *prefetch == meta_char::mc_escape && ++prefetch != end && *prefetch == char_alnum::ch_u) + { + const uchar32 nextucp = translate_numbers(++prefetch, end, 16, 4, 4, 0xffff); + + if (nextucp >= 0xdc00 && nextucp <= 0xdfff) + { + curpos = prefetch; + ucp = (((ucp << 10) & 0xffc00) | (nextucp & 0x3ff)) + 0x10000; + } + } + } + } + return ucp; + } + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + + void get_property_ranges(range_pairs &pranges, const uchar32 *&curpos, const uchar32 *const end) + { + const uint_l32 pnumber = lookup_propertynumber(curpos, end); + + if (pnumber == up_constants::error_property || this->character_class.is_pos(pnumber)) + this->throw_error(regex_constants::error_property); + + this->character_class.load_upranges(pranges, pnumber); + } + + uint_l32 lookup_propertynumber(const uchar32 *&curpos, const uchar32 *const end) + { + pstring pname; + pstring pvalue; + + get_property_name_and_value(pname, pvalue, curpos, end); + + return this->character_class.get_propertynumber(pname, pvalue); + } + + void get_property_name_and_value(pstring &pname, pstring &pvalue, const uchar32 *&curpos, const uchar32 *const end) + { + if (curpos == end || *curpos != meta_char::mc_cbraop) // '{' + this->throw_error(regex_constants::error_escape); + + get_property_name_or_value(pvalue, ++curpos, end); + + if (!pvalue.size()) + this->throw_error(regex_constants::error_escape); + + if (static_cast(pvalue[pvalue.size() - 1]) != char_other::co_sp) // ' ', not a value. + { + if (curpos == end) + this->throw_error(regex_constants::error_escape); + + if (*curpos == meta_char::mc_eq) // '=' + { + pname = pvalue; + get_property_name_or_value(pvalue, ++curpos, end); + if (!pvalue.size()) + this->throw_error(regex_constants::error_escape); + } + } + + if (curpos == end || *curpos != meta_char::mc_cbracl) // '}' + this->throw_error(regex_constants::error_escape); + + if (static_cast(pvalue[pvalue.size() - 1]) == char_other::co_sp) // ' ', value. + pvalue.resize(pvalue.size() - 1); + + ++curpos; + } + + void get_property_name_or_value(pstring &name_or_value, const uchar32 *&curpos, const uchar32 *const end) const + { + bool number_found = false; + + name_or_value.clear(); + + for (;; ++curpos) + { + if (curpos == end) + break; + + const uchar32 curchar = *curpos; + + if (curchar >= char_alnum::ch_A && curchar <= char_alnum::ch_Z) + ; + else if (curchar >= char_alnum::ch_a && curchar <= char_alnum::ch_z) + ; + else if (curchar == char_other::co_ll) // '_' + ; + else if (curchar >= char_alnum::ch_0 && curchar <= char_alnum::ch_9) + number_found = true; + else + break; + + name_or_value.append(1, static_cast(curchar)); + } + if (number_found) + name_or_value.append(1, char_other::co_sp); // ' ' + + } + +#endif // !defined(SRELL_NO_UNICODE_PROPERTY) + + bool translate_atom_escape(state_type &escatom +#if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + , state_array &piece + , re_quantifier &piecesize +#else + , state_array & + , re_quantifier & +#endif + , const uchar32 *&curpos, const uchar32 *const end, /* const */ re_compiler_state &cstate) + { + if (curpos == end) + this->throw_error(regex_constants::error_escape); + + escatom.character = *curpos; + +#if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + if (this->is_vmode() && ((escatom.character | constants::asc_icase) == char_alnum::ch_p)) + { + posdata_holder pos; + + parse_escape_p_vmode(pos, escatom, ++curpos, end, cstate); + + if (escatom.type == st_character_class) + escatom.number = this->character_class.register_newclass(pos.ranges); + else + transform_seqdata(piece, pos); + + piecesize.set(escatom.quantifier.atleast, escatom.quantifier.atmost); + return true; + } +#endif // !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + + switch (escatom.character) + { + case char_alnum::ch_B: // 'B': + escatom.is_not = true; + //@fallthrough@ + + case char_alnum::ch_b: // 'b': + escatom.type = st_boundary; // \b, \B. + escatom.quantifier.reset(0); +// atom.number = 0; + if (this->is_icase()) + { + this->character_class.setup_icase_word(); + escatom.number = static_cast(re_character_class::icase_word); + } + else + escatom.number = static_cast(re_character_class::word); // \w, \W. + break; + +// case char_alnum::ch_A: // 'A': +// atom.type = st_bol; // '\A' +// case char_alnum::ch_Z: // 'Z': +// atom.type = st_eol; // '\Z' +// case char_alnum::ch_z: // 'z': +// atom.type = st_eol; // '\z' +// case char_alnum::ch_R: // 'R': + // (?>\r\n?|[\x0A-\x0C\x85\u{2028}\u{2029}]) + + // Backreferences. + +#if !defined(SRELL_NO_NAMEDCAPTURE) + // Prepared for named captures. + case char_alnum::ch_k: // 'k': + return parse_backreference_name(escatom, curpos, end, cstate); // \k. +#endif + + default: + + if (escatom.character >= char_alnum::ch_1 && escatom.character <= char_alnum::ch_9) // \1, \9. + return parse_backreference_number(escatom, curpos, end, cstate); + + return translate_escseq(NULL, escatom, curpos, end, false); + } + + ++curpos; + return true; + } + + bool parse_backreference_number(state_type &atom, const uchar32 *&curpos, const uchar32 *const end, const re_compiler_state &cstate) + { + const uchar32 backrefno = translate_numbers(curpos, end, 10, 0, 0, 0xfffffffe); + // 22.2.1.1 Static Semantics: Early Errors: + // It is a Syntax Error if NcapturingParens >= 23^2 - 1. + + if (backrefno == constants::invalid_u32value) + this->throw_error(regex_constants::error_escape); + + atom.number = static_cast(backrefno); + atom.backrefnumber_unresolved = false; + + return backreference_postprocess(atom, cstate); + } + + bool backreference_postprocess(state_type &atom, const re_compiler_state & /* cstate */) const + { + atom.next2 = 1; + atom.type = st_backreference; + +// atom.quantifier.atleast = cstate.atleast_widths_of_brackets[atom.number - 1]; + // Moved to check_backreferences(). + + return true; + } + +#if !defined(SRELL_NO_NAMEDCAPTURE) + bool parse_backreference_name(state_type &atom, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) + { + if (++curpos == end || *curpos != meta_char::mc_lt) + this->throw_error(regex_constants::error_escape); + + const gname_string groupname = get_groupname(++curpos, end, cstate); + + atom.number = this->namedcaptures[groupname]; + + if (atom.number != groupname_mapper::notfound) + atom.backrefnumber_unresolved = false; + else + { + atom.backrefnumber_unresolved = true; + atom.number = static_cast(cstate.unresolved_gnames.size()); + cstate.unresolved_gnames.push_back(groupname, atom.number); + } + + return backreference_postprocess(atom, cstate); + } + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + gname_string get_groupname(const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &cstate) +#else + gname_string get_groupname(const uchar32 *&curpos, const uchar32 *const end, re_compiler_state &) +#endif + { + charT mbstr[utf_traits::maxseqlen]; + gname_string groupname; + +#if !defined(SRELL_NO_UNICODE_PROPERTY) + cstate.idchecker.setup(); +#endif + for (;;) + { + if (curpos == end) + this->throw_error(regex_constants::error_escape); + + uchar32 curchar = *curpos++; + + if (curchar == meta_char::mc_gt) // '>' + break; + + if (curchar == meta_char::mc_escape && curpos != end && *curpos == char_alnum::ch_u) // '\\', 'u'. + curchar = parse_escape_u(++curpos, end); + +#if defined(SRELL_NO_UNICODE_PROPERTY) + if (curchar != meta_char::mc_escape) +#else + if (cstate.idchecker.is_identifier(curchar, groupname.size() != 0)) +#endif + ; // OK. + else + curchar = constants::invalid_u32value; + + if (curchar == constants::invalid_u32value) + this->throw_error(regex_constants::error_escape); + + const uchar32 seqlen = utf_traits::to_codeunits(mbstr, curchar); + for (uchar32 i = 0; i < seqlen; ++i) + groupname.append(1, mbstr[i]); + } + if (!groupname.size()) + this->throw_error(regex_constants::error_escape); + + return groupname; + } +#endif // !defined(SRELL_NO_NAMEDCAPTURE) + +#if !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + + bool parse_escape_p_vmode(posdata_holder &pos, state_type &patom, const uchar32 *&curpos, const uchar32 *const end, const re_compiler_state &cstate) + { + if (curpos == end) + this->throw_error(regex_constants::error_escape); + +// patom.is_not = (patom.character & constants::asc_icase) ? false : true; + if (patom.character == char_alnum::ch_P) // \P{...} + patom.is_not = true; + + patom.number = lookup_propertynumber(curpos, end); + + if (patom.number == up_constants::error_property) + this->throw_error(regex_constants::error_property); + + if (!this->character_class.is_pos(patom.number)) + { + pos.clear(); + + this->character_class.load_upranges(pos.ranges, patom.number); + + if (this->is_icase() && patom.number >= static_cast(re_character_class::number_of_predefcls)) + pos.ranges.make_caseunfoldedcharset(); + + if (patom.is_not) + { + pos.ranges.negation(); + patom.is_not = false; + } + + patom.type = st_character_class; + patom.quantifier.reset(1); + } + else + { + simple_array sequences; + + this->character_class.get_prawdata(sequences, patom.number); + pos.split_seqs_and_ranges(sequences, this->is_icase(), cstate.back); + + patom.quantifier.set(pos.length.first, pos.length.second); + + if (patom.is_not) + this->throw_error(regex_constants::error_complement); + } + return true; + } + + uint_l32 transform_seqdata(state_array &piece, const posdata_holder &pos) + { + uchar32 seqlen = static_cast(pos.indices.size()); + state_type ccatom; + + ccatom.reset(); + ccatom.type = st_character_class; + ccatom.number = this->character_class.register_newclass(pos.ranges); + + if (seqlen > 0) + { + const bool has_empty = pos.has_empty(); + state_size_type prevbranch_end = 0; + state_type branchatom; + state_type jumpatom; + state_array branch; + + branch.resize(seqlen); + for (uchar32 i = 0; i < seqlen; ++i) + branch[i].reset(); + + branchatom.reset(); + branchatom.type = st_epsilon; + branchatom.character = meta_char::mc_bar; // '|' + + jumpatom.reset(); + jumpatom.type = st_epsilon; + + --seqlen; + + for (; seqlen >= 2; --seqlen) + { + uchar32 offset = pos.indices[seqlen]; + const uchar32 seqend = pos.indices[seqlen - 1]; + + if (offset != seqend) + { + branch.resize(seqlen + 1); + branch[seqlen] = jumpatom; + + branchatom.quantifier.atleast = seqlen; + + for (uchar32 count = 0; offset < seqend; ++offset) + { + branch[count++].character = pos.seqs[offset]; + + if (count == seqlen) + { + if (piece.size()) + { + state_type &lastatom = piece[piece.size() - 1]; + + lastatom.next1 = seqlen + 2; + piece[prevbranch_end].next2 = static_cast(piece.size() - prevbranch_end); + } + prevbranch_end = piece.size(); + piece.push_back(branchatom); + piece.append(branch); + count = 0; + } + } + } + } + + if (piece.size()) + { + state_type &lastatom = piece[piece.size() - 1]; + + lastatom.next1 = has_empty ? 3 : 2; + + piece[prevbranch_end].next2 = static_cast(piece.size() - prevbranch_end); + } + + branchatom.quantifier.atleast = 1; + + if (has_empty) + { + branchatom.next2 = 2; + piece.push_back(branchatom); + } + + piece.push_back(ccatom); + + branchatom.character = meta_char::mc_colon; // ':' + branchatom.next1 = 1; + branchatom.next2 = 0; + branchatom.quantifier.set(1, 0); + piece.insert(0, branchatom); + ++prevbranch_end; + + branchatom.quantifier.atmost = 1; + piece.push_back(branchatom); + + optimise_pos(piece, branchatom, has_empty); + + } + return ccatom.number; + } + + void optimise_pos(state_array &piece, state_type &branchatom, const bool has_empty) const + { +#if !defined(SRELLDBG_NO_ASTERISK_OPT) && !defined(SRELLDBG_NO_POS_OPT) + + simple_array ins_bt; + + branchatom.number = 0u; + branchatom.next1 = 0; + + for (state_size_type srcbase = 1; srcbase < piece.size();) + { + state_type &srcbaseatom = piece[srcbase]; + + if (srcbaseatom.is_branch()) + { + if (srcbaseatom.quantifier.atleast == 1) + { + break; + } + + const state_size_type dstbaseinit = srcbase + srcbaseatom.next2; + const uint_l32 srcseqlen = srcbaseatom.quantifier.atleast; + + for (uint_l32 complen = srcseqlen; complen;) + { + state_size_type dstbase = dstbaseinit; + bool modified = false; + + --complen; + + for (;;) + { + state_type &dstbaseatom = piece[dstbase]; + const uint_l32 dstseqlen = dstbaseatom.quantifier.atleast; + state_size_type dstpos = dstbase + (dstbaseatom.type == st_epsilon ? 1 : 0); + + if (piece[dstpos].type == st_character_class) + { + branchatom.next2 = static_cast(dstbase); + break; + } + + if (dstseqlen >= complen) + { + state_size_type srcpos = srcbase + 1; + + for (uint_l32 i = 0;; ++i) + { + state_type &srcref = piece[srcpos]; + state_type &dstref = piece[dstpos]; + + if (i == complen) + { + if (dstref.type == st_epsilon) + { + if (complen) + { + uchar32 inspos = static_cast(ins_bt.size()); + + for (; !piece[srcpos].quantifier.is_greedy;) + srcpos = static_cast(piece[srcpos].quantifier.atmost); + + for (; inspos >= 2 && (ins_bt[inspos - 2] > srcpos);) + { + inspos -= 2; + } + + ins_bt.insert(inspos, dstpos); + ins_bt.insert(inspos, srcpos); + } + } + else if (dstref.type == st_character && srcref.character != dstref.character) + { + if (dstref.quantifier.is_greedy) + { + piece[srcpos].next2 = static_cast(dstpos - srcpos); + dstref.quantifier.is_greedy = false; + dstref.quantifier.atmost = srcpos; + } + modified = true; + } + + break; + } + else if (srcref.character == dstref.character && dstref.type == st_character) + { + ++srcpos; + ++dstpos; + } + else + break; + } + + if (modified) + break; + + if (dstbaseatom.type == st_epsilon && dstbaseatom.next2) + { + dstbase += dstbaseatom.next2; + } + else + { + break; + } + } + else + break; + } + } + + if (branchatom.number == 0) + { + branchatom.next1 = static_cast(srcbase); + } + else + { + srcbaseatom.next2 = 0; + srcbaseatom.character = char_alnum::ch_s; + } + + srcbase = dstbaseinit; + + ++branchatom.number; + } + else + break; +// ++srcbase; + } + + if (branchatom.next2 == 0) + ++branchatom.next2; + + if (branchatom.next1 != 0) + piece[branchatom.next1].next2 = static_cast(branchatom.next2 - branchatom.next1); + + if (has_empty) + { + piece[branchatom.next2].next2 = 0; + piece[branchatom.next2 + 1].next2 = 1; + } + +#endif // !defined(SRELLDBG_NO_ASTERISK_OPT) && !defined(SRELLDBG_NO_POS_OPT) + } + + void insert_btbranch(state_array &piece, const simple_array &ins_bt) const + { + state_type insstate; + simple_array reordering1; + simple_array reordering2; + uchar32 offset = 0; + uchar32 chainindex = 0; + + insstate.reset(); + insstate.type = st_epsilon; + insstate.character = meta_char::mc_bar; + + reordering1.resize(piece.size() + 1); + reordering2.resize(piece.size() + 1); + + for (uchar32 indx = 0; indx <= piece.size(); ++indx) + { + reordering1[indx] = indx + offset; + + if (chainindex < ins_bt.size()) + { + if (indx == ins_bt[chainindex]) + { + ++offset; + chainindex += 2; + } + } + reordering2[indx] = indx + offset; + } + + for (uchar32 indx = 0; indx < piece.size(); ++indx) + { + state_type &st = piece[indx]; + + if (st.next1 != 0) + { + const uchar32 newn1 = reordering1[indx + st.next1]; + st.next1 = static_cast(newn1 - reordering2[indx]); + } + + if (st.next2 != 0) + { + const uchar32 newn2 = reordering1[indx + st.next2]; + st.next2 = static_cast(newn2 - reordering2[indx]); + } + } + + for (uchar32 indx = 0; indx < ins_bt.size();) + { + const uchar32 srcpos = reordering1[ins_bt[indx++]]; + const uchar32 dstpos = reordering1[ins_bt[indx++]]; + + piece.insert(srcpos, insstate); + state_type &insst = piece[srcpos]; + insst.next2 = static_cast(dstpos - srcpos); + } + } + +#endif // !defined(SRELL_NO_VMODE) && !defined(SRELL_NO_UNICODE_PROPERTY) + + bool get_quantifier(re_quantifier &quantifier, const uchar32 *&curpos, const uchar32 *const end) + { + switch (*curpos) + { + case meta_char::mc_astrsk: // '*': + --quantifier.atleast; + //@fallthrough@ + + case meta_char::mc_plus: // '+': + quantifier.set_infinity(); + break; + + case meta_char::mc_query: // '?': + --quantifier.atleast; + break; + + case meta_char::mc_cbraop: // '{': + get_brace_with_quantifier(quantifier, curpos, end); + break; + + default: + return true; + } + + if (++curpos != end && *curpos == meta_char::mc_query) // '?' + { + quantifier.is_greedy = false; + ++curpos; + } + return true; + } + + void get_brace_with_quantifier(re_quantifier &quantifier, const uchar32 *&curpos, const uchar32 *const end) + { + ++curpos; + + quantifier.atleast = static_cast(translate_numbers(curpos, end, 10, 1, 0, constants::max_u32value)); + + if (quantifier.atleast == static_cast(constants::invalid_u32value)) + goto THROW_ERROR_BRACE; + + if (curpos == end) + goto THROW_ERROR_BRACE; + + if (*curpos == meta_char::mc_comma) // ',' + { + ++curpos; + + quantifier.atmost = static_cast(translate_numbers(curpos, end, 10, 1, 0, constants::max_u32value)); + + if (quantifier.atmost == static_cast(constants::invalid_u32value)) + quantifier.set_infinity(); + + if (!quantifier.is_valid()) + this->throw_error(regex_constants::error_badbrace); + } + else + quantifier.atmost = quantifier.atleast; + + if (curpos == end || *curpos != meta_char::mc_cbracl) // '}' + { + THROW_ERROR_BRACE: + this->throw_error(regex_constants::error_brace); + } + // *curpos == '}' + } + + uchar32 translate_numbers(const uchar32 *&curpos, const uchar32 *const end, const int radix, const std::size_t minsize, const std::size_t maxsize, const uchar32 maxvalue) const + { + std::size_t count = 0; + uchar32 u32value = 0; + int num; + + for (; maxsize == 0 || count < maxsize; ++curpos, ++count) + { + + if (curpos == end || (num = tonumber(*curpos, radix)) == -1) + break; + + const uchar32 nextvalue = u32value * radix + num; + + if ((/* maxvalue != 0 && */ nextvalue > maxvalue) || nextvalue < u32value) + break; + + u32value = nextvalue; + } + + if (count >= minsize) + return u32value; + + return constants::invalid_u32value; + } + + int tonumber(const uchar32 ch, const int radix) const + { + if ((ch >= char_alnum::ch_0 && ch <= char_alnum::ch_7) || (radix >= 10 && (ch == char_alnum::ch_8 || ch == char_alnum::ch_9))) + return static_cast(ch - char_alnum::ch_0); + + if (radix == 16) + { + if (ch >= char_alnum::ch_a && ch <= char_alnum::ch_f) + return static_cast(ch - char_alnum::ch_a + 10); + + if (ch >= char_alnum::ch_A && ch <= char_alnum::ch_F) + return static_cast(ch - char_alnum::ch_A + 10); + } + return -1; + } + + bool check_backreferences(re_compiler_state &cstate) + { + for (typename state_array::size_type backrefpos = 0; backrefpos < this->NFA_states.size(); ++backrefpos) + { + state_type &brs = this->NFA_states[backrefpos]; + + if (brs.type == st_backreference) + { + const uint_l32 &backrefno = brs.number; + +#if !defined(SRELL_NO_NAMEDCAPTURE) + if (brs.backrefnumber_unresolved) + { + if (backrefno >= cstate.unresolved_gnames.size()) + return false; // Internal error. + + brs.number = this->namedcaptures[cstate.unresolved_gnames[backrefno]]; + + if (backrefno == groupname_mapper::notfound) + return false; + + brs.backrefnumber_unresolved = false; + } +#endif + + for (typename state_array::size_type roundbracket_closepos = 0;; ++roundbracket_closepos) + { + if (roundbracket_closepos < this->NFA_states.size()) + { + const state_type &rbcs = this->NFA_states[roundbracket_closepos]; + + if (rbcs.type == st_roundbracket_close && rbcs.number == backrefno) + { + if (roundbracket_closepos < backrefpos) + { +// brs.quantifier.atleast = cstate.atleast_widths_of_brackets[backrefno - 1]; + // 20210429: It was reported that clang-tidy was dissatisfied with this code. + // 20211006: Replaced with the following code: + + const uint_l32 backrefnoindex = backrefno - 1; + + // This can never be true. Added only for satisfying clang-tidy. + if (backrefnoindex >= cstate.atleast_widths_of_brackets.size()) + return false; + + brs.quantifier.atleast = cstate.atleast_widths_of_brackets[backrefnoindex]; + + cstate.backref_used = true; + } + else + { + brs.type = st_epsilon; + brs.next2 = 0; + } + break; + } + } + else + return false; + } + } + } + return true; + } + +#if !defined(SRELLDBG_NO_1STCHRCLS) + + void create_firstchar_class() + { +#if !defined(SRELLDBG_NO_BITSET) + range_pairs fcc; +#else + range_pairs &fcc = this->firstchar_class; +#endif + + const bool canbe0length = gather_nextchars(fcc, static_cast(this->NFA_states[0].next1), 0u, false); + + if (canbe0length) + { + fcc.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint)); + // Expressions would consist of assertions only, such as /^$/. + // We cannot but accept every codepoint. + } + +#if !defined(SRELLDBG_NO_BITSET) + this->NFA_states[0].quantifier.atleast = this->character_class.register_newclass(fcc); + + set_bitset_table(fcc); +#endif + } + +#if !defined(SRELLDBG_NO_BITSET) + void set_bitset_table(const range_pairs &fcc) + { + for (typename range_pairs::size_type i = 0; i < fcc.size(); ++i) + { + const range_pair &range = fcc[i]; + +#if 0 + uchar32 second = range.second <= constants::unicode_max_codepoint ? range.second : constants::unicode_max_codepoint; + +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(push) +#pragma warning(disable:4127) +#endif + if (utf_traits::utftype == 16) +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(pop) +#endif + { + if (second >= 0x10000 && range.first < 0x10000) + { + this->firstchar_class_bs.set_range(utf_traits::firstcodeunit(0x10000) & utf_traits::bitsetmask, utf_traits::firstcodeunit(second) & utf_traits::bitsetmask); + second = 0xffff; + } + } + this->firstchar_class_bs.set_range(utf_traits::firstcodeunit(range.first) & utf_traits::bitsetmask, utf_traits::firstcodeunit(second) & utf_traits::bitsetmask); + +#else + for (uchar32 ucp = range.first; ucp <= constants::unicode_max_codepoint; ++ucp) + { + this->firstchar_class_bs.set(utf_traits::firstcodeunit(ucp) & utf_traits::bitsetmask); + + if (ucp == range.second) + break; + } +#endif + } + } +#endif // !defined(SRELLDBG_NO_BITSET) +#endif // !defined(SRELLDBG_NO_1STCHRCLS) + + bool gather_nextchars(range_pairs &nextcharclass, typename state_array::size_type pos, simple_array &checked, const uint_l32 bracket_number, const bool subsequent) const + { + bool canbe0length = false; + + for (;;) + { + const state_type &state = this->NFA_states[pos]; + + if (checked[pos]) + break; + + checked[pos] = true; + + if (state.next2 + && (state.type != st_check_counter || !state.quantifier.is_greedy || state.quantifier.atleast == 0) + && (state.type != st_save_and_reset_counter) + && (state.type != st_roundbracket_open) + && (state.type != st_roundbracket_close || state.number != bracket_number) + && (state.type != st_repeat_in_push) + && (state.type != st_backreference || (state.quantifier.atleast == 0 && state.next1 != state.next2)) + && (state.type != st_lookaround_open)) + if (gather_nextchars(nextcharclass, pos + state.next2, checked, bracket_number, subsequent)) + canbe0length = true; + + switch (state.type) + { + case st_character: + if (!this->is_ricase()) + { + nextcharclass.join(range_pair_helper(state.character)); + } + else + { + uchar32 table[ucf_constants::rev_maxset] = {}; + const uchar32 setnum = unicode_case_folding::casefoldedcharset(table, state.character); + + for (uchar32 j = 0; j < setnum; ++j) + nextcharclass.join(range_pair_helper(table[j])); + } + return canbe0length; + + case st_character_class: + nextcharclass.merge(this->character_class[state.number]); + return canbe0length; + + case st_backreference: + { + const typename state_array::size_type nextpos = find_next1_of_bracketopen(state.number); + + const bool length0 = gather_nextchars(nextcharclass, nextpos, state.number, subsequent); + + if (!length0) + return canbe0length; + } + break; + + case st_eol: + case st_bol: + if (!subsequent) + break; + + //@fallthrough@ + + case st_boundary: + if (subsequent) + nextcharclass.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint)); + + break; + + case st_lookaround_open: +// if (!state.is_not && !state.reverse) + if (!state.is_not && state.quantifier.atleast == 0) + { + gather_nextchars(nextcharclass, pos + 1, checked, 0u, subsequent); + } + else if (subsequent) + nextcharclass.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint)); + + break; + + case st_roundbracket_close: + if (/* bracket_number == 0 || */ state.number != bracket_number) + break; + //@fallthrough@ + + case st_success: // == st_lookaround_close. + return true; + + case st_check_counter: + if (!state.quantifier.is_greedy && state.quantifier.atleast >= 1) + return canbe0length; + //@fallthrough@ + + default:; + } + + if (state.next1) + pos += state.next1; + else + break; + } + return canbe0length; + } + + bool gather_nextchars(range_pairs &nextcharclass, const typename state_array::size_type pos, const uint_l32 bracket_number, const bool subsequent) const + { + simple_array checked; + + checked.resize(this->NFA_states.size(), false); + return gather_nextchars(nextcharclass, pos, checked, bracket_number, subsequent); + } + + typename state_array::size_type find_next1_of_bracketopen(const uint_l32 bracketno) const + { + for (typename state_array::size_type no = 0; no < this->NFA_states.size(); ++no) + { + const state_type &state = this->NFA_states[no]; + + if (state.type == st_roundbracket_open && state.number == bracketno) + return no + state.next1; + } + return 0; + } + + void relativejump_to_absolutejump() + { + for (typename state_array::size_type pos = 0; pos < this->NFA_states.size(); ++pos) + { + state_type &state = this->NFA_states[pos]; + +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + if (state.next1 || state.type == st_character || state.type == st_character_class) +#else + if (state.next1) +#endif + state.next_state1 = &this->NFA_states[pos + state.next1]; + else + state.next_state1 = NULL; + + if (state.next2) + state.next_state2 = &this->NFA_states[pos + state.next2]; + else + state.next_state2 = NULL; + } + } + + void optimise() + { +#if !defined(SRELLDBG_NO_BRANCH_OPT2) && !defined(SRELLDBG_NO_ASTERISK_OPT) + branch_optimisation2(); +#endif + +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + asterisk_optimisation(); +#endif + +#if !defined(SRELLDBG_NO_BRANCH_OPT) && !defined(SRELLDBG_NO_ASTERISK_OPT) + branch_optimisation(); +#endif + +#if !defined(SRELLDBG_NO_1STCHRCLS) + create_firstchar_class(); +#endif + +#if !defined(SRELLDBG_NO_SKIP_EPSILON) + skip_epsilon(); +#endif + +#if !defined(SRELLDBG_NO_CCPOS) + set_charclass_posinfo(); +#endif + } + +#if !defined(SRELLDBG_NO_SKIP_EPSILON) + + void skip_epsilon() + { + for (typename state_array::size_type pos = 0; pos < this->NFA_states.size(); ++pos) + { + state_type &state = this->NFA_states[pos]; + + if (state.next1) + state.next1 = static_cast(skip_nonbranch_epsilon(pos + state.next1) - pos); + + if (state.next2) + state.next2 = static_cast(skip_nonbranch_epsilon(pos + state.next2) - pos); + } + } + + typename state_array::size_type skip_nonbranch_epsilon(typename state_array::size_type pos) const + { + for (;;) + { + const state_type &state = this->NFA_states[pos]; + + if (state.type == st_epsilon && state.next2 == 0) + { + pos += state.next1; + continue; + } + break; + } + return pos; + } + +#endif + +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + + void asterisk_optimisation() + { + state_type *prevstate_is_astrskepsilon = NULL; + const state_type *prevcharstate = NULL; + state_size_type mnp_inspos = 0; + bool inspos_updatable = true; +#if !defined(SRELLDBG_NO_SPLITCC) + bool inserted = false; +#endif + + for (typename state_array::size_type cur = 1; cur < this->NFA_states.size(); ++cur) + { + state_type &curstate = this->NFA_states[cur]; + + switch (curstate.type) + { + case st_epsilon: + if (curstate.character == meta_char::mc_astrsk) + { + prevstate_is_astrskepsilon = &curstate; + } + else + { + prevstate_is_astrskepsilon = NULL; + inspos_updatable = false; + } + break; + + case st_character: + case st_character_class: + if (inspos_updatable) + { + if (prevcharstate) + { + if (prevcharstate->type != curstate.type || prevcharstate->number != curstate.number) + inspos_updatable = false; + } + if (inspos_updatable) + { + if (prevstate_is_astrskepsilon) + { + inspos_updatable = false; + if (prevstate_is_astrskepsilon->quantifier.is_asterisk_or_plus()) + { + mnp_inspos = cur + 1; + } + } + } + prevcharstate = &curstate; + } + if (prevstate_is_astrskepsilon) + { + const re_quantifier &eq = prevstate_is_astrskepsilon->quantifier; + const state_size_type epsilonno = cur - 1; + const state_size_type faroffset = eq.is_greedy ? prevstate_is_astrskepsilon->next2 : prevstate_is_astrskepsilon->next1; + const state_size_type nextno = epsilonno + faroffset; +#if !defined(SRELLDBG_NO_SPLITCC) + const state_size_type origlen = this->NFA_states.size(); +#endif + + if (is_exclusive_sequence(eq, cur, nextno)) + { + state_type &epsilonstate = this->NFA_states[epsilonno]; + state_type &curstate2 = this->NFA_states[cur]; + + epsilonstate.next1 = 1; + epsilonstate.next2 = 0; + epsilonstate.number = 0; +// curstate2.quantifier.is_greedy = true; + if (epsilonstate.quantifier.is_infinity()) + { + curstate2.next1 = 0; + curstate2.next2 = faroffset - 1; + } + else // ? or {0,1} + { + curstate2.next2 = faroffset - 1; + } + +#if !defined(SRELLDBG_NO_SPLITCC) + if (mnp_inspos == nextno && origlen != this->NFA_states.size()) + inserted = true; +#endif + } + prevstate_is_astrskepsilon = NULL; + } + break; + + default: + prevstate_is_astrskepsilon = NULL; + inspos_updatable = false; + } + } + +#if !defined(SRELLDBG_NO_NEXTPOS_OPT) + + if (mnp_inspos != 0) + { + state_size_type cur = mnp_inspos; + + if (this->NFA_states[cur].type != st_success) + { + const state_type &prevstate = this->NFA_states[cur - 1]; + +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER) && !defined(SRELLDBG_NO_1STCHRCLS) && !defined(SRELLDBG_NO_BITSET) + +#if !defined(SRELLDBG_NO_SPLITCC) + if (!inserted && prevstate.next1 == 0) +#else + if (prevstate.next1 == 0) +#endif + { + range_pairs prevcc; + range_pairs nextcc; + +// gather_if_char_or_cc_strict(prevcc, prevstate); + if (prevstate.type == st_character) + { + prevcc.set_solerange(range_pair_helper(prevstate.character)); + } + else if (prevstate.type == st_character_class) + { + prevcc = this->character_class[prevstate.number]; + } + + gather_nextchars(nextcc, cur, 0u, true); + + const uint_l32 cpnum_prevcc = prevcc.total_codepoints(); + const uint_l32 cpnum_nextcc = nextcc.total_codepoints(); + + if (cpnum_nextcc != 0 && cpnum_nextcc < cpnum_prevcc) + { + state_array newNFAs; + state_type atom; + + atom.reset(); + atom.character = meta_char::mc_eq; // '=' + atom.type = st_lookaround_open; + atom.next1 = static_cast(cur - 1) * 2 + 2; + atom.next2 = 1; + atom.quantifier.atleast = 2; // Match point rewinder. + newNFAs.append(1, atom); + + newNFAs.append(this->NFA_states, 1, cur - 1); + + atom.type = st_lookaround_close; + atom.next1 = 0; + atom.next2 = 0; + newNFAs.append(1, atom); + + insert_at(1, newNFAs.size()); + this->NFA_states.replace(1, newNFAs.size(), newNFAs); + this->NFA_states[0].next2 = this->NFA_states[0].next1; + this->NFA_states[0].next1 = 1; + + return; + } + } +#endif // !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER) && !defined(SRELLDBG_NO_1STCHRCLS) && !defined(SRELLDBG_NO_BITSET) + + insert_at(cur, 1); + state_type &mnpstate = this->NFA_states[cur]; + state_type &charstate = this->NFA_states[cur - 1]; + + mnpstate.type = st_move_nextpos; + +#if !defined(SRELLDBG_NO_SPLITCC) + + if (inserted) + { + charstate.next2 = 1; + } + else +#endif + if (charstate.next1 == 0) + { + mnpstate.next1 = charstate.next2 - 1; + charstate.next2 = 1; + } + else + { + mnpstate.next1 = -2; + charstate.next1 = 1; + } + } + } +#endif // !defined(SRELLDBG_NO_NEXTPOS_OPT) + } + + bool is_exclusive_sequence(const re_quantifier &eq, const state_size_type curno, const state_size_type nextno) // const + { + const state_type &curstate = this->NFA_states[curno]; + range_pairs curchar_class; + range_pairs nextchar_class; + + if (curstate.type == st_character) + { + curchar_class.join(range_pair_helper(curstate.character)); + } + else if (curstate.type == st_character_class) + { + curchar_class = this->character_class[curstate.number]; + if (curchar_class.size() == 0) // Means [], which always makes matching fail. + return true; // For preventing the automaton from pushing bt data. + } + else + { + return false; + } + + const bool canbe0length = gather_nextchars(nextchar_class, nextno, 0u, true); + + if (nextchar_class.size()) + { + if (!canbe0length || eq.is_greedy) + { +#if !defined(SRELLDBG_NO_SPLITCC) + + range_pairs kept; + range_pairs removed; + + curchar_class.split_ranges(kept, removed, nextchar_class); + + if (removed.size() == 0) // !curchar_class.is_overlap(nextchar_class) + return true; + + if (curstate.type == st_character_class && kept.size() && eq.is_infinity()) + { + { + state_type &curstate2 = this->NFA_states[curno]; + + curstate2.character = kept.consists_of_one_character(this->is_icase()); + if (curstate2.character != constants::invalid_u32value) + curstate2.type = st_character; + else + curstate2.number = this->character_class.register_newclass(kept); + } + const re_quantifier backupeq(eq); + + insert_at(nextno, 2); + state_type &n0 = this->NFA_states[nextno]; + state_type &n1 = this->NFA_states[nextno + 1]; + + n0.reset(); + n0.type = st_epsilon; + n0.character = meta_char::mc_astrsk; + n0.quantifier = backupeq; +// n0.next2 = 1; + n0.next2 = 2; + if (!n0.quantifier.is_greedy) + { + n0.next1 = n0.next2; + n0.next2 = 1; + } + + n1.reset(); + n1.type = st_character_class; + + n1.character = removed.consists_of_one_character(this->is_icase()); + if (n1.character != constants::invalid_u32value) + n1.type = st_character; + else + n1.number = this->character_class.register_newclass(removed); + + n1.next1 = -2; +// n1.next2 = 0; + return true; + } + +#else // defined(SRELLDBG_NO_SPLITCC) + + if (!curchar_class.is_overlap(nextchar_class)) + { + return true; + } + +#endif // !defined(SRELLDBG_NO_SPLITCC) + } + } + else if (/* nextchar_class.size() == 0 && */ (!canbe0length || only_success_left(nextno))) + { + // (size() == 0 && !canbe0length) means []. + return eq.is_greedy; + } + + return false; + } + + bool only_success_left(typename state_array::size_type pos) const + { + for (;;) + { + const state_type &state = this->NFA_states[pos]; + + switch (state.type) + { + case st_success: + return true; + + case st_roundbracket_close: + case st_backreference: + if (state.next2 != 0 && state.next1 != state.next2) + return false; + break; + + case st_epsilon: + if (state.next2 != 0 && !only_success_left(pos + state.next2)) + return false; + break; + + case st_roundbracket_open: + break; // /a*()/ + + default: + return false; + } + if (state.next1) + pos += state.next1; + else + return false; + } + } +#endif // !defined(SRELLDBG_NO_ASTERISK_OPT) + + void insert_at(const typename state_array::size_type pos, const std::ptrdiff_t len) + { + state_type newstate; + + for (typename state_array::size_type cur = 0; cur < pos; ++cur) + { + state_type &state = this->NFA_states[cur]; + + if (state.next1 && (cur + state.next1) >= pos) + state.next1 += len; + + if (state.next2 && (cur + state.next2) >= pos) + state.next2 += len; + } + + for (typename state_array::size_type cur = pos; cur < this->NFA_states.size(); ++cur) + { + state_type &state = this->NFA_states[cur]; + + if ((cur + state.next1) < pos) + state.next1 -= len; + + if ((cur + state.next2) < pos) + state.next2 -= len; + } + + newstate.reset(); + newstate.type = st_epsilon; + for (std::ptrdiff_t count = 0; count < len; ++count) + this->NFA_states.insert(pos, newstate); + } + +#if !defined(SRELLDBG_NO_NEXTPOS_OPT) +#endif // !defined(SRELLDBG_NO_NEXTPOS_OPT) + +#if !defined(SRELLDBG_NO_BRANCH_OPT) || !defined(SRELLDBG_NO_BRANCH_OPT2) + + state_size_type gather_if_char_or_charclass(range_pairs &charclass, state_size_type pos, const bool strictly) const + { + for (;;) + { + const state_type &curstate = this->NFA_states[pos]; + + if (curstate.type == st_character && curstate.next2 == 0) + { + charclass.set_solerange(range_pair_helper(curstate.character)); + return pos; + } + else if (curstate.type == st_character_class && curstate.next2 == 0) + { + charclass = this->character_class[curstate.number]; + return pos; + } + else if (curstate.type == st_epsilon && curstate.next2 == 0 && !strictly) + { + } + else + break; + + pos += curstate.next1; + } + return 0; + } +#endif // !defined(SRELLDBG_NO_BRANCH_OPT) || !defined(SRELLDBG_NO_BRANCH_OPT2) + +#if !defined(SRELLDBG_NO_BRANCH_OPT) + void branch_optimisation() + { + range_pairs nextcharclass1; + + for (typename state_array::size_type pos = 0; pos < this->NFA_states.size(); ++pos) + { + const state_type &state = this->NFA_states[pos]; + + if (state.is_branch()) + { + const typename state_array::size_type nextcharpos = gather_if_char_or_charclass(nextcharclass1, pos + state.next1, false); + + if (nextcharpos) + { + range_pairs nextcharclass2; + const bool canbe0length = gather_nextchars(nextcharclass2, pos + state.next2, 0u /* bracket_number */, true); + + if (!canbe0length && !nextcharclass1.is_overlap(nextcharclass2)) + { + state_type &branch = this->NFA_states[pos]; + state_type &next1 = this->NFA_states[nextcharpos]; + + next1.next2 = pos + branch.next2 - nextcharpos; + branch.next2 = 0; + } + } + } + } + } +#endif // !defined(SRELLDBG_NO_BRANCH_OPT) + +#if !defined(SRELL_NO_ICASE) + bool check_if_really_needs_icase_search() + { + uchar32 u32chars[ucf_constants::rev_maxset]; + + for (typename state_array::size_type i = 0; i < this->NFA_states.size(); ++i) + { + const state_type &state = this->NFA_states[i]; + + if (state.type == st_character) + { + if (unicode_case_folding::casefoldedcharset(u32chars, state.character) > 1) + return true; + } + else if (state.type == st_backreference) + return true; + } +// this->soflags &= ~regex_constants::icase; + return false; + } +#endif // !defined(SRELL_NO_ICASE) + +#if !defined(SRELLDBG_NO_BMH) + void setup_bmhdata() + { + simple_array u32s; + + for (typename state_array::size_type i = 1; i < this->NFA_states.size(); ++i) + { + const state_type &state = this->NFA_states[i]; + + if (state.type == st_character) + u32s.push_backncr(state.character); + else + { + u32s.clear(); + break; + } + } + + if (u32s.size() > 1) +// if ((u32s.size() > 1 && !this->is_ricase()) || (u32s.size() > 2 && this->is_ricase())) + { + if (this->bmdata) + this->bmdata->clear(); + else + this->bmdata = new re_bmh; + + this->bmdata->setup(u32s, this->is_ricase()); + return /* false */; + } + + if (this->bmdata) + delete this->bmdata; + this->bmdata = NULL; +// return true; + } +#endif // !defined(SRELLDBG_NO_BMH) + +#if !defined(SRELLDBG_NO_CCPOS) + void set_charclass_posinfo() + { + this->character_class.finalise(); + for (typename state_array::size_type i = 1; i < this->NFA_states.size(); ++i) + { + state_type &state = this->NFA_states[i]; + + if (state.type == st_character_class) + { + const range_pair &posinfo = this->character_class.charclasspos(state.number); + state.quantifier.setccpos(posinfo.first, posinfo.second); + } + } + } +#endif // !defined(SRELLDBG_NO_CCPOS) + +#if !defined(SRELLDBG_NO_BRANCH_OPT2) + + void branch_optimisation2() + { + range_pairs basealt1stch; + range_pairs nextalt1stch; + + for (state_size_type pos = 0; pos < this->NFA_states.size(); ++pos) + { + const state_type &curstate = this->NFA_states[pos]; + + if (curstate.is_branch()) + { + const state_size_type next1pos = pos + curstate.next1; + state_size_type precharchainpos = pos; + + if (gather_if_char_or_charclass(basealt1stch, next1pos, true) != 0) + { + state_size_type next2pos = precharchainpos + curstate.next2; + state_size_type postcharchainpos = 0; + + for (;;) + { + state_size_type next2next1pos = next2pos; + state_type &nstate2 = this->NFA_states[next2pos]; + state_size_type next2next2pos = 0; + + if (nstate2.is_branch()) + { + next2next2pos = next2pos + nstate2.next2; + next2next1pos += nstate2.next1; + } + + if (gather_if_char_or_charclass(nextalt1stch, next2next1pos, true) != 0) + { + const int relation = basealt1stch.relationship(nextalt1stch); + + if (relation == 0) + { + if (next2next2pos) // if (nstate2.is_branch()) + { + nstate2.reset(); + nstate2.type = st_epsilon; + } + + if (postcharchainpos == 0) + { + postcharchainpos = next1pos + 1; + insert_at(postcharchainpos, 1); + this->NFA_states[next1pos].next1 = 1; + } + else + { + const state_size_type prevbranchpos = postcharchainpos; + + postcharchainpos = prevbranchpos + this->NFA_states[prevbranchpos].next2; + insert_at(postcharchainpos, 1); + this->NFA_states[prevbranchpos].next2 = postcharchainpos - prevbranchpos; + // Fix for bug210423. This line cannot be omitted, because + // NFA_states[prevbranchpos].next2 has been incremented in insert_at(). + } + +// if (next2next1pos >= postcharchainpos) + ++next2next1pos; + + if (precharchainpos >= postcharchainpos) + ++precharchainpos; + + state_type &prechainbranchpoint = this->NFA_states[precharchainpos]; + if (next2next2pos) + { +// if (next2next2pos >= postcharchainpos) + ++next2next2pos; + prechainbranchpoint.next2 = next2next2pos - precharchainpos; + } + else + { + prechainbranchpoint.next2 = 0; + } + + state_type &newbranchpoint = this->NFA_states[postcharchainpos]; + newbranchpoint.character = meta_char::mc_bar; +// newbranchpoint.next1 = 1; + newbranchpoint.next2 = next2next1pos + this->NFA_states[next2next1pos].next1 - postcharchainpos; + } + else if (relation == 1) + { + break; + } + else + precharchainpos = next2pos; + } + else + { + // Fix for bug210428. + // Original: /mm2|m|mm/ + // 1st step: /m(?:m2||m)/ <- No more optimisation can be performed. Must quit. + // 2nd step: /mm(?:2||)/ <- BUG. + break; + } + + if (next2next2pos == 0) + break; + + next2pos = next2next2pos; + } + } + } + } + } +#endif // !defined(SRELLDBG_NO_BRANCH_OPT2) + +public: // For debug. + + void print_NFA_states(const int) const; +}; +// re_compiler + + } // namespace regex_internal + +// ... "rei_compiler.hpp"] +// ["regex_sub_match.hpp" ... + +// 28.9, class template sub_match: +template +class sub_match : public std::pair +{ +public: + + typedef typename std::iterator_traits::value_type value_type; + typedef typename std::iterator_traits::difference_type difference_type; + typedef BidirectionalIterator iterator; + typedef std::basic_string string_type; + + bool matched; + +// constexpr sub_match(); // C++11. + + sub_match() : matched(false) + { + } + + difference_type length() const + { + return matched ? std::distance(this->first, this->second) : 0; + } + + operator string_type() const + { + return matched ? string_type(this->first, this->second) : string_type(); + } + + string_type str() const + { + return matched ? string_type(this->first, this->second) : string_type(); + } + + int compare(const sub_match &s) const + { + return str().compare(s.str()); + } + + int compare(const string_type &s) const + { + return str().compare(s); + } + + int compare(const value_type *const s) const + { + return str().compare(s); + } +}; + +// 28.9.2, sub_match non-member operators: +// [7.9.2] sub_match non-member operators + +// Compares sub_match & with sub_match &. +template +bool operator==(const sub_match &lhs, const sub_match &rhs) +{ + return lhs.compare(rhs) == 0; // 1 +} + +template +bool operator!=(const sub_match &lhs, const sub_match &rhs) +{ + return lhs.compare(rhs) != 0; // 2 +} + +template +bool operator<(const sub_match &lhs, const sub_match &rhs) +{ + return lhs.compare(rhs) < 0; // 3 +} + +template +bool operator<=(const sub_match &lhs, const sub_match &rhs) +{ + return lhs.compare(rhs) <= 0; // 4 +} + +template +bool operator>=(const sub_match &lhs, const sub_match &rhs) +{ + return lhs.compare(rhs) >= 0; // 5 +} + +template +bool operator>(const sub_match &lhs, const sub_match &rhs) +{ + return lhs.compare(rhs) > 0; // 6 +} + +// Compares basic_string & with sub_match &. +template +bool operator==( + const std::basic_string::value_type, ST, SA> &lhs, + const sub_match &rhs +) +{ + return rhs.compare(lhs.c_str()) == 0; // 7 +} + +template +bool operator!=( + const std::basic_string::value_type, ST, SA> &lhs, + const sub_match &rhs +) +{ + return !(lhs == rhs); // 8 +} + +template +bool operator<( + const std::basic_string::value_type, ST, SA> &lhs, + const sub_match &rhs +) +{ + return rhs.compare(lhs.c_str()) > 0; // 9 +} + +template +bool operator>( + const std::basic_string::value_type, ST, SA> &lhs, + const sub_match &rhs +) +{ + return rhs < lhs; // 10 +} + +template +bool operator>=( + const std::basic_string::value_type, ST, SA> &lhs, + const sub_match &rhs +) +{ + return !(lhs < rhs); // 11 +} + +template +bool operator<=( + const std::basic_string::value_type, ST, SA> &lhs, + const sub_match &rhs +) +{ + return !(rhs < lhs); // 12 +} + +// Compares sub_match & with basic_string &. +template +bool operator==( + const sub_match &lhs, + const std::basic_string::value_type, ST, SA> &rhs +) +{ + return lhs.compare(rhs.c_str()) == 0; // 13 +} + +template +bool operator!=( + const sub_match &lhs, + const std::basic_string::value_type, ST, SA> &rhs +) +{ + return !(lhs == rhs); // 14 +} + +template +bool operator<( + const sub_match &lhs, + const std::basic_string::value_type, ST, SA> &rhs +) +{ + return lhs.compare(rhs.c_str()) < 0; // 15 +} + +template +bool operator>( + const sub_match &lhs, + const std::basic_string::value_type, ST, SA> &rhs +) +{ + return rhs < lhs; // 16 +} + +template +bool operator>=( + const sub_match &lhs, + const std::basic_string::value_type, ST, SA> &rhs +) +{ + return !(lhs < rhs); // 17 +} + +template +bool operator<=( + const sub_match &lhs, + const std::basic_string::value_type, ST, SA> &rhs +) +{ + return !(rhs < lhs); // 18 +} + +// Compares iterator_traits::value_type * with sub_match &. +template +bool operator==( + typename std::iterator_traits::value_type const *lhs, + const sub_match &rhs +) +{ + return rhs.compare(lhs) == 0; // 19 +} + +template +bool operator!=( + typename std::iterator_traits::value_type const *lhs, + const sub_match &rhs +) +{ + return !(lhs == rhs); // 20 +} + +template +bool operator<( + typename std::iterator_traits::value_type const *lhs, + const sub_match &rhs +) +{ + return rhs.compare(lhs) > 0; // 21 +} + +template +bool operator>( + typename std::iterator_traits::value_type const *lhs, + const sub_match &rhs +) +{ + return rhs < lhs; // 22 +} + +template +bool operator>=( + typename std::iterator_traits::value_type const *lhs, + const sub_match &rhs +) +{ + return !(lhs < rhs); // 23 +} + +template +bool operator<=( + typename std::iterator_traits::value_type const *lhs, + const sub_match &rhs +) +{ + return !(rhs < lhs); // 24 +} + +// Compares sub_match & with iterator_traits::value_type *. +template +bool operator==( + const sub_match &lhs, + typename std::iterator_traits::value_type const *rhs +) +{ + return lhs.compare(rhs) == 0; // 25 +} + +template +bool operator!=( + const sub_match &lhs, + typename std::iterator_traits::value_type const *rhs +) +{ + return !(lhs == rhs); // 26 +} + +template +bool operator<( + const sub_match &lhs, + typename std::iterator_traits::value_type const *rhs +) +{ + return lhs.compare(rhs) < 0; // 27 +} + +template +bool operator>( + const sub_match &lhs, + typename std::iterator_traits::value_type const *rhs +) +{ + return rhs < lhs; // 28 +} + +template +bool operator>=( + const sub_match &lhs, + typename std::iterator_traits::value_type const *rhs +) +{ + return !(lhs < rhs); // 29 +} + +template +bool operator<=( + const sub_match &lhs, + typename std::iterator_traits::value_type const *rhs +) +{ + return !(rhs < lhs); // 30 +} + +// Compares iterator_traits::value_type & with sub_match &. +template +bool operator==( + typename std::iterator_traits::value_type const &lhs, + const sub_match &rhs +) +{ + return rhs.compare(typename sub_match::string_type(1, lhs)) == 0; // 31 +} + +template +bool operator!=( + typename std::iterator_traits::value_type const &lhs, + const sub_match &rhs +) +{ + return !(lhs == rhs); // 32 +} + +template +bool operator<( + typename std::iterator_traits::value_type const &lhs, + const sub_match &rhs +) +{ + return rhs.compare(typename sub_match::string_type(1, lhs)) > 0; // 33 +} + +template +bool operator>( + typename std::iterator_traits::value_type const &lhs, + const sub_match &rhs +) +{ + return rhs < lhs; // 34 +} + +template +bool operator>=( + typename std::iterator_traits::value_type const &lhs, + const sub_match &rhs +) +{ + return !(lhs < rhs); // 35 +} + +template +bool operator<=( + typename std::iterator_traits::value_type const &lhs, + const sub_match &rhs +) +{ + return !(rhs < lhs); // 36 +} + +// Compares sub_match & with iterator_traits::value_type &. +template +bool operator==( + const sub_match &lhs, + typename std::iterator_traits::value_type const &rhs +) +{ + return lhs.compare(typename sub_match::string_type(1, rhs)) == 0; // 37 +} + +template +bool operator!=( + const sub_match &lhs, + typename std::iterator_traits::value_type const &rhs +) +{ + return !(lhs == rhs); // 38 +} + +template +bool operator<( + const sub_match &lhs, + typename std::iterator_traits::value_type const &rhs +) +{ + return lhs.compare(typename sub_match::string_type(1, rhs)) < 0; // 39 +} + +template +bool operator>( + const sub_match &lhs, + typename std::iterator_traits::value_type const &rhs +) +{ + return rhs < lhs; // 40 +} + +template +bool operator>=( + const sub_match &lhs, + typename std::iterator_traits::value_type const &rhs +) +{ + return !(lhs < rhs); // 41 +} + +template +bool operator<=( + const sub_match &lhs, + typename std::iterator_traits::value_type const &rhs +) +{ + return !(rhs < lhs); // 42 +} + +template +std::basic_ostream &operator<<(std::basic_ostream &os, const sub_match &m) +{ + return (os << m.str()); +} + +typedef sub_match csub_match; +typedef sub_match wcsub_match; +typedef sub_match ssub_match; +typedef sub_match wssub_match; + +#if defined(SRELL_CPP11_CHAR1632_ENABLED) + typedef sub_match u16csub_match; + typedef sub_match u32csub_match; + typedef sub_match u16ssub_match; + typedef sub_match u32ssub_match; +#endif + +#if defined(SRELL_CPP20_CHAR8_ENABLED) + typedef sub_match u8csub_match; +#endif +#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2 + typedef sub_match u8ssub_match; +#endif + +typedef csub_match u8ccsub_match; +typedef ssub_match u8cssub_match; +#if !defined(SRELL_CPP20_CHAR8_ENABLED) + typedef u8ccsub_match u8csub_match; +#endif +#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2 + typedef u8cssub_match u8ssub_match; +#endif + +#if defined(WCHAR_MAX) + #if WCHAR_MAX >= 0x10ffff + typedef wcsub_match u32wcsub_match; + typedef wssub_match u32wssub_match; + typedef u32wcsub_match u1632wcsub_match; + typedef u32wssub_match u1632wssub_match; + #elif WCHAR_MAX >= 0xffff + typedef wcsub_match u16wcsub_match; + typedef wssub_match u16wssub_match; + typedef u16wcsub_match u1632wcsub_match; + typedef u16wssub_match u1632wssub_match; + #endif +#endif + +// ... "regex_sub_match.hpp"] +// ["regex_match_results.hpp" ... + +// 28.10, class template match_results: +template > > +class match_results +{ +public: + + typedef sub_match value_type; + typedef const value_type & const_reference; + typedef const_reference reference; +// typedef implementation defined const_iterator; + typedef typename std::vector::const_iterator const_iterator; + typedef const_iterator iterator; + typedef typename std::iterator_traits::difference_type difference_type; + +#if defined(__cplusplus) && __cplusplus >= 201103L + typedef typename std::allocator_traits::size_type size_type; +#else + typedef typename Allocator::size_type size_type; // TR1. +#endif + + typedef Allocator allocator_type; + typedef typename std::iterator_traits::value_type char_type; + typedef std::basic_string string_type; + +public: + + // 28.10.1, construct/copy/destroy: + // [7.10.1] construct/copy/destroy + explicit match_results(const Allocator &a = Allocator()) : ready_(false), sub_matches_(a) + { + } + + match_results(const match_results &m) + { + operator=(m); + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + match_results(match_results &&m) SRELL_NOEXCEPT + { + operator=(std::move(m)); + } +#endif + + match_results &operator=(const match_results &m) + { + if (this != &m) + { +// this->sstate_ = m.sstate_; + this->ready_ = m.ready_; + this->sub_matches_ = m.sub_matches_; + this->prefix_ = m.prefix_; + this->suffix_ = m.suffix_; + this->base_ = m.base_; +#if !defined(SRELL_NO_NAMEDCAPTURE) + this->gnames_ = m.gnames_; +#endif + } + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + match_results &operator=(match_results &&m) SRELL_NOEXCEPT + { + if (this != &m) + { +// this->sstate_ = std::move(m.sstate_); + this->ready_ = m.ready_; + this->sub_matches_ = std::move(m.sub_matches_); + this->prefix_ = std::move(m.prefix_); + this->suffix_ = std::move(m.suffix_); + this->base_ = m.base_; +#if !defined(SRELL_NO_NAMEDCAPTURE) + this->gnames_ = std::move(m.gnames_); +#endif + } + return *this; + } +#endif + +// ~match_results(); + + // 28.10.2, state: + bool ready() const + { + return ready_; + } + + // 28.10.3, size: + // [7.10.2] size + size_type size() const + { + return sub_matches_.size(); + } + + size_type max_size() const + { + return sub_matches_.max_size(); +// return static_cast(~0) / sizeof (value_type); + } + + bool empty() const + { + return size() == 0; + } + + // 28.10.4, element access: + // [7.10.3] element access + difference_type length(const size_type sub = 0) const + { + return (*this)[sub].length(); + } + + difference_type position(const size_type sub = 0) const + { + const_reference ref = (*this)[sub]; + + return std::distance(base_, ref.first); + } + + string_type str(const size_type sub = 0) const + { + return string_type((*this)[sub]); + } + + const_reference operator[](const size_type n) const + { +#if defined(SRELL_STRICT_IMPL) + return n < sub_matches_.size() ? sub_matches_[n] : unmatched_; +#else + return sub_matches_[n]; +#endif + } + +#if !defined(SRELL_NO_NAMEDCAPTURE) + + // Helpers for overload resolution of the integer literal 0 of signed types. + template + difference_type length(const IntegerType zero) const + { + return length(static_cast(zero)); + } + template + difference_type position(const IntegerType zero) const + { + return position(static_cast(zero)); + } + template + string_type str(const IntegerType zero) const + { + return str(static_cast(zero)); + } + template + const_reference operator[](const IntegerType zero) const + { + return operator[](static_cast(zero)); + } + + difference_type length(const string_type &sub) const + { + return (*this)[sub].length(); + } + + difference_type position(const string_type &sub) const + { + const_reference ref = (*this)[sub]; + + return std::distance(base_, ref.first); + } + + string_type str(const string_type &sub) const + { + return string_type((*this)[sub]); + } + + const_reference operator[](const string_type &sub) const + { + return sub_matches_[lookup_and_check_backref_number(sub.c_str(), sub.c_str() + sub.size())]; + } + + difference_type length(const char_type *sub) const + { + return (*this)[sub].length(); + } + + difference_type position(const char_type *sub) const + { + const_reference ref = (*this)[sub]; + + return std::distance(base_, ref.first); + } + + string_type str(const char_type *sub) const + { + return string_type((*this)[sub]); + } + + const_reference operator[](const char_type *sub) const + { + return sub_matches_[lookup_and_check_backref_number(sub, sub + std::char_traits::length(sub))]; + } + +#endif // !defined(SRELL_NO_NAMEDCAPTURE) + + const_reference prefix() const + { + return prefix_; + } + + const_reference suffix() const + { + return suffix_; + } + + const_iterator begin() const + { + return sub_matches_.begin(); + } + + const_iterator end() const + { + return sub_matches_.end(); + } + + const_iterator cbegin() const + { + return sub_matches_.begin(); + } + + const_iterator cend() const + { + return sub_matches_.end(); + } + + // 28.10.5, format: + // [7.10.4] format + template + OutputIter format( + OutputIter out, + const char_type *fmt_first, + const char_type *const fmt_last, + regex_constants::match_flag_type /* flags */ = regex_constants::format_default + ) const + { + if (this->ready() && !this->empty()) + { +#if !defined(SRELL_NO_NAMEDCAPTURE) + const bool no_groupnames = gnames_.size() == 0; +#endif + const value_type &m0 = (*this)[0]; + + while (fmt_first != fmt_last) + { + if (*fmt_first != static_cast(regex_internal::meta_char::mc_dollar)) // '$' + { + *out++ = *fmt_first++; + } + else + { + ++fmt_first; + if (fmt_first == fmt_last) + { + *out++ = regex_internal::meta_char::mc_dollar; // '$'; + } + else if (*fmt_first == static_cast(regex_internal::char_other::co_amp)) // '&', $& + { + out = std::copy(m0.first, m0.second, out); + ++fmt_first; + } + else if (*fmt_first == static_cast(regex_internal::char_other::co_grav)) // '`', $`, prefix. + { + out = std::copy(this->prefix().first, this->prefix().second, out); + ++fmt_first; + } + else if (*fmt_first == static_cast(regex_internal::char_other::co_apos)) // '\'', $', suffix. + { + out = std::copy(this->suffix().first, this->suffix().second, out); + ++fmt_first; + } +#if !defined(SRELL_NO_NAMEDCAPTURE) + else if (*fmt_first == static_cast(regex_internal::meta_char::mc_lt) && !no_groupnames) // '<', $< + { + const char_type *const current_backup = fmt_first; + bool replaced = false; + + if (++fmt_first == fmt_last) + ; // Do nothing. + else + { + const char_type *const name_begin = fmt_first; + + for (;; ++fmt_first) + { + if (*fmt_first == static_cast(regex_internal::meta_char::mc_gt)) + { + const regex_internal::uint_l32 backref_number = lookup_backref_number(name_begin, fmt_first); + + if (backref_number != regex_internal::groupname_mapper::notfound) + { + const value_type &mn = (*this)[backref_number]; + + if (mn.matched) + out = std::copy(mn.first, mn.second, out); +// replaced = true; + } + replaced = true; + ++fmt_first; + break; + } + if (fmt_first == fmt_last) + break; + } + } + if (!replaced) + { + fmt_first = current_backup; + *out++ = regex_internal::meta_char::mc_dollar; // '$'; + } + } +#endif // !defined(SRELL_NO_NAMEDCAPTURE) + else + { + const char_type *const backup_pos = fmt_first; + size_type backref_number = 0; + + if (fmt_first != fmt_last && *fmt_first >= static_cast(regex_internal::char_alnum::ch_0) && *fmt_first <= static_cast(regex_internal::char_alnum::ch_9)) // '0'-'9' + { + backref_number += *fmt_first - regex_internal::char_alnum::ch_0; // '0'; + + if (++fmt_first != fmt_last && *fmt_first >= static_cast(regex_internal::char_alnum::ch_0) && *fmt_first <= static_cast(regex_internal::char_alnum::ch_9)) // '0'-'9' + { + backref_number *= 10; + backref_number += *fmt_first - regex_internal::char_alnum::ch_0; // '0'; + ++fmt_first; + } + } + + if (backref_number && backref_number < this->size()) + { + const value_type &mn = (*this)[backref_number]; + + if (mn.matched) + out = std::copy(mn.first, mn.second, out); + } + else + { + *out++ = regex_internal::meta_char::mc_dollar; // '$'; + + fmt_first = backup_pos; + if (*fmt_first == static_cast(regex_internal::meta_char::mc_dollar)) + ++fmt_first; + } + } + } + } + } + return out; + } + + template + OutputIter format( + OutputIter out, + const std::basic_string &fmt, + regex_constants::match_flag_type flags = regex_constants::format_default + ) const + { + return format(out, fmt.data(), fmt.data() + fmt.size(), flags); + } + + template + std::basic_string format( + const string_type &fmt, + regex_constants::match_flag_type flags = regex_constants::format_default + ) const + { + std::basic_string result; + +// format(std::back_insert_iterator(result), fmt, flags); + format(std::back_inserter(result), fmt, flags); + return result; + } + + string_type format(const char_type *fmt, regex_constants::match_flag_type flags = regex_constants::format_default) const + { + string_type result; + + format(std::back_inserter(result), fmt, fmt + std::char_traits::length(fmt), flags); + return result; + } + + // 28.10.6, allocator: + // [7.10.5] allocator + allocator_type get_allocator() const + { + return allocator_type(); + } + + // 28.10.7, swap: + // [7.10.6] swap + void swap(match_results &that) + { + const match_results tmp(that); + that = *this; + *this = tmp; + } + +public: // For internal. + + typedef match_results match_results_type; + typedef typename match_results_type::size_type match_results_size_type; + typedef typename regex_internal::re_search_state search_state_type; + + search_state_type sstate_; + + void clear_() + { + ready_ = false; + sub_matches_.clear(); +// prefix_.matched = false; +// suffix_.matched = false; +#if !defined(SRELL_NO_NAMEDCAPTURE) + gnames_.clear(); +#endif + } + +// template +#if !defined(SRELL_NO_NAMEDCAPTURE) + bool set_match_results_(const regex_internal::groupname_mapper &gnames) +#else + bool set_match_results_() +#endif + { + sub_matches_.resize(sstate_.bracket.size()); +// value_type &m0 = sub_matches_[0]; + + sub_matches_[0].matched = true; + + for (regex_internal::uint_l32 i = 1; i < static_cast(sstate_.bracket.size()); ++i) + { + const typename search_state_type::submatch_type &br = sstate_.bracket[i]; + value_type &sm = sub_matches_[i]; + + sm.first = br.core.open_at; + sm.second = br.core.close_at; + sm.matched = br.counter != 0; + } + + base_ = sstate_.lblim; + prefix_.first = sstate_.srchbegin; + prefix_.second = sub_matches_[0].first = sstate_.bracket[0].core.open_at; + suffix_.first = sub_matches_[0].second = sstate_.nth.in_string; + suffix_.second = sstate_.srchend; + + prefix_.matched = prefix_.first != prefix_.second; // The spec says prefix().first != prefix().second + suffix_.matched = suffix_.first != suffix_.second; // The spec says suffix().first != suffix().second + +#if !defined(SRELL_NO_NAMEDCAPTURE) + gnames_ = gnames; +#endif + ready_ = true; + return true; + } + + bool set_match_results_bmh_() + { + sub_matches_.resize(1); +// value_type &m0 = sub_matches_[0]; + + sub_matches_[0].matched = true; + + base_ = sstate_.lblim; + prefix_.first = sstate_.srchbegin; + prefix_.second = sub_matches_[0].first = sstate_.nth.in_string; + suffix_.first = sub_matches_[0].second = sstate_.nextpos; + suffix_.second = sstate_.srchend; + + prefix_.matched = prefix_.first != prefix_.second; + suffix_.matched = suffix_.first != suffix_.second; + + ready_ = true; + return true; + } + + void set_prefix_first_(const BidirectionalIterator pf) + { + prefix_.first = pf; + } + + bool mark_as_failed_() + { + ready_ = true; // 30.11.2 and 3: Postconditions: m.ready() == true in all cases. + return false; + } + +private: + +#if !defined(SRELL_NO_NAMEDCAPTURE) + + regex_internal::uint_l32 lookup_backref_number(const char_type *begin, const char_type *const end) const + { + typename regex_internal::groupname_mapper::gname_string key(end - begin); + + for (std::size_t i = 0; begin != end; ++begin, ++i) + key[i] = *begin; + + return gnames_[key]; + } + + regex_internal::uint_l32 lookup_and_check_backref_number(const char_type *begin, const char_type *const end) const + { + const regex_internal::uint_l32 backrefno = lookup_backref_number(begin, end); + + if (backrefno == regex_internal::groupname_mapper::notfound) + throw regex_error(regex_constants::error_backref); + + return backrefno; + } + +#endif // !defined(SRELL_NO_NAMEDCAPTURE) + +public: // For debug. + + template + void print_sub_matches(const BasicRegexT &, const int) const; + void print_addresses(const value_type &, const char *const) const; + +private: + + typedef std::vector sub_match_array; + + bool ready_; + sub_match_array sub_matches_; + value_type prefix_; + value_type suffix_; + BidirectionalIterator base_; + +#if !defined(SRELL_NO_NAMEDCAPTURE) + regex_internal::groupname_mapper gnames_; +#endif +#if defined(SRELL_STRICT_IMPL) + value_type unmatched_; +#endif +}; + +// 28.10.7, match_results swap: +// [7.10.6] match_results swap +template +void swap( + match_results &m1, + match_results &m2 +) +{ + m1.swap(m2); +} + +// 28.10.8, match_results comparisons +template +bool operator==( + const match_results &m1, + const match_results &m2 +) +{ + if (!m1.ready() && !m2.ready()) + return true; + + if (m1.ready() && m2.ready()) + { + if (m1.empty() && m2.empty()) + return true; + + if (!m1.empty() && !m2.empty()) + { + return m1.prefix() == m2.prefix() && m1.size() == m2.size() && std::equal(m1.begin(), m1.end(), m2.begin()) && m1.suffix() == m2.suffix(); + } + } + return false; +} + +template +bool operator!=( + const match_results &m1, + const match_results &m2 +) +{ + return !(m1 == m2); +} + +typedef match_results cmatch; +typedef match_results wcmatch; +typedef match_results smatch; +typedef match_results wsmatch; + +#if defined(SRELL_CPP11_CHAR1632_ENABLED) + typedef match_results u16cmatch; + typedef match_results u32cmatch; + typedef match_results u16smatch; + typedef match_results u32smatch; +#endif + +#if defined(SRELL_CPP20_CHAR8_ENABLED) + typedef match_results u8cmatch; +#endif +#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2 + typedef match_results u8smatch; +#endif + +typedef cmatch u8ccmatch; +typedef smatch u8csmatch; +#if !defined(SRELL_CPP20_CHAR8_ENABLED) + typedef u8ccmatch u8cmatch; +#endif +#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2 + typedef u8csmatch u8smatch; +#endif + +#if defined(WCHAR_MAX) + #if WCHAR_MAX >= 0x10ffff + typedef wcmatch u32wcmatch; + typedef wsmatch u32wsmatch; + typedef u32wcmatch u1632wcmatch; + typedef u32wsmatch u1632wsmatch; + #elif WCHAR_MAX >= 0xffff + typedef wcmatch u16wcmatch; + typedef wsmatch u16wsmatch; + typedef u16wcmatch u1632wcmatch; + typedef u16wsmatch u1632wsmatch; + #endif +#endif + +// ... "regex_match_results.hpp"] +// ["rei_algorithm.hpp" ... + + namespace regex_internal + { + +template +class regex_object : public re_compiler +{ +public: + + template + bool search + ( + const BidirectionalIterator begin, + const BidirectionalIterator end, + const BidirectionalIterator lookbehind_limit, + match_results &results, + const regex_constants::match_flag_type flags /* = regex_constants::match_default */ + ) const + { + results.clear_(); + +// results.sstate_.template init(begin, end, lookbehind_limit, flags); + results.sstate_.init(begin, end, lookbehind_limit, flags); + + if (results.sstate_.match_continuous_flag()) + { + if (this->NFA_states.size()) + { + results.sstate_.set_entrypoint(this->NFA_states[0].next_state2); + goto DO_SEARCH; + } + } + else +#if !defined(SRELLDBG_NO_BMH) + if (this->bmdata) + { +#if !defined(SRELL_NO_ICASE) + if (!this->is_ricase() ? this->bmdata->do_casesensitivesearch(results.sstate_, typename std::iterator_traits::iterator_category()) : this->bmdata->do_icasesearch(results.sstate_, typename std::iterator_traits::iterator_category())) +#else + if (this->bmdata->do_casesensitivesearch(results.sstate_, typename std::iterator_traits::iterator_category())) +#endif + return results.set_match_results_bmh_(); + } + else +#endif + if (this->NFA_states.size()) + { + results.sstate_.set_entrypoint(this->NFA_states[0].next_state1); + + DO_SEARCH: + results.sstate_.init_for_automaton(this->number_of_brackets, this->number_of_counters, this->number_of_repeats); + +#if !defined(SRELL_NO_ICASE) + if (!this->is_ricase() ? do_search(results) : do_search(results)) +#else + if (do_search(results)) +#endif + { +#if !defined(SRELL_NO_NAMEDCAPTURE) + return results.set_match_results_(this->namedcaptures); +#else + return results.set_match_results_(); +#endif + } + } + return results.mark_as_failed_(); + } + +private: + + typedef typename traits::utf_traits utf_traits; + + template + bool do_search + ( + match_results &results + ) const + { + re_search_state &sstate = results.sstate_; + const BidirectionalIterator searchend = sstate.nth.in_string; + + for (;;) + { + const bool final = sstate.nextpos == searchend; + + sstate.nth.in_string = sstate.nextpos; + + if (!final) + { + +#ifdef SRELLDBG_NO_1STCHRCLS + utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend); +#else + { + #if !defined(SRELLDBG_NO_BITSET) + if (!this->firstchar_class_bs.test((*sstate.nextpos++) & utf_traits::bitsetmask)) + #else + const uchar32 firstchar = utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend); + + if (!this->firstchar_class.is_included(firstchar)) + #endif + continue; + } +#endif + } + // Even when final == true, we have to try for such expressions + // as "" =~ /^$/ or "..." =~ /$/. + +#if defined(SRELL_NO_LIMIT_COUNTER) + sstate.reset(/* first */); +#else + sstate.reset(/* first, */ this->limit_counter); +#endif + if (run_automaton(sstate /* , false */)) + return true; + + if (final) + break; + } + return false; + } + + template + struct casehelper + { + static T canonicalise(const T t) + { + return t; + } + }; + + template + struct casehelper + { + static T canonicalise(const T t) + { + return unicode_case_folding::do_casefolding(t); + } + }; + + template + bool run_automaton + ( +// match_results &results, + re_search_state &sstate +// , const bool is_recursive /* = false */ + ) const + { + typedef casehelper casehelper_type; + typedef typename re_object_core::state_type state_type; + typedef re_search_state ss_type; +// typedef typename ss_type::search_core_state scstate_type; + typedef typename ss_type::submatch_type submatch_type; + typedef typename ss_type::submatchcore_type submatchcore_type; + typedef typename ss_type::counter_type counter_type; + typedef typename ss_type::position_type position_type; + bool is_matched; + + goto START; + + JUDGE: + if (is_matched) + { + MATCHED: + sstate.nth.in_NFA_states = sstate.nth.in_NFA_states->next_state1; + } + else + { + NOT_MATCHED: + +#if !defined(SRELL_NO_LIMIT_COUNTER) + if (--sstate.failure_counter) + { +#endif + if (sstate.bt_stack.size() > sstate.btstack_size) + { + sstate.nth = sstate.bt_stack.back(); + sstate.bt_stack.pop_back(); + + sstate.nth.in_NFA_states = sstate.nth.in_NFA_states->next_state2; +// continue; + } + else + { + return false; + } +#if !defined(SRELL_NO_LIMIT_COUNTER) + } + else + throw regex_error(regex_constants::error_complexity); +#endif + } + +// START: + for (;;) + { + START: + const state_type ¤t_NFA = *sstate.nth.in_NFA_states; + + switch (current_NFA.type) + { + case st_character: + +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(push) +#pragma warning(disable:4127) +#endif + if (!reverse) +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(pop) +#endif + { + if (!sstate.is_at_srchend()) + { +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + const BidirectionalIterator prevpos = sstate.nth.in_string; +#endif + const uchar32 uchar = casehelper_type::canonicalise(utf_traits::codepoint_inc(sstate.nth.in_string, sstate.srchend)); + RETRY_CF: + const state_type ¤t_NFA2 = *sstate.nth.in_NFA_states; + + if (current_NFA2.character == uchar) + goto MATCHED; + +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + if (current_NFA2.next_state2) + { + sstate.nth.in_NFA_states = current_NFA2.next_state2; + + if (sstate.nth.in_NFA_states->type == st_character) + goto RETRY_CF; + + sstate.nth.in_string = prevpos; + continue; + } +#endif + } +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + else if (current_NFA.next_state2) + { + sstate.nth.in_NFA_states = current_NFA.next_state2; + continue; + } +#endif + } + else // reverse == true. + { + if (!sstate.is_at_lookbehindlimit()) + { +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + const BidirectionalIterator prevpos = sstate.nth.in_string; +#endif + const uchar32 uchar = casehelper_type::canonicalise(utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim)); + RETRY_CB: + const state_type ¤t_NFA2 = *sstate.nth.in_NFA_states; + + if (current_NFA2.character == uchar) + goto MATCHED; + +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + if (current_NFA2.next_state2) + { + sstate.nth.in_NFA_states = current_NFA2.next_state2; + + if (sstate.nth.in_NFA_states->type == st_character) + goto RETRY_CB; + + sstate.nth.in_string = prevpos; + continue; + } +#endif + } +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + else if (current_NFA.next_state2) + { + sstate.nth.in_NFA_states = current_NFA.next_state2; + continue; + } +#endif + } + goto NOT_MATCHED; + + case st_character_class: + +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(push) +#pragma warning(disable:4127) +#endif + if (!reverse) +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(pop) +#endif + { + if (!sstate.is_at_srchend()) + { +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + const BidirectionalIterator prevpos = sstate.nth.in_string; +#endif + const uchar32 uchar = utf_traits::codepoint_inc(sstate.nth.in_string, sstate.srchend); +// RETRY_CCF: + const state_type ¤t_NFA2 = *sstate.nth.in_NFA_states; + +#if !defined(SRELLDBG_NO_CCPOS) + if (this->character_class.is_included(current_NFA2.quantifier.offset, current_NFA2.quantifier.length, uchar)) +#else + if (this->character_class.is_included(current_NFA2.number, uchar)) +#endif + goto MATCHED; + +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + if (current_NFA2.next_state2) + { + sstate.nth.in_NFA_states = current_NFA2.next_state2; + +// if (sstate.nth.in_NFA_states->type == st_character_class) +// goto RETRY_CCF; + + sstate.nth.in_string = prevpos; + continue; + } +#endif + } +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + else if (current_NFA.next_state2) + { + sstate.nth.in_NFA_states = current_NFA.next_state2; + continue; + } +#endif + } + else // reverse == true. + { + if (!sstate.is_at_lookbehindlimit()) + { +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + const BidirectionalIterator prevpos = sstate.nth.in_string; +#endif + const uchar32 uchar = utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim); +// RETRY_CCB: + const state_type ¤t_NFA2 = *sstate.nth.in_NFA_states; + +#if !defined(SRELLDBG_NO_CCPOS) + if (this->character_class.is_included(current_NFA2.quantifier.offset, current_NFA2.quantifier.length, uchar)) +#else + if (this->character_class.is_included(current_NFA2.number, uchar)) +#endif + goto MATCHED; + +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + if (current_NFA2.next_state2) + { + sstate.nth.in_NFA_states = current_NFA2.next_state2; + +// if (sstate.nth.in_NFA_states->type == st_character_class) +// goto RETRY_CCB; + + sstate.nth.in_string = prevpos; + continue; + } +#endif + } +#if !defined(SRELLDBG_NO_ASTERISK_OPT) + else if (current_NFA.next_state2) + { + sstate.nth.in_NFA_states = current_NFA.next_state2; + continue; + } +#endif + } + goto NOT_MATCHED; + + case st_epsilon: + +#if defined(SRELLDBG_NO_SKIP_EPSILON) + if (current_NFA.next_state2) +#endif + { + sstate.bt_stack.push_back(sstate.nth); // sstate.push(); + } + + sstate.nth.in_NFA_states = current_NFA.next_state1; + continue; + + default: + switch (current_NFA.type) + { + + case st_check_counter: + { + const uint_l32 counter = sstate.counter[current_NFA.number]; + + if (counter < current_NFA.quantifier.atmost) + { + ++sstate.counter[current_NFA.number]; + + LOOP_WITHOUT_INCREMENT: + + if (counter >= current_NFA.quantifier.atleast) + { + sstate.bt_stack.push_back(sstate.nth); + sstate.nth.in_NFA_states = current_NFA.next_state1; + } + else + { + sstate.nth.in_NFA_states + = current_NFA.quantifier.is_greedy + ? current_NFA.next_state1 + : current_NFA.next_state2; + } + } + else + { + if (current_NFA.quantifier.is_infinity()) + goto LOOP_WITHOUT_INCREMENT; + + sstate.nth.in_NFA_states + = current_NFA.quantifier.is_greedy + ? current_NFA.next_state2 + : current_NFA.next_state1; + } + } + continue; + + case st_decrement_counter: + --sstate.counter[current_NFA.number]; + goto NOT_MATCHED; + + case st_save_and_reset_counter: + { + counter_type &c = sstate.counter[current_NFA.number]; + + sstate.counter_stack.push_back(c); + sstate.bt_stack.push_back(sstate.nth); + c = 0; + } + goto MATCHED; + + case st_restore_counter: + sstate.counter[current_NFA.number] = sstate.counter_stack.back(); + sstate.counter_stack.pop_back(); + goto NOT_MATCHED; + + case st_roundbracket_open: // '(': + { + submatch_type &bracket = sstate.bracket[current_NFA.number]; + + sstate.capture_stack.push_back(bracket.core); + +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(push) +#pragma warning(disable:4127) +#endif + if (!reverse) +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(pop) +#endif + { + bracket.core.open_at = sstate.nth.in_string; + } + else + bracket.core.close_at = sstate.nth.in_string; + + ++bracket.counter; + + for (uint_l32 brno = current_NFA.quantifier.atleast; brno <= current_NFA.quantifier.atmost; ++brno) + { + submatch_type &inner_bracket = sstate.bracket[brno]; + + sstate.capture_stack.push_back(inner_bracket.core); + sstate.counter_stack.push_back(inner_bracket.counter); + inner_bracket.core.open_at = inner_bracket.core.close_at = sstate.srchend; + inner_bracket.counter = 0; + // ECMAScript spec (3-5.1) 15.10.2.5, NOTE 3. + // ECMAScript 2018 (ES9) 21.2.2.5.1, Note 3. + } + + sstate.bt_stack.push_back(sstate.nth); + } + goto MATCHED; + + case st_roundbracket_pop: // '/': + { + for (uint_l32 brno = current_NFA.quantifier.atmost; brno >= current_NFA.quantifier.atleast; --brno) + { + submatch_type &inner_bracket = sstate.bracket[brno]; + + inner_bracket.counter = sstate.counter_stack.back(); + inner_bracket.core = sstate.capture_stack.back(); + sstate.counter_stack.pop_back(); + sstate.capture_stack.pop_back(); + } + + submatch_type &bracket = sstate.bracket[current_NFA.number]; + + bracket.core = sstate.capture_stack.back(); + sstate.capture_stack.pop_back(); + --bracket.counter; + } + goto NOT_MATCHED; + + case st_roundbracket_close: // ')': + { + submatch_type &bracket = sstate.bracket[current_NFA.number]; + submatchcore_type &brc = bracket.core; + + if ((!reverse ? brc.open_at : brc.close_at) != sstate.nth.in_string) + { + sstate.nth.in_NFA_states = current_NFA.next_state1; + } + else // 0 width match, breaks from the loop. + { + if (current_NFA.next_state1->type != st_check_counter) + { + if (bracket.counter > 1) + goto NOT_MATCHED; // ECMAScript spec 15.10.2.5, note 4. + + sstate.nth.in_NFA_states = current_NFA.next_state2; + // Accepts 0 width match and exits. + } + else + { + // A pair with check_counter. + const counter_type counter = sstate.counter[current_NFA.next_state1->number]; + + if (counter > current_NFA.next_state1->quantifier.atleast) + goto NOT_MATCHED; // Takes a captured string in the previous loop. + + sstate.nth.in_NFA_states = current_NFA.next_state1; + // Accepts 0 width match and continues. + } + } +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(push) +#pragma warning(disable:4127) +#endif + if (!reverse) +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(pop) +#endif + { + brc.close_at = sstate.nth.in_string; + } + else // reverse == true. + { + brc.open_at = sstate.nth.in_string; + } + } + continue; + + case st_repeat_in_push: + { + position_type &r = sstate.repeat[current_NFA.number]; + + sstate.repeat_stack.push_back(r); + r = sstate.nth.in_string; + + for (uint_l32 brno = current_NFA.quantifier.atleast; brno <= current_NFA.quantifier.atmost; ++brno) + { + submatch_type &inner_bracket = sstate.bracket[brno]; + + sstate.capture_stack.push_back(inner_bracket.core); + sstate.counter_stack.push_back(inner_bracket.counter); + inner_bracket.core.open_at = inner_bracket.core.close_at = sstate.srchend; + inner_bracket.counter = 0; + // ECMAScript 2019 (ES10) 21.2.2.5.1, Note 3. + } + sstate.bt_stack.push_back(sstate.nth); + } + goto MATCHED; + + case st_repeat_in_pop: + for (uint_l32 brno = current_NFA.quantifier.atmost; brno >= current_NFA.quantifier.atleast; --brno) + { + submatch_type &inner_bracket = sstate.bracket[brno]; + + inner_bracket.counter = sstate.counter_stack.back(); + inner_bracket.core = sstate.capture_stack.back(); + sstate.counter_stack.pop_back(); + sstate.capture_stack.pop_back(); + } + + sstate.repeat[current_NFA.number] = sstate.repeat_stack.back(); + sstate.repeat_stack.pop_back(); + goto NOT_MATCHED; + + case st_check_0_width_repeat: + if (sstate.nth.in_string != sstate.repeat[current_NFA.number]) + goto MATCHED; + + sstate.nth.in_NFA_states = current_NFA.next_state2; + continue; + + case st_backreference: // '\\': + { + const submatch_type &bracket = sstate.bracket[current_NFA.number]; + + if (bracket.counter == 0) // Undefined. + { + ESCAPE_FROM_ZERO_WIDTH_MATCH: + sstate.nth.in_NFA_states = current_NFA.next_state2; + continue; + } + else + { + const submatchcore_type &brc = bracket.core; + + if (brc.open_at == brc.close_at) + { + goto ESCAPE_FROM_ZERO_WIDTH_MATCH; + } + else + { +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(push) +#pragma warning(disable:4127) +#endif + if (!reverse) +#if defined(_MSC_VER) && _MSC_VER >= 1400 +#pragma warning(pop) +#endif + { + for (BidirectionalIterator backrefpos = brc.open_at; backrefpos != brc.close_at;) + { + if (!sstate.is_at_srchend()) + { + const uchar32 uchartxt = utf_traits::codepoint_inc(sstate.nth.in_string, sstate.srchend); + const uchar32 ucharref = utf_traits::codepoint_inc(backrefpos, brc.close_at); + + if (casehelper_type::canonicalise(uchartxt) == casehelper_type::canonicalise(ucharref)) + continue; + } + goto NOT_MATCHED; + } + } + else // reverse == true. + { + for (BidirectionalIterator backrefpos = brc.close_at; backrefpos != brc.open_at;) + { + if (!sstate.is_at_lookbehindlimit()) + { + const uchar32 uchartxt = utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim); + const uchar32 ucharref = utf_traits::dec_codepoint(backrefpos, brc.open_at); + + if (casehelper_type::canonicalise(uchartxt) == casehelper_type::canonicalise(ucharref)) + continue; + } + goto NOT_MATCHED; + } + } + } + } + } + goto MATCHED; + + case st_lookaround_open: + { + for (uint_l32 i = 1; i < this->number_of_brackets; ++i) + { + const submatch_type &sm = sstate.bracket[i]; + sstate.capture_stack.push_back(sm.core); + sstate.counter_stack.push_back(sm.counter); + } + + for (uint_l32 i = 0; i < this->number_of_counters; ++i) + sstate.counter_stack.push_back(sstate.counter[i]); + + for (uint_l32 i = 0; i < this->number_of_repeats; ++i) + sstate.repeat_stack.push_back(sstate.repeat[i]); + + const typename ss_type::bottom_state backup_bottom(sstate.btstack_size, sstate.capture_stack.size(), sstate.counter_stack.size(), sstate.repeat_stack.size()); + const BidirectionalIterator orgpos = sstate.nth.in_string; + + sstate.btstack_size = sstate.bt_stack.size(); + +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER) + if (current_NFA.quantifier.atleast == 2) + { + sstate.repeat_stack.push_back(sstate.lblim); + sstate.lblim = sstate.srchbegin; + } +#endif + +#if defined(SRELL_FIXEDWIDTHLOOKBEHIND) + +// if (current_NFA.reverse) + { + for (uint_l32 i = 0; i < current_NFA.quantifier.atleast; ++i) + { + if (!sstate.is_at_lookbehindlimit()) + { + utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim); + continue; + } + is_matched = false; + goto AFTER_LOOKAROUND; + } + } +#endif + sstate.nth.in_NFA_states = current_NFA.next_state2; + +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) + is_matched = current_NFA.quantifier.atleast == 0 ? run_automaton(sstate /* , true */) : run_automaton(sstate /* , true */); +#else + is_matched = run_automaton(sstate /* , true */); +#endif + +#if defined(SRELL_FIXEDWIDTHLOOKBEHIND) + AFTER_LOOKAROUND: +#endif + { + +#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER) + if (current_NFA.quantifier.atleast == 2) + { + sstate.lblim = sstate.repeat_stack[backup_bottom.repeatstack_size]; + if (is_matched) + sstate.bracket[0].core.open_at = sstate.nth.in_string; + } +#endif + +#if defined(SRELL_ENABLE_GT) + if (current_NFA.character != meta_char::mc_gt) // '>' +#endif + { + sstate.nth.in_string = orgpos; + } + sstate.bt_stack.resize(sstate.btstack_size); + + sstate.btstack_size = backup_bottom.btstack_size; + sstate.capture_stack.resize(backup_bottom.capturestack_size); + sstate.counter_stack.resize(backup_bottom.counterstack_size); + sstate.repeat_stack.resize(backup_bottom.repeatstack_size); + + is_matched ^= current_NFA.is_not; + } + } + if (is_matched) + { + sstate.nth.in_NFA_states = current_NFA.next_state1; + continue; + } + +// case st_lookaround_pop: + for (uint_l32 i = this->number_of_repeats; i;) + { + sstate.repeat[--i] = sstate.repeat_stack.back(); + sstate.repeat_stack.pop_back(); + } + + for (uint_l32 i = this->number_of_counters; i;) + { + sstate.counter[--i] = sstate.counter_stack.back(); + sstate.counter_stack.pop_back(); + } + + for (uint_l32 i = this->number_of_brackets; i > 1;) + { + submatch_type &sm = sstate.bracket[--i]; + + sm.counter = sstate.counter_stack.back(); + sm.core = sstate.capture_stack.back(); + sstate.counter_stack.pop_back(); + sstate.capture_stack.pop_back(); + } + goto NOT_MATCHED; + + case st_bol: // '^': + if (sstate.is_at_lookbehindlimit() && !sstate.match_prev_avail_flag()) + { + if (!sstate.match_not_bol_flag()) + goto MATCHED; + } + // !sstate.is_at_lookbehindlimit() || sstate.match_prev_avail_flag() + else if (current_NFA.multiline) + { + const uchar32 prevchar = utf_traits::prevcodepoint(sstate.nth.in_string, sstate.lblim); + + if (this->character_class.is_included(re_character_class::newline, prevchar)) + goto MATCHED; + } + goto NOT_MATCHED; + + case st_eol: // '$': + if (sstate.is_at_srchend()) + { + if (!sstate.match_not_eol_flag()) + goto MATCHED; + } + else if (current_NFA.multiline) + { + const uchar32 nextchar = utf_traits::codepoint(sstate.nth.in_string, sstate.srchend); + + if (this->character_class.is_included(re_character_class::newline, nextchar)) + goto MATCHED; + } + goto NOT_MATCHED; + + case st_boundary: // '\b' '\B' + is_matched = current_NFA.is_not; +// is_matched = current_NFA.character == char_alnum::ch_B; + + // First, suppose the previous character is not \w but \W. + + if (sstate.is_at_srchend()) + { + if (sstate.match_not_eow_flag()) + is_matched = !is_matched; + } + else if (this->character_class.is_included(current_NFA.number, utf_traits::codepoint(sstate.nth.in_string, sstate.srchend))) + { + is_matched = !is_matched; + } + // \W/last \w + // \b false true + // \B true false + + // Second, if the actual previous character is \w, flip is_matched. + + if (sstate.is_at_lookbehindlimit() && !sstate.match_prev_avail_flag()) + { + if (sstate.match_not_bow_flag()) + is_matched = !is_matched; + } + // !sstate.is_at_lookbehindlimit() || sstate.match_prev_avail_flag() + else if (this->character_class.is_included(current_NFA.number, utf_traits::prevcodepoint(sstate.nth.in_string, sstate.lblim))) + { + is_matched = !is_matched; + } + // \b \B + // pre cur \W/last \w pre cur \W/last \w + // \W/base false true \W/base true false + // \w true false \w false true + + goto JUDGE; + + case st_success: // == lookaround_close. +// if (is_recursive) + if (sstate.btstack_size) + return true; + + if + ( + (!sstate.match_not_null_flag() || !sstate.is_null()) + && + (!sstate.match_match_flag() || sstate.is_at_srchend()) + ) + return true; + + goto NOT_MATCHED; + +#if !defined(SRELLDBG_NO_NEXTPOS_OPT) + case st_move_nextpos: +#if !defined(SRELLDBG_NO_1STCHRCLS) && !defined(SRELLDBG_NO_BITSET) + sstate.nextpos = sstate.nth.in_string; + if (!sstate.is_at_srchend()) + ++sstate.nextpos; +#else // defined(SRELLDBG_NO_1STCHRCLS) || defined(SRELLDBG_NO_BITSET) + if (sstate.nth.in_string != sstate.bracket[0].core.open_at) + { + sstate.nextpos = sstate.nth.in_string; + if (!sstate.is_at_srchend()) + utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend); + } +#endif + goto MATCHED; +#endif + + default: + // Reaching here means that this->NFA_states is corrupted. + throw regex_error(regex_constants::error_internal); + + } + } + } + } +}; +// regex_object + + } // namespace regex_internal + +// ... "rei_algorithm.hpp"] +// ["basic_regex.hpp" ... + +// 28.8, class template basic_regex: +template > +class basic_regex : public regex_internal::regex_object +{ +public: + + // Types: + typedef charT value_type; + typedef traits traits_type; + typedef typename traits::string_type string_type; + typedef regex_constants::syntax_option_type flag_type; + typedef typename traits::locale_type locale_type; + + // 28.8.1, constants: + // [7.8.1] constants + static const regex_constants::syntax_option_type icase = regex_constants::icase; + static const regex_constants::syntax_option_type nosubs = regex_constants::nosubs; + static const regex_constants::syntax_option_type optimize = regex_constants::optimize; + static const regex_constants::syntax_option_type collate = regex_constants::collate; + static const regex_constants::syntax_option_type ECMAScript = regex_constants::ECMAScript; + static const regex_constants::syntax_option_type basic = regex_constants::basic; + static const regex_constants::syntax_option_type extended = regex_constants::extended; + static const regex_constants::syntax_option_type awk = regex_constants::awk; + static const regex_constants::syntax_option_type grep = regex_constants::grep; + static const regex_constants::syntax_option_type egrep = regex_constants::egrep; + static const regex_constants::syntax_option_type multiline = regex_constants::multiline; + + static const regex_constants::syntax_option_type dotall = regex_constants::dotall; + static const regex_constants::syntax_option_type unicodesets = regex_constants::unicodesets; + + // 28.8.2, construct/copy/destroy: + // [7.8.2] construct/copy/destroy + basic_regex() + { + } + + explicit basic_regex(const charT *const p, const flag_type f = regex_constants::ECMAScript) + { + assign(p, p + std::char_traits::length(p), f); + } + + basic_regex(const charT *const p, const std::size_t len, const flag_type f = regex_constants::ECMAScript) + { + assign(p, p + len, f); + } + + basic_regex(const basic_regex &e) + { + assign(e); + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + basic_regex(basic_regex &&e) SRELL_NOEXCEPT + { + assign(std::move(e)); + } +#endif + + template + explicit basic_regex(const std::basic_string &p, const flag_type f = regex_constants::ECMAScript) + { + assign(p, f); + } + + template + basic_regex(ForwardIterator first, ForwardIterator last, const flag_type f = regex_constants::ECMAScript) + { + assign(first, last, f); + } + +#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED) + basic_regex(std::initializer_list il, const flag_type f = regex_constants::ECMAScript) + { + assign(il, f); + } +#endif + +// ~basic_regex(); + + basic_regex &operator=(const basic_regex &right) + { + return assign(right); + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + basic_regex &operator=(basic_regex &&e) SRELL_NOEXCEPT + { + return assign(std::move(e)); + } +#endif + + basic_regex &operator=(const charT *const ptr) + { + return assign(ptr); + } + +#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED) + basic_regex &operator=(std::initializer_list il) + { + return assign(il.begin(), il.end()); + } +#endif + + template + basic_regex &operator=(const std::basic_string &p) + { + return assign(p); + } + + // 28.8.3, assign: + // [7.8.3] assign + basic_regex &assign(const basic_regex &right) + { + regex_internal::re_object_core::operator=(right); + return *this; + } + +#if defined(SRELL_CPP11_MOVE_ENABLED) + basic_regex &assign(basic_regex &&right) SRELL_NOEXCEPT + { + regex_internal::re_object_core::operator=(std::move(right)); + return *this; + } +#endif + + basic_regex &assign(const charT *const ptr, const flag_type f = regex_constants::ECMAScript) + { + return assign(ptr, ptr + std::char_traits::length(ptr), f); + } + + basic_regex &assign(const charT *const p, std::size_t len, const flag_type f = regex_constants::ECMAScript) + { + return assign(p, p + len, f); + } + + template + basic_regex &assign(const std::basic_string &s, const flag_type f = regex_constants::ECMAScript) + { + return assign(s.c_str(), s.c_str() + s.size(), f); + } + + template + basic_regex &assign(InputIterator first, InputIterator last, const flag_type f = regex_constants::ECMAScript) + { +#if defined(SRELL_STRICT_IMPL) + basic_regex tmp; + tmp.compile(first, last, f); + tmp.swap(*this); +#else + this->compile(first, last, f); +#endif + return *this; + } + +#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED) + basic_regex &assign(std::initializer_list il, const flag_type f = regex_constants::ECMAScript) + { + return assign(il.begin(), il.end(), f); + } +#endif + + // 28.8.4, const operations: + // [7.8.4] const operations + unsigned mark_count() const + { + return this->number_of_brackets - 1; + } + + flag_type flags() const + { + return this->soflags; + } + + // 28.8.5, locale: + // [7.8.5] locale + locale_type imbue(locale_type loc) + { + return this->traits_inst.imbue(loc); + } + + locale_type getloc() const + { + return this->traits_inst.getloc(); + } + + // 28.8.6, swap: + // [7.8.6] swap + void swap(basic_regex &e) + { + regex_internal::re_object_core::swap(e); + } +}; +template + const regex_constants::syntax_option_type basic_regex::icase; +template + const regex_constants::syntax_option_type basic_regex::nosubs; +template + const regex_constants::syntax_option_type basic_regex::optimize; +template + const regex_constants::syntax_option_type basic_regex::collate; +template + const regex_constants::syntax_option_type basic_regex::ECMAScript; +template + const regex_constants::syntax_option_type basic_regex::basic; +template + const regex_constants::syntax_option_type basic_regex::extended; +template + const regex_constants::syntax_option_type basic_regex::awk; +template + const regex_constants::syntax_option_type basic_regex::grep; +template + const regex_constants::syntax_option_type basic_regex::egrep; +template + const regex_constants::syntax_option_type basic_regex::multiline; + +template + const regex_constants::syntax_option_type basic_regex::dotall; +template + const regex_constants::syntax_option_type basic_regex::unicodesets; + +// 28.8.6, basic_regex swap: +template +void swap(basic_regex &lhs, basic_regex &rhs) +{ + lhs.swap(rhs); +} + +typedef basic_regex regex; +typedef basic_regex wregex; + +#if defined(WCHAR_MAX) + #if WCHAR_MAX >= 0x10ffff + typedef wregex u32wregex; + typedef u32wregex u1632wregex; + #elif WCHAR_MAX >= 0xffff + typedef basic_regex > u16wregex; + typedef u16wregex u1632wregex; + #endif +#endif + +#if defined(SRELL_CPP20_CHAR8_ENABLED) + typedef basic_regex u8regex; +#endif + +typedef basic_regex > u8cregex; +#if !defined(SRELL_CPP20_CHAR8_ENABLED) + typedef u8cregex u8regex; +#endif + +#if defined(SRELL_CPP11_CHAR1632_ENABLED) + typedef basic_regex u16regex; + typedef basic_regex u32regex; +#endif + +// ... "basic_regex.hpp"] +// ["regex_iterator.hpp" ... + +// 28.12.1, class template regex_iterator: +template ::value_type, class traits = regex_traits > +class regex_iterator +{ +public: + + typedef basic_regex regex_type; + typedef match_results value_type; + typedef std::ptrdiff_t difference_type; + typedef const value_type * pointer; + typedef const value_type & reference; + typedef std::forward_iterator_tag iterator_category; + + regex_iterator() + { + // 28.12.1.1: Constructs an end-of-sequence iterator. + } + + regex_iterator( + const BidirectionalIterator a, + const BidirectionalIterator b, + const regex_type &re, + const regex_constants::match_flag_type m = regex_constants::match_default) + : begin(a), end(b), pregex(&re), flags(m) + { + regex_search(begin, end, begin, match, *pregex, flags); + // 28.12.1.1: If this call returns false the constructor + // sets *this to the end-of-sequence iterator. + } + + regex_iterator(const regex_iterator &that) + { + operator=(that); + } + + regex_iterator &operator=(const regex_iterator &that) + { + if (this != &that) + { + this->begin = that.begin; + this->end = that.end; + this->pregex = that.pregex; + this->flags = that.flags; + this->match = that.match; + } + return *this; + } + + bool operator==(const regex_iterator &right) const + { + // It is probably safe to assume that match.size() == 0 means + // end-of-sequence, because it happens only when 1) never tried + // regex_search, or 2) regex_search returned false. + + if (this->match.size() == 0 || right.match.size() == 0) + return this->match.size() == right.match.size(); + + return + this->begin == right.begin + && + this->end == right.end + && + this->pregex == right.pregex + && + this->flags == right.flags + && + this->match[0] == right.match[0]; + } + + bool operator!=(const regex_iterator &right) const + { + return !(*this == right); + } + + const value_type &operator*() const + { + return match; + } + + const value_type *operator->() const + { + return &match; + } + + regex_iterator &operator++() + { + if (this->match.size()) + { + BidirectionalIterator start = match[0].second; + + if (match[0].first == start) // The iterator holds a 0-length match. + { + if (start == end) + { + match.clear_(); + // 28.12.1.4.2: If the iterator holds a zero-length match and + // start == end the operator sets *this to the end-ofsequence + // iterator and returns *this. + } + else + { + // 28.12.1.4.3: Otherwise, if the iterator holds a zero-length match + // the operator calls regex_search(start, end, match, *pregex, flags + // | regex_constants::match_not_null | regex_constants::match_continuous). + // If the call returns true the operator returns *this. [Cont...] + + if (!regex_search(start, end, begin, match, *pregex, flags | regex_constants::match_not_null | regex_constants::match_continuous)) + { + const BidirectionalIterator prevend = start; + + // [...Cont] Otherwise the operator increments start and continues + // as if the most recent match was not a zero-length match. +// ++start; + utf_traits::codepoint_inc(start, end); + + flags |= regex_constants::match_prev_avail; + + if (regex_search(start, end, begin, match, *pregex, flags)) + { + // 28.12.1.4.5-6: In all cases in which the call to regex_search + // returns true, match.prefix().first shall be equal to the previous + // value of match[0].second, ... match[i].position() shall return + // distance(begin, match[i].first). + // This means that match[i].position() gives the offset from the + // beginning of the target sequence, which is often not the same as + // the offset from the sequence passed in the call to regex_search. + // + // To satisfy this: + match.set_prefix_first_(prevend); + } + } + } + } + else + { + // 28.12.1.4.4: If the most recent match was not a zero-length match, + // the operator sets flags to flags | regex_constants::match_prev_avail + // and calls regex_search(start, end, match, *pregex, flags). [Cont...] + flags |= regex_constants::match_prev_avail; + + regex_search(start, end, begin, match, *pregex, flags); + // [...Cont] If the call returns false the iterator sets *this to + // the end-of-sequence iterator. The iterator then returns *this. + // + // 28.12.1.4.5-6: In all cases in which the call to regex_search + // returns true, match.prefix().first shall be equal to the previous + // value of match[0].second, ... match[i].position() shall return + // distance(begin, match[i].first). + // This means that match[i].position() gives the offset from the + // beginning of the target sequence, which is often not the same as + // the offset from the sequence passed in the call to regex_search. + // + // These should already be done in regex_search. + } + } + return *this; + } + + regex_iterator operator++(int) + { + const regex_iterator tmp = *this; + ++(*this); + return tmp; + } + +private: + + BidirectionalIterator begin; + BidirectionalIterator end; + const regex_type *pregex; + regex_constants::match_flag_type flags; + match_results match; + + typedef typename traits::utf_traits utf_traits; +}; + +typedef regex_iterator cregex_iterator; +typedef regex_iterator wcregex_iterator; +typedef regex_iterator sregex_iterator; +typedef regex_iterator wsregex_iterator; + +#if defined(SRELL_CPP11_CHAR1632_ENABLED) + typedef regex_iterator u16cregex_iterator; + typedef regex_iterator u32cregex_iterator; + typedef regex_iterator u16sregex_iterator; + typedef regex_iterator u32sregex_iterator; +#endif + +#if defined(SRELL_CPP20_CHAR8_ENABLED) + typedef regex_iterator u8cregex_iterator; +#endif +#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2 + typedef regex_iterator u8sregex_iterator; +#endif + +typedef regex_iterator::value_type, u8regex_traits::value_type> > u8ccregex_iterator; +typedef regex_iterator::value_type, u8regex_traits::value_type> > u8csregex_iterator; +#if !defined(SRELL_CPP20_CHAR8_ENABLED) + typedef u8ccregex_iterator u8cregex_iterator; +#endif +#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2 + typedef u8csregex_iterator u8sregex_iterator; +#endif + +#if defined(WCHAR_MAX) + #if WCHAR_MAX >= 0x10ffff + typedef wcregex_iterator u32wcregex_iterator; + typedef wsregex_iterator u32wsregex_iterator; + typedef u32wcregex_iterator u1632wcregex_iterator; + typedef u32wsregex_iterator u1632wsregex_iterator; + #elif WCHAR_MAX >= 0xffff + typedef regex_iterator::value_type, u16regex_traits::value_type> > u16wcregex_iterator; + typedef regex_iterator::value_type, u16regex_traits::value_type> > u16wsregex_iterator; + typedef u16wcregex_iterator u1632wcregex_iterator; + typedef u16wsregex_iterator u1632wsregex_iterator; + #endif +#endif + +// ... "regex_iterator.hpp"] +// ["regex_algorithm.hpp" ... + +// 28.11.2, function template regex_match: +// [7.11.2] Function template regex_match +template +bool regex_match( + const BidirectionalIterator first, + const BidirectionalIterator last, + match_results &m, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return e.search(first, last, first, m, flags | regex_constants::match_continuous | regex_constants::match_match_); +} + +template +bool regex_match( + const BidirectionalIterator first, + const BidirectionalIterator last, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ +// 4 Effects: Behaves "as if" by constructing an instance of +// match_results what, and then returning the +// result of regex_match(first, last, what, e, flags). + + match_results what; + + return regex_match(first, last, what, e, flags); +} + +template +bool regex_match( + const charT *const str, + match_results &m, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_match(str, str + std::char_traits::length(str), m, e, flags); +} + +template +bool regex_match( + const std::basic_string &s, + match_results::const_iterator, Allocator> &m, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_match(s.begin(), s.end(), m, e, flags); +} + +template +bool regex_match( + const charT *const str, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_match(str, str + std::char_traits::length(str), e, flags); +} + +template +bool regex_match( + const std::basic_string &s, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_match(s.begin(), s.end(), e, flags); +} + +template +bool regex_search( + const BidirectionalIterator first, + const BidirectionalIterator last, + const BidirectionalIterator lookbehind_limit, + match_results &m, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return e.search(first, last, lookbehind_limit, m, flags); +} + +template +bool regex_search( + const BidirectionalIterator first, + const BidirectionalIterator last, + const BidirectionalIterator lookbehind_limit, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ +// 6 Effects: Behaves "as if" by constructing an object what of type +// match_results and then returning the result of +// regex_search(first, last, what, e, flags). + + match_results what; + return regex_search(first, last, lookbehind_limit, what, e, flags); +} + +// 28.11.3, function template regex_search: +// 7.11.3 regex_search [tr.re.alg.search] +template +bool regex_search( + const BidirectionalIterator first, + const BidirectionalIterator last, + match_results &m, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return e.search(first, last, first, m, flags); +} + +template +bool regex_search( + const BidirectionalIterator first, + const BidirectionalIterator last, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ +// 6 Effects: Behaves "as if" by constructing an object what of type +// match_results and then returning the result of +// regex_search(first, last, what, e, flags). + + match_results what; + return regex_search(first, last, what, e, flags); +} + +template +bool regex_search( + const charT *const str, + match_results &m, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_search(str, str + std::char_traits::length(str), m, e, flags); +} + +template +bool regex_search( + const charT *const str, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_search(str, str + std::char_traits::length(str), e, flags); +} + +template +bool regex_search( + const std::basic_string &s, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_search(s.begin(), s.end(), e, flags); +} + +template +bool regex_search( + const std::basic_string &s, + match_results::const_iterator, Allocator> &m, + const basic_regex &e, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + return regex_search(s.begin(), s.end(), m, e, flags); +} + +// 28.11.4, function template regex_replace: +// [7.11.4] Function template regex_replace +template +OutputIterator regex_replace( + OutputIterator out, + const BidirectionalIterator first, + const BidirectionalIterator last, + const basic_regex &e, + const std::basic_string &fmt, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + typedef regex_iterator iterator_type; + + const bool do_copy = !(flags & regex_constants::format_no_copy); + const iterator_type eos; + iterator_type i(first, last, e, flags); + typename iterator_type::value_type::value_type last_m_suffix; + + last_m_suffix.first = first; + last_m_suffix.second = last; + + for (; i != eos; ++i) + { + if (do_copy) + out = std::copy(i->prefix().first, i->prefix().second, out); + + out = i->format(out, fmt, flags); + last_m_suffix = i->suffix(); + + if (flags & regex_constants::format_first_only) + break; + } + + if (do_copy) + out = std::copy(last_m_suffix.first, last_m_suffix.second, out); + + return out; +} + +template +OutputIterator regex_replace( + OutputIterator out, + const BidirectionalIterator first, + const BidirectionalIterator last, + const basic_regex &e, + const charT *const fmt, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + // Strictly speaking, this should be implemented as a version different + // from the above with changing the line i->format(out, fmt, flags) to + // i->format(out, fmt, fmt + char_traits::length(fmt), flags). + + const std::basic_string fs(fmt, fmt + std::char_traits::length(fmt)); + + return regex_replace(out, first, last, e, fs, flags); +} + +template +std::basic_string regex_replace( + const std::basic_string &s, + const basic_regex &e, + const std::basic_string &fmt, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + std::basic_string result; + + regex_replace(std::back_inserter(result), s.begin(), s.end(), e, fmt, flags); + return result; +} + +template +std::basic_string regex_replace( + const std::basic_string &s, + const basic_regex &e, + const charT *const fmt, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + std::basic_string result; + + regex_replace(std::back_inserter(result), s.begin(), s.end(), e, fmt, flags); + return result; +} + +template +std::basic_string regex_replace( + const charT *const s, + const basic_regex &e, + const std::basic_string &fmt, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + std::basic_string result; + + regex_replace(std::back_inserter(result), s, s + std::char_traits::length(s), e, fmt, flags); + return result; +} + +template +std::basic_string regex_replace( + const charT *const s, + const basic_regex &e, + const charT *const fmt, + const regex_constants::match_flag_type flags = regex_constants::match_default +) +{ + std::basic_string result; + + regex_replace(std::back_inserter(result), s, s + std::char_traits::length(s), e, fmt, flags); + return result; +} + +// ... "regex_algorithm.hpp"] +// ["regex_token_iterator.hpp" ... + +// 28.12.2, class template regex_token_iterator: +template ::value_type, class traits = regex_traits > +class regex_token_iterator +{ +public: + + typedef basic_regex regex_type; + typedef sub_match value_type; + typedef std::ptrdiff_t difference_type; + typedef const value_type * pointer; + typedef const value_type & reference; + typedef std::forward_iterator_tag iterator_category; + + regex_token_iterator() : result(NULL) + { + // Constructs the end-of-sequence iterator. + } + + regex_token_iterator( + const BidirectionalIterator a, + const BidirectionalIterator b, + const regex_type &re, + int submatch = 0, + regex_constants::match_flag_type m = regex_constants::match_default + ) : position(a, b, re, m), result(NULL), subs(1, submatch) + { + post_constructor(a, b); + } + + regex_token_iterator( + const BidirectionalIterator a, + const BidirectionalIterator b, + const regex_type &re, + const std::vector &submatches, + regex_constants::match_flag_type m = regex_constants::match_default + ) : position(a, b, re, m), result(NULL), subs(submatches) + { + post_constructor(a, b); + } + +#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED) + regex_token_iterator( + const BidirectionalIterator a, + const BidirectionalIterator b, + const regex_type &re, + std::initializer_list submatches, + regex_constants::match_flag_type m = regex_constants::match_default + ) : position(a, b, re, m), result(NULL), subs(submatches) + { + post_constructor(a, b); + } +#endif + + template // Was R in TR1. + regex_token_iterator( + const BidirectionalIterator a, + const BidirectionalIterator b, + const regex_type &re, + const int (&submatches)[N], + regex_constants::match_flag_type m = regex_constants::match_default + ) : position(a, b, re, m), result(NULL), subs(submatches, submatches + N) + { + post_constructor(a, b); + } + + regex_token_iterator(const regex_token_iterator &that) + { + operator=(that); + } + + regex_token_iterator &operator=(const regex_token_iterator &that) + { + if (this != &that) + { + this->position = that.position; + this->result = that.result; + this->suffix = that.suffix; + this->N = that.N; + this->subs = that.subs; + } + return *this; + } + + bool operator==(const regex_token_iterator &right) + { + if (this->result == NULL || right.result == NULL) + return this->result == right.result; + + if (this->result == &this->suffix || right.result == &right.suffix) + return this->suffix == right.suffix; + + return + this->position == right.position + && + this->N == right.N + && + this->subs == right.subs; + } + + bool operator!=(const regex_token_iterator &right) + { + return !(*this == right); + } + + const value_type &operator*() + { + return *result; + } + + const value_type *operator->() + { + return result; + } + + regex_token_iterator &operator++() + { + position_iterator prev(position); + position_iterator eos_iterator; + + if (result != NULL) + // To avoid inifinite loop. The specification does not require, though. + { + if (result == &suffix) + { + result = NULL; // end-of-sequence. + } + else + { + ++this->N; + for (;;) + { + if (this->N < subs.size()) + { + result = subs[this->N] != -1 ? &((*position)[subs[this->N]]) : &((*position).prefix()); + break; + } + + this->N = 0; + ++position; + + if (position == eos_iterator) + { + if (this->N < subs.size() && prev->suffix().length() && minus1_in_subs()) + { + suffix = prev->suffix(); + result = &suffix; + } + else + { + result = NULL; + } + break; + } + } + } + } + return *this; + } + + regex_token_iterator operator++(int) + { + const regex_token_iterator tmp(*this); + ++(*this); + return tmp; + } + +private: + + void post_constructor(const BidirectionalIterator a, const BidirectionalIterator b) + { + position_iterator eos_iterator; + + this->N = 0; + + if (position != eos_iterator && subs.size()) + { + result = subs[this->N] != -1 ? &((*position)[subs[this->N]]) : &((*position).prefix()); + } + else if (minus1_in_subs()) // end-of-sequence. + { + suffix.first = a; + suffix.second = b; + suffix.matched = a != b; + // 28.1.2.7: In a suffix iterator the member result holds a pointer + // to the data member suffix, the value of the member suffix.match is true, + + if (suffix.matched) + result = &suffix; + else + result = NULL; // Means end-of-sequence. + } + } + + bool minus1_in_subs() const + { + for (std::size_t i = 0; i < subs.size(); ++i) + if (subs[i] == -1) + return true; + + return false; + } + +private: + + typedef regex_iterator position_iterator; + position_iterator position; + const value_type *result; + value_type suffix; + std::size_t N; + std::vector subs; +}; + +typedef regex_token_iterator cregex_token_iterator; +typedef regex_token_iterator wcregex_token_iterator; +typedef regex_token_iterator sregex_token_iterator; +typedef regex_token_iterator wsregex_token_iterator; + +#if defined(SRELL_CPP11_CHAR1632_ENABLED) + typedef regex_token_iterator u16cregex_token_iterator; + typedef regex_token_iterator u32cregex_token_iterator; + typedef regex_token_iterator u16sregex_token_iterator; + typedef regex_token_iterator u32sregex_token_iterator; +#endif + +#if defined(SRELL_CPP20_CHAR8_ENABLED) + typedef regex_token_iterator u8cregex_token_iterator; +#endif +#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2 + typedef regex_token_iterator u8sregex_token_iterator; +#endif + +typedef regex_token_iterator::value_type, u8regex_traits::value_type> > u8ccregex_token_iterator; +typedef regex_token_iterator::value_type, u8regex_traits::value_type> > u8csregex_token_iterator; +#if !defined(SRELL_CPP20_CHAR8_ENABLED) + typedef u8ccregex_token_iterator u8cregex_token_iterator; +#endif +#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2 + typedef u8csregex_token_iterator u8sregex_token_iterator; +#endif + +#if defined(WCHAR_MAX) + #if WCHAR_MAX >= 0x10ffff + typedef wcregex_token_iterator u32wcregex_token_iterator; + typedef wsregex_token_iterator u32wsregex_token_iterator; + typedef u32wcregex_token_iterator u1632wcregex_token_iterator; + typedef u32wsregex_token_iterator u1632wsregex_token_iterator; + #elif WCHAR_MAX >= 0xffff + typedef regex_token_iterator::value_type, u16regex_traits::value_type> > u16wcregex_token_iterator; + typedef regex_token_iterator::value_type, u16regex_traits::value_type> > u16wsregex_token_iterator; + typedef u16wcregex_token_iterator u1632wcregex_token_iterator; + typedef u16wsregex_token_iterator u1632wsregex_token_iterator; + #endif +#endif + +// ... "regex_token_iterator.hpp"] + +} // namespace srell + +#ifdef SRELL_NOEXCEPT +#undef SRELL_NOEXCEPT +#endif + +#ifdef SRELL_CPP20_CHAR8_ENABLED +#undef SRELL_CPP20_CHAR8_ENABLED +#endif + +#ifdef SRELL_CPP11_CHAR1632_ENABLED +#undef SRELL_CPP11_CHAR1632_ENABLED +#endif + +#ifdef SRELL_CPP11_INITIALIZER_LIST_ENABLED +#undef SRELL_CPP11_INITIALIZER_LIST_ENABLED +#endif + +#ifdef SRELL_CPP11_MOVE_ENABLED +#undef SRELL_CPP11_MOVE_ENABLED +#endif + +#endif // SRELL_REGEX_TEMPLATE_LIBRARY diff --git a/NVL/include/srell_ucfdata2.hpp b/NVL/include/srell_ucfdata2.hpp new file mode 100644 index 0000000..41d282c --- /dev/null +++ b/NVL/include/srell_ucfdata2.hpp @@ -0,0 +1,2484 @@ +// CaseFolding-14.0.0.txt +// Date: 2021-03-08, 19:35:41 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html + +template +struct unicode_casefolding +{ + static const T2 ucf_maxcodepoint = 0x1E921; + static const T3 ucf_deltatablesize = 0x1900; + static const T2 rev_maxcodepoint = 0x1E943; + static const T3 rev_indextablesize = 0x1B00; + static const T3 rev_charsettablesize = 4303; // 1 + 1424 * 2 + 1454 + static const T3 rev_maxset = 4; + static const T2 eos = 0; + + static const T2 ucf_deltatable[]; + static const T3 ucf_segmenttable[]; + static const T3 rev_indextable[]; + static const T3 rev_segmenttable[]; + static const T2 rev_charsettable[]; +}; +template + const T2 unicode_casefolding::ucf_maxcodepoint; +template + const T3 unicode_casefolding::ucf_deltatablesize; +template + const T2 unicode_casefolding::rev_maxcodepoint; +template + const T3 unicode_casefolding::rev_indextablesize; +template + const T3 unicode_casefolding::rev_charsettablesize; +template + const T3 unicode_casefolding::rev_maxset; +template + const T2 unicode_casefolding::eos; + +template +const T2 unicode_casefolding::ucf_deltatable[] = +{ + // For common (0) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+00xx (256) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+01xx (512) + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, static_cast(-121), 1, 0, 1, 0, 1, 0, static_cast(-268), + 0, 210, 1, 0, 1, 0, 206, 1, 0, 205, 205, 1, 0, 0, 79, 202, + 203, 1, 0, 205, 207, 0, 211, 209, 1, 0, 0, 0, 211, 213, 0, 214, + 1, 0, 1, 0, 1, 0, 218, 1, 0, 218, 0, 0, 1, 0, 218, 1, + 0, 217, 217, 1, 0, 1, 0, 219, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 2, 1, 0, 1, 0, static_cast(-97), static_cast(-56), 1, 0, 1, 0, 1, 0, 1, 0, + + // For u+02xx (768) + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + static_cast(-130), 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10795, 1, 0, static_cast(-163), 10792, 0, + 0, 1, 0, static_cast(-195), 69, 71, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+03xx (1024) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 38, 0, 37, 37, 37, 0, 64, 0, 63, 63, + 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, + static_cast(-30), static_cast(-25), 0, 0, 0, static_cast(-15), static_cast(-22), 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + static_cast(-54), static_cast(-48), 0, 0, static_cast(-60), static_cast(-64), 0, 1, 0, static_cast(-7), 1, 0, 0, static_cast(-130), static_cast(-130), static_cast(-130), + + // For u+04xx (1280) + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 15, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + + // For u+05xx (1536) + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+10xx (1792) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, 0, 0, 0, 0, 0, 7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+13xx (2048) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), 0, 0, + + // For u+1Cxx (2304) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + static_cast(-6222), static_cast(-6221), static_cast(-6212), static_cast(-6210), static_cast(-6210), static_cast(-6211), static_cast(-6204), static_cast(-6180), 35267, 0, 0, 0, 0, 0, 0, 0, + static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), + static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), + static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), static_cast(-3008), 0, 0, static_cast(-3008), static_cast(-3008), static_cast(-3008), + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+1Exx (2560) + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, static_cast(-58), 0, 0, static_cast(-7615), 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + + // For u+1Fxx (2816) + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), 0, static_cast(-8), 0, static_cast(-8), 0, static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), static_cast(-8), + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-74), static_cast(-74), static_cast(-9), 0, static_cast(-7173), 0, + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-86), static_cast(-86), static_cast(-86), static_cast(-86), static_cast(-9), 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-100), static_cast(-100), 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-8), static_cast(-8), static_cast(-112), static_cast(-112), static_cast(-7), 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-128), static_cast(-128), static_cast(-126), static_cast(-126), static_cast(-9), 0, 0, 0, + + // For u+21xx (3072) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, static_cast(-7517), 0, 0, 0, static_cast(-8383), static_cast(-8262), 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+24xx (3328) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+2Cxx (3584) + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, static_cast(-10743), static_cast(-3814), static_cast(-10727), 0, 0, 1, 0, 1, 0, 1, 0, static_cast(-10780), static_cast(-10749), static_cast(-10783), + static_cast(-10782), 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, static_cast(-10815), static_cast(-10815), + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+A6xx (3840) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+A7xx (4096) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, static_cast(-35332), 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, static_cast(-42280), 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, static_cast(-42308), static_cast(-42319), static_cast(-42315), static_cast(-42305), static_cast(-42308), 0, + static_cast(-42258), static_cast(-42282), static_cast(-42261), 928, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, static_cast(-48), static_cast(-42307), static_cast(-35384), 1, 0, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+ABxx (4352) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), + static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), + static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), + static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), + static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), static_cast(-38864), + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+FFxx (4608) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+104xx (4864) + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+105xx (5120) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39, + 39, 39, 39, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+10Cxx (5376) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+118xx (5632) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+16Exx (5888) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+1E9xx (6144) + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +template +const T3 unicode_casefolding::ucf_segmenttable[] = +{ + 256, 512, 768, 1024, 1280, 1536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1792, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 0, 2560, 2816, + 0, 3072, 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, 3584, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3840, 4096, 0, 0, 0, 4352, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4608, + 0, 0, 0, 0, 4864, 5120, 0, 0, 0, 0, 0, 0, 5376, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5632, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5888, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6144 +}; + +template +const T3 unicode_casefolding::rev_indextable[] = +{ + // For common (0) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+00xx (256) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 35, 38, 41, 44, + 47, 50, 53, 56, 60, 63, 66, 69, 72, 75, 78, 0, 0, 0, 0, 0, + 0, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 35, 38, 41, 44, + 47, 50, 53, 56, 60, 63, 66, 69, 72, 75, 78, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 85, 88, 91, 94, 97, 100, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131, + 134, 137, 140, 143, 146, 149, 152, 0, 155, 158, 161, 164, 167, 170, 173, 1924, + 85, 88, 91, 94, 97, 100, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131, + 134, 137, 140, 143, 146, 149, 152, 0, 155, 158, 161, 164, 167, 170, 173, 350, + + // For u+21xx (512) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 31, 100, 0, 0, 0, 0, + 0, 0, 2359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2362, 2365, 2368, 2371, 2374, 2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407, + 2362, 2365, 2368, 2371, 2374, 2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407, + 0, 0, 0, 2410, 2410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+01xx (768) + 176, 176, 179, 179, 182, 182, 185, 185, 188, 188, 191, 191, 194, 194, 197, 197, + 200, 200, 203, 203, 206, 206, 209, 209, 212, 212, 215, 215, 218, 218, 221, 221, + 224, 224, 227, 227, 230, 230, 233, 233, 236, 236, 239, 239, 242, 242, 245, 245, + 0, 0, 248, 248, 251, 251, 254, 254, 0, 257, 257, 260, 260, 263, 263, 266, + 266, 269, 269, 272, 272, 275, 275, 278, 278, 0, 281, 281, 284, 284, 287, 287, + 290, 290, 293, 293, 296, 296, 299, 299, 302, 302, 305, 305, 308, 308, 311, 311, + 314, 314, 317, 317, 320, 320, 323, 323, 326, 326, 329, 329, 332, 332, 335, 335, + 338, 338, 341, 341, 344, 344, 347, 347, 350, 353, 353, 356, 356, 359, 359, 56, + 651, 362, 365, 365, 368, 368, 371, 374, 374, 377, 380, 383, 383, 0, 386, 389, + 392, 395, 395, 398, 401, 540, 404, 407, 410, 410, 642, 0, 413, 416, 606, 419, + 422, 422, 425, 425, 428, 428, 431, 434, 434, 437, 0, 0, 440, 440, 443, 446, + 446, 449, 452, 455, 455, 458, 458, 461, 464, 464, 0, 0, 467, 467, 0, 543, + 0, 0, 0, 0, 470, 470, 470, 474, 474, 474, 478, 478, 478, 482, 482, 485, + 485, 488, 488, 491, 491, 494, 494, 497, 497, 500, 500, 503, 503, 386, 506, 506, + 509, 509, 512, 512, 515, 515, 518, 518, 521, 521, 524, 524, 527, 527, 530, 530, + 0, 533, 533, 533, 537, 537, 540, 543, 546, 546, 549, 549, 552, 552, 555, 555, + + // For u+03xx (1024) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 680, 680, 683, 683, 0, 0, 686, 686, 0, 0, 0, 843, 846, 849, 0, 689, + 0, 0, 0, 0, 0, 0, 692, 0, 695, 698, 701, 0, 704, 0, 707, 710, + 0, 713, 716, 720, 723, 726, 730, 733, 736, 675, 741, 745, 81, 748, 751, 754, + 757, 761, 0, 765, 769, 772, 775, 779, 782, 785, 789, 792, 692, 695, 698, 701, + 0, 713, 716, 720, 723, 726, 730, 733, 736, 675, 741, 745, 81, 748, 751, 754, + 757, 761, 765, 765, 769, 772, 775, 779, 782, 785, 789, 792, 704, 707, 710, 795, + 716, 736, 0, 0, 0, 775, 757, 795, 798, 798, 801, 801, 804, 804, 807, 807, + 810, 810, 813, 813, 816, 816, 819, 819, 822, 822, 825, 825, 828, 828, 831, 831, + 741, 761, 837, 689, 736, 726, 0, 834, 834, 837, 840, 840, 0, 843, 846, 849, + + // For u+02xx (1280) + 558, 558, 561, 561, 564, 564, 567, 567, 570, 570, 573, 573, 576, 576, 579, 579, + 582, 582, 585, 585, 588, 588, 591, 591, 594, 594, 597, 597, 600, 600, 603, 603, + 606, 0, 609, 609, 612, 612, 615, 615, 618, 618, 621, 621, 624, 624, 627, 627, + 630, 630, 633, 633, 0, 0, 0, 0, 0, 0, 636, 639, 639, 642, 645, 2674, + 2677, 648, 648, 651, 654, 657, 660, 660, 663, 663, 666, 666, 669, 669, 672, 672, + 2662, 2656, 2665, 362, 371, 0, 377, 380, 0, 389, 0, 392, 3130, 0, 0, 0, + 398, 3133, 0, 401, 0, 3088, 3127, 0, 407, 404, 3139, 2638, 3136, 0, 0, 413, + 0, 2659, 416, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 2644, 0, 0, + 431, 0, 3181, 437, 0, 0, 0, 3145, 443, 654, 449, 452, 657, 0, 0, 0, + 0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 3142, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+2Cxx (1536) + 2491, 2494, 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536, + 2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, + 2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, + 2491, 2494, 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536, + 2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, + 2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, + 2635, 2635, 2638, 2641, 2644, 636, 645, 2647, 2647, 2650, 2650, 2653, 2653, 2656, 2659, 2662, + 2665, 0, 2668, 2668, 0, 2671, 2671, 0, 0, 0, 0, 0, 0, 0, 2674, 2677, + 2680, 2680, 2683, 2683, 2686, 2686, 2689, 2689, 2692, 2692, 2695, 2695, 2698, 2698, 2701, 2701, + 2704, 2704, 2707, 2707, 2710, 2710, 2713, 2713, 2716, 2716, 2719, 2719, 2722, 2722, 2725, 2725, + 2728, 2728, 2731, 2731, 2734, 2734, 2737, 2737, 2740, 2740, 2743, 2743, 2746, 2746, 2749, 2749, + 2752, 2752, 2755, 2755, 2758, 2758, 2761, 2761, 2764, 2764, 2767, 2767, 2770, 2770, 2773, 2773, + 2776, 2776, 2779, 2779, 2782, 2782, 2785, 2785, 2788, 2788, 2791, 2791, 2794, 2794, 2797, 2797, + 2800, 2800, 2803, 2803, 2806, 2806, 2809, 2809, 2812, 2812, 2815, 2815, 2818, 2818, 2821, 2821, + 2824, 2824, 2827, 2827, 0, 0, 0, 0, 0, 0, 0, 2830, 2830, 2833, 2833, 0, + 0, 0, 2836, 2836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+1Fxx (1792) + 2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092, 2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092, + 2095, 2098, 2101, 2104, 2107, 2110, 0, 0, 2095, 2098, 2101, 2104, 2107, 2110, 0, 0, + 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, + 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, + 2161, 2164, 2167, 2170, 2173, 2176, 0, 0, 2161, 2164, 2167, 2170, 2173, 2176, 0, 0, + 0, 2179, 0, 2182, 0, 2185, 0, 2188, 0, 2179, 0, 2182, 0, 2185, 0, 2188, + 2191, 2194, 2197, 2200, 2203, 2206, 2209, 2212, 2191, 2194, 2197, 2200, 2203, 2206, 2209, 2212, + 2293, 2296, 2302, 2305, 2308, 2311, 2323, 2326, 2344, 2347, 2335, 2338, 2350, 2353, 0, 0, + 2215, 2218, 2221, 2224, 2227, 2230, 2233, 2236, 2215, 2218, 2221, 2224, 2227, 2230, 2233, 2236, + 2239, 2242, 2245, 2248, 2251, 2254, 2257, 2260, 2239, 2242, 2245, 2248, 2251, 2254, 2257, 2260, + 2263, 2266, 2269, 2272, 2275, 2278, 2281, 2284, 2263, 2266, 2269, 2272, 2275, 2278, 2281, 2284, + 2287, 2290, 0, 2299, 0, 0, 0, 0, 2287, 2290, 2293, 2296, 2299, 0, 675, 0, + 0, 0, 0, 2314, 0, 0, 0, 0, 2302, 2305, 2308, 2311, 2314, 0, 0, 0, + 2317, 2320, 0, 0, 0, 0, 0, 0, 2317, 2320, 2323, 2326, 0, 0, 0, 0, + 2329, 2332, 0, 0, 0, 2341, 0, 0, 2329, 2332, 2335, 2338, 2341, 0, 0, 0, + 0, 0, 0, 2356, 0, 0, 0, 0, 2344, 2347, 2350, 2353, 2356, 0, 0, 0, + + // For u+04xx (2048) + 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, + 900, 903, 906, 910, 913, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 948, + 951, 954, 958, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000, + 900, 903, 906, 910, 913, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 948, + 951, 954, 958, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000, + 852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897, + 1003, 1003, 1006, 1006, 1010, 1010, 1013, 1013, 1016, 1016, 1019, 1019, 1022, 1022, 1025, 1025, + 1028, 1028, 1031, 1031, 1034, 1034, 1037, 1037, 1040, 1040, 1043, 1043, 1046, 1046, 1049, 1049, + 1052, 1052, 0, 0, 0, 0, 0, 0, 0, 0, 1055, 1055, 1058, 1058, 1061, 1061, + 1064, 1064, 1067, 1067, 1070, 1070, 1073, 1073, 1076, 1076, 1079, 1079, 1082, 1082, 1085, 1085, + 1088, 1088, 1091, 1091, 1094, 1094, 1097, 1097, 1100, 1100, 1103, 1103, 1106, 1106, 1109, 1109, + 1112, 1112, 1115, 1115, 1118, 1118, 1121, 1121, 1124, 1124, 1127, 1127, 1130, 1130, 1133, 1133, + 1136, 1139, 1139, 1142, 1142, 1145, 1145, 1148, 1148, 1151, 1151, 1154, 1154, 1157, 1157, 1136, + 1160, 1160, 1163, 1163, 1166, 1166, 1169, 1169, 1172, 1172, 1175, 1175, 1178, 1178, 1181, 1181, + 1184, 1184, 1187, 1187, 1190, 1190, 1193, 1193, 1196, 1196, 1199, 1199, 1202, 1202, 1205, 1205, + 1208, 1208, 1211, 1211, 1214, 1214, 1217, 1217, 1220, 1220, 1223, 1223, 1226, 1226, 1229, 1229, + + // For u+1Cxx (2304) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 906, 913, 944, 954, 958, 958, 984, 1006, 1556, 0, 0, 0, 0, 0, 0, 0, + 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, + 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, + 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 0, 0, 1689, 1692, 1695, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+05xx (2560) + 1232, 1232, 1235, 1235, 1238, 1238, 1241, 1241, 1244, 1244, 1247, 1247, 1250, 1250, 1253, 1253, + 1256, 1256, 1259, 1259, 1262, 1262, 1265, 1265, 1268, 1268, 1271, 1271, 1274, 1274, 1277, 1277, + 1280, 1280, 1283, 1283, 1286, 1286, 1289, 1289, 1292, 1292, 1295, 1295, 1298, 1298, 1301, 1301, + 0, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, + 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, + 1397, 1400, 1403, 1406, 1409, 1412, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346, + 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, + 1397, 1400, 1403, 1406, 1409, 1412, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+2Dxx (2816) + 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463, + 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, + 1514, 1517, 1520, 1523, 1526, 1529, 0, 1532, 0, 0, 0, 0, 0, 1535, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+10xx (3072) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463, + 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, + 1514, 1517, 1520, 1523, 1526, 1529, 0, 1532, 0, 0, 0, 0, 0, 1535, 0, 0, + 1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605, + 1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653, + 1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 0, 0, 1689, 1692, 1695, + + // For u+13xx (3328) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3205, 3208, 3211, 3214, 3217, 3220, 3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250, + 3253, 3256, 3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298, + 3301, 3304, 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328, 3331, 3334, 3337, 3340, 3343, 3346, + 3349, 3352, 3355, 3358, 3361, 3364, 3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394, + 3397, 3400, 3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436, 3439, 3442, + 1538, 1541, 1544, 1547, 1550, 1553, 0, 0, 1538, 1541, 1544, 1547, 1550, 1553, 0, 0, + + // For u+A6xx (3584) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2839, 2839, 2842, 2842, 2845, 2845, 2848, 2848, 2851, 2851, 1556, 1556, 2854, 2854, 2857, 2857, + 2860, 2860, 2863, 2863, 2866, 2866, 2869, 2869, 2872, 2872, 2875, 2875, 2878, 2878, 2881, 2881, + 2884, 2884, 2887, 2887, 2890, 2890, 2893, 2893, 2896, 2896, 2899, 2899, 2902, 2902, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2905, 2905, 2908, 2908, 2911, 2911, 2914, 2914, 2917, 2917, 2920, 2920, 2923, 2923, 2926, 2926, + 2929, 2929, 2932, 2932, 2935, 2935, 2938, 2938, 2941, 2941, 2944, 2944, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+1Exx (3840) + 1698, 1698, 1701, 1701, 1704, 1704, 1707, 1707, 1710, 1710, 1713, 1713, 1716, 1716, 1719, 1719, + 1722, 1722, 1725, 1725, 1728, 1728, 1731, 1731, 1734, 1734, 1737, 1737, 1740, 1740, 1743, 1743, + 1746, 1746, 1749, 1749, 1752, 1752, 1755, 1755, 1758, 1758, 1761, 1761, 1764, 1764, 1767, 1767, + 1770, 1770, 1773, 1773, 1776, 1776, 1779, 1779, 1782, 1782, 1785, 1785, 1788, 1788, 1791, 1791, + 1794, 1794, 1797, 1797, 1800, 1800, 1803, 1803, 1806, 1806, 1809, 1809, 1812, 1812, 1815, 1815, + 1818, 1818, 1821, 1821, 1824, 1824, 1827, 1827, 1830, 1830, 1833, 1833, 1836, 1836, 1839, 1839, + 1842, 1842, 1846, 1846, 1849, 1849, 1852, 1852, 1855, 1855, 1858, 1858, 1861, 1861, 1864, 1864, + 1867, 1867, 1870, 1870, 1873, 1873, 1876, 1876, 1879, 1879, 1882, 1882, 1885, 1885, 1888, 1888, + 1891, 1891, 1894, 1894, 1897, 1897, 1900, 1900, 1903, 1903, 1906, 1906, 1909, 1909, 1912, 1912, + 1915, 1915, 1918, 1918, 1921, 1921, 0, 0, 0, 0, 0, 1842, 0, 0, 1924, 0, + 1927, 1927, 1930, 1930, 1933, 1933, 1936, 1936, 1939, 1939, 1942, 1942, 1945, 1945, 1948, 1948, + 1951, 1951, 1954, 1954, 1957, 1957, 1960, 1960, 1963, 1963, 1966, 1966, 1969, 1969, 1972, 1972, + 1975, 1975, 1978, 1978, 1981, 1981, 1984, 1984, 1987, 1987, 1990, 1990, 1993, 1993, 1996, 1996, + 1999, 1999, 2002, 2002, 2005, 2005, 2008, 2008, 2011, 2011, 2014, 2014, 2017, 2017, 2020, 2020, + 2023, 2023, 2026, 2026, 2029, 2029, 2032, 2032, 2035, 2035, 2038, 2038, 2041, 2041, 2044, 2044, + 2047, 2047, 2050, 2050, 2053, 2053, 2056, 2056, 2059, 2059, 2062, 2062, 2065, 2065, 2068, 2068, + + // For u+24xx (4096) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2413, 2416, 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440, + 2443, 2446, 2449, 2452, 2455, 2458, 2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, + 2413, 2416, 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458, + 2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+1Dxx (4352) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3067, 0, 0, 0, 2641, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3184, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+A7xx (4608) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2947, 2947, 2950, 2950, 2953, 2953, 2956, 2956, 2959, 2959, 2962, 2962, 2965, 2965, + 0, 0, 2968, 2968, 2971, 2971, 2974, 2974, 2977, 2977, 2980, 2980, 2983, 2983, 2986, 2986, + 2989, 2989, 2992, 2992, 2995, 2995, 2998, 2998, 3001, 3001, 3004, 3004, 3007, 3007, 3010, 3010, + 3013, 3013, 3016, 3016, 3019, 3019, 3022, 3022, 3025, 3025, 3028, 3028, 3031, 3031, 3034, 3034, + 3037, 3037, 3040, 3040, 3043, 3043, 3046, 3046, 3049, 3049, 3052, 3052, 3055, 3055, 3058, 3058, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3061, 3061, 3064, 3064, 3067, 3070, 3070, + 3073, 3073, 3076, 3076, 3079, 3079, 3082, 3082, 0, 0, 0, 3085, 3085, 3088, 0, 0, + 3091, 3091, 3094, 3094, 3178, 0, 3097, 3097, 3100, 3100, 3103, 3103, 3106, 3106, 3109, 3109, + 3112, 3112, 3115, 3115, 3118, 3118, 3121, 3121, 3124, 3124, 3127, 3130, 3133, 3136, 3139, 0, + 3142, 3145, 3148, 3151, 3154, 3154, 3157, 3157, 3160, 3160, 3163, 3163, 3166, 3166, 3169, 3169, + 3172, 3172, 3175, 3175, 3178, 3181, 3184, 3187, 3187, 3190, 3190, 0, 0, 0, 0, 0, + 3193, 3193, 0, 0, 0, 0, 3196, 3196, 3199, 3199, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3202, 3202, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+ABxx (4864) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3205, 3208, 3211, 3214, 3217, 3220, 3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250, + 3253, 3256, 3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298, + 3301, 3304, 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328, 3331, 3334, 3337, 3340, 3343, 3346, + 3349, 3352, 3355, 3358, 3361, 3364, 3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394, + 3397, 3400, 3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436, 3439, 3442, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+FFxx (5120) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3445, 3448, 3451, 3454, 3457, 3460, 3463, 3466, 3469, 3472, 3475, 3478, 3481, 3484, 3487, + 3490, 3493, 3496, 3499, 3502, 3505, 3508, 3511, 3514, 3517, 3520, 0, 0, 0, 0, 0, + 0, 3445, 3448, 3451, 3454, 3457, 3460, 3463, 3466, 3469, 3472, 3475, 3478, 3481, 3484, 3487, + 3490, 3493, 3496, 3499, 3502, 3505, 3508, 3511, 3514, 3517, 3520, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+104xx (5376) + 3523, 3526, 3529, 3532, 3535, 3538, 3541, 3544, 3547, 3550, 3553, 3556, 3559, 3562, 3565, 3568, + 3571, 3574, 3577, 3580, 3583, 3586, 3589, 3592, 3595, 3598, 3601, 3604, 3607, 3610, 3613, 3616, + 3619, 3622, 3625, 3628, 3631, 3634, 3637, 3640, 3523, 3526, 3529, 3532, 3535, 3538, 3541, 3544, + 3547, 3550, 3553, 3556, 3559, 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3583, 3586, 3589, 3592, + 3595, 3598, 3601, 3604, 3607, 3610, 3613, 3616, 3619, 3622, 3625, 3628, 3631, 3634, 3637, 3640, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3643, 3646, 3649, 3652, 3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688, + 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721, 3724, 3727, 3730, 3733, 3736, + 3739, 3742, 3745, 3748, 0, 0, 0, 0, 3643, 3646, 3649, 3652, 3655, 3658, 3661, 3664, + 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, + 3715, 3718, 3721, 3724, 3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 0, 0, 0, 0, + + // For u+105xx (5632) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3751, 3754, 3757, 3760, 3763, 3766, 3769, 3772, 3775, 3778, 3781, 0, 3784, 3787, 3790, 3793, + 3796, 3799, 3802, 3805, 3808, 3811, 3814, 3817, 3820, 3823, 3826, 0, 3829, 3832, 3835, 3838, + 3841, 3844, 3847, 0, 3850, 3853, 0, 3751, 3754, 3757, 3760, 3763, 3766, 3769, 3772, 3775, + 3778, 3781, 0, 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, 3808, 3811, 3814, 3817, 3820, + 3823, 3826, 0, 3829, 3832, 3835, 3838, 3841, 3844, 3847, 0, 3850, 3853, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+10Cxx (5888) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3856, 3859, 3862, 3865, 3868, 3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901, + 3904, 3907, 3910, 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940, 3943, 3946, 3949, + 3952, 3955, 3958, 3961, 3964, 3967, 3970, 3973, 3976, 3979, 3982, 3985, 3988, 3991, 3994, 3997, + 4000, 4003, 4006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3856, 3859, 3862, 3865, 3868, 3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901, + 3904, 3907, 3910, 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940, 3943, 3946, 3949, + 3952, 3955, 3958, 3961, 3964, 3967, 3970, 3973, 3976, 3979, 3982, 3985, 3988, 3991, 3994, 3997, + 4000, 4003, 4006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+118xx (6144) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4009, 4012, 4015, 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048, 4051, 4054, + 4057, 4060, 4063, 4066, 4069, 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, 4096, 4099, 4102, + 4009, 4012, 4015, 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048, 4051, 4054, + 4057, 4060, 4063, 4066, 4069, 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, 4096, 4099, 4102, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+16Exx (6400) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4105, 4108, 4111, 4114, 4117, 4120, 4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150, + 4153, 4156, 4159, 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192, 4195, 4198, + 4105, 4108, 4111, 4114, 4117, 4120, 4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150, + 4153, 4156, 4159, 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192, 4195, 4198, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + // For u+1E9xx (6656) + 4201, 4204, 4207, 4210, 4213, 4216, 4219, 4222, 4225, 4228, 4231, 4234, 4237, 4240, 4243, 4246, + 4249, 4252, 4255, 4258, 4261, 4264, 4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288, 4291, 4294, + 4297, 4300, 4201, 4204, 4207, 4210, 4213, 4216, 4219, 4222, 4225, 4228, 4231, 4234, 4237, 4240, + 4243, 4246, 4249, 4252, 4255, 4258, 4261, 4264, 4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288, + 4291, 4294, 4297, 4300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +template +const T3 unicode_casefolding::rev_segmenttable[] = +{ + 256, 768, 1280, 1024, 2048, 2560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3072, 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 4352, 3840, 1792, + 0, 512, 0, 0, 4096, 0, 0, 0, 0, 0, 0, 0, 1536, 2816, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3584, 4608, 0, 0, 0, 4864, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5120, + 0, 0, 0, 0, 5376, 5632, 0, 0, 0, 0, 0, 0, 5888, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6144, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6400, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6656 +}; + +template +const T2 unicode_casefolding::rev_charsettable[] = +{ + eos, // 0 + 0x0061, 0x0041, eos, + 0x0062, 0x0042, eos, + 0x0063, 0x0043, eos, + 0x0064, 0x0044, eos, // 10 + 0x0065, 0x0045, eos, + 0x0066, 0x0046, eos, + 0x0067, 0x0047, eos, + 0x0068, 0x0048, eos, // 22 + 0x0069, 0x0049, eos, + 0x006A, 0x004A, eos, + 0x006B, 0x004B, 0x212A, eos, // 31 + 0x006C, 0x004C, eos, + 0x006D, 0x004D, eos, + 0x006E, 0x004E, eos, // 41 + 0x006F, 0x004F, eos, + 0x0070, 0x0050, eos, + 0x0071, 0x0051, eos, // 50 + 0x0072, 0x0052, eos, + 0x0073, 0x0053, 0x017F, eos, + 0x0074, 0x0054, eos, // 60 + 0x0075, 0x0055, eos, + 0x0076, 0x0056, eos, + 0x0077, 0x0057, eos, + 0x0078, 0x0058, eos, // 72 + 0x0079, 0x0059, eos, + 0x007A, 0x005A, eos, + 0x03BC, 0x00B5, 0x039C, eos, // 81 + 0x00E0, 0x00C0, eos, + 0x00E1, 0x00C1, eos, + 0x00E2, 0x00C2, eos, // 91 + 0x00E3, 0x00C3, eos, + 0x00E4, 0x00C4, eos, + 0x00E5, 0x00C5, 0x212B, eos, // 100 + 0x00E6, 0x00C6, eos, + 0x00E7, 0x00C7, eos, + 0x00E8, 0x00C8, eos, // 110 + 0x00E9, 0x00C9, eos, + 0x00EA, 0x00CA, eos, + 0x00EB, 0x00CB, eos, + 0x00EC, 0x00CC, eos, // 122 + 0x00ED, 0x00CD, eos, + 0x00EE, 0x00CE, eos, + 0x00EF, 0x00CF, eos, // 131 + 0x00F0, 0x00D0, eos, + 0x00F1, 0x00D1, eos, + 0x00F2, 0x00D2, eos, // 140 + 0x00F3, 0x00D3, eos, + 0x00F4, 0x00D4, eos, + 0x00F5, 0x00D5, eos, + 0x00F6, 0x00D6, eos, // 152 + 0x00F8, 0x00D8, eos, + 0x00F9, 0x00D9, eos, + 0x00FA, 0x00DA, eos, // 161 + 0x00FB, 0x00DB, eos, + 0x00FC, 0x00DC, eos, + 0x00FD, 0x00DD, eos, // 170 + 0x00FE, 0x00DE, eos, + 0x0101, 0x0100, eos, + 0x0103, 0x0102, eos, + 0x0105, 0x0104, eos, // 182 + 0x0107, 0x0106, eos, + 0x0109, 0x0108, eos, + 0x010B, 0x010A, eos, // 191 + 0x010D, 0x010C, eos, + 0x010F, 0x010E, eos, + 0x0111, 0x0110, eos, // 200 + 0x0113, 0x0112, eos, + 0x0115, 0x0114, eos, + 0x0117, 0x0116, eos, + 0x0119, 0x0118, eos, // 212 + 0x011B, 0x011A, eos, + 0x011D, 0x011C, eos, + 0x011F, 0x011E, eos, // 221 + 0x0121, 0x0120, eos, + 0x0123, 0x0122, eos, + 0x0125, 0x0124, eos, // 230 + 0x0127, 0x0126, eos, + 0x0129, 0x0128, eos, + 0x012B, 0x012A, eos, + 0x012D, 0x012C, eos, // 242 + 0x012F, 0x012E, eos, + 0x0133, 0x0132, eos, + 0x0135, 0x0134, eos, // 251 + 0x0137, 0x0136, eos, + 0x013A, 0x0139, eos, + 0x013C, 0x013B, eos, // 260 + 0x013E, 0x013D, eos, + 0x0140, 0x013F, eos, + 0x0142, 0x0141, eos, + 0x0144, 0x0143, eos, // 272 + 0x0146, 0x0145, eos, + 0x0148, 0x0147, eos, + 0x014B, 0x014A, eos, // 281 + 0x014D, 0x014C, eos, + 0x014F, 0x014E, eos, + 0x0151, 0x0150, eos, // 290 + 0x0153, 0x0152, eos, + 0x0155, 0x0154, eos, + 0x0157, 0x0156, eos, + 0x0159, 0x0158, eos, // 302 + 0x015B, 0x015A, eos, + 0x015D, 0x015C, eos, + 0x015F, 0x015E, eos, // 311 + 0x0161, 0x0160, eos, + 0x0163, 0x0162, eos, + 0x0165, 0x0164, eos, // 320 + 0x0167, 0x0166, eos, + 0x0169, 0x0168, eos, + 0x016B, 0x016A, eos, + 0x016D, 0x016C, eos, // 332 + 0x016F, 0x016E, eos, + 0x0171, 0x0170, eos, + 0x0173, 0x0172, eos, // 341 + 0x0175, 0x0174, eos, + 0x0177, 0x0176, eos, + 0x00FF, 0x0178, eos, // 350 + 0x017A, 0x0179, eos, + 0x017C, 0x017B, eos, + 0x017E, 0x017D, eos, + 0x0253, 0x0181, eos, // 362 + 0x0183, 0x0182, eos, + 0x0185, 0x0184, eos, + 0x0254, 0x0186, eos, // 371 + 0x0188, 0x0187, eos, + 0x0256, 0x0189, eos, + 0x0257, 0x018A, eos, // 380 + 0x018C, 0x018B, eos, + 0x01DD, 0x018E, eos, + 0x0259, 0x018F, eos, + 0x025B, 0x0190, eos, // 392 + 0x0192, 0x0191, eos, + 0x0260, 0x0193, eos, + 0x0263, 0x0194, eos, // 401 + 0x0269, 0x0196, eos, + 0x0268, 0x0197, eos, + 0x0199, 0x0198, eos, // 410 + 0x026F, 0x019C, eos, + 0x0272, 0x019D, eos, + 0x0275, 0x019F, eos, + 0x01A1, 0x01A0, eos, // 422 + 0x01A3, 0x01A2, eos, + 0x01A5, 0x01A4, eos, + 0x0280, 0x01A6, eos, // 431 + 0x01A8, 0x01A7, eos, + 0x0283, 0x01A9, eos, + 0x01AD, 0x01AC, eos, // 440 + 0x0288, 0x01AE, eos, + 0x01B0, 0x01AF, eos, + 0x028A, 0x01B1, eos, + 0x028B, 0x01B2, eos, // 452 + 0x01B4, 0x01B3, eos, + 0x01B6, 0x01B5, eos, + 0x0292, 0x01B7, eos, // 461 + 0x01B9, 0x01B8, eos, + 0x01BD, 0x01BC, eos, + 0x01C6, 0x01C4, 0x01C5, eos, // 470 + 0x01C9, 0x01C7, 0x01C8, eos, + 0x01CC, 0x01CA, 0x01CB, eos, + 0x01CE, 0x01CD, eos, // 482 + 0x01D0, 0x01CF, eos, + 0x01D2, 0x01D1, eos, + 0x01D4, 0x01D3, eos, // 491 + 0x01D6, 0x01D5, eos, + 0x01D8, 0x01D7, eos, + 0x01DA, 0x01D9, eos, // 500 + 0x01DC, 0x01DB, eos, + 0x01DF, 0x01DE, eos, + 0x01E1, 0x01E0, eos, + 0x01E3, 0x01E2, eos, // 512 + 0x01E5, 0x01E4, eos, + 0x01E7, 0x01E6, eos, + 0x01E9, 0x01E8, eos, // 521 + 0x01EB, 0x01EA, eos, + 0x01ED, 0x01EC, eos, + 0x01EF, 0x01EE, eos, // 530 + 0x01F3, 0x01F1, 0x01F2, eos, + 0x01F5, 0x01F4, eos, + 0x0195, 0x01F6, eos, // 540 + 0x01BF, 0x01F7, eos, + 0x01F9, 0x01F8, eos, + 0x01FB, 0x01FA, eos, + 0x01FD, 0x01FC, eos, // 552 + 0x01FF, 0x01FE, eos, + 0x0201, 0x0200, eos, + 0x0203, 0x0202, eos, // 561 + 0x0205, 0x0204, eos, + 0x0207, 0x0206, eos, + 0x0209, 0x0208, eos, // 570 + 0x020B, 0x020A, eos, + 0x020D, 0x020C, eos, + 0x020F, 0x020E, eos, + 0x0211, 0x0210, eos, // 582 + 0x0213, 0x0212, eos, + 0x0215, 0x0214, eos, + 0x0217, 0x0216, eos, // 591 + 0x0219, 0x0218, eos, + 0x021B, 0x021A, eos, + 0x021D, 0x021C, eos, // 600 + 0x021F, 0x021E, eos, + 0x019E, 0x0220, eos, + 0x0223, 0x0222, eos, + 0x0225, 0x0224, eos, // 612 + 0x0227, 0x0226, eos, + 0x0229, 0x0228, eos, + 0x022B, 0x022A, eos, // 621 + 0x022D, 0x022C, eos, + 0x022F, 0x022E, eos, + 0x0231, 0x0230, eos, // 630 + 0x0233, 0x0232, eos, + 0x2C65, 0x023A, eos, + 0x023C, 0x023B, eos, + 0x019A, 0x023D, eos, // 642 + 0x2C66, 0x023E, eos, + 0x0242, 0x0241, eos, + 0x0180, 0x0243, eos, // 651 + 0x0289, 0x0244, eos, + 0x028C, 0x0245, eos, + 0x0247, 0x0246, eos, // 660 + 0x0249, 0x0248, eos, + 0x024B, 0x024A, eos, + 0x024D, 0x024C, eos, + 0x024F, 0x024E, eos, // 672 + 0x03B9, 0x0345, 0x0399, 0x1FBE, eos, + 0x0371, 0x0370, eos, // 680 + 0x0373, 0x0372, eos, + 0x0377, 0x0376, eos, + 0x03F3, 0x037F, eos, + 0x03AC, 0x0386, eos, // 692 + 0x03AD, 0x0388, eos, + 0x03AE, 0x0389, eos, + 0x03AF, 0x038A, eos, // 701 + 0x03CC, 0x038C, eos, + 0x03CD, 0x038E, eos, + 0x03CE, 0x038F, eos, // 710 + 0x03B1, 0x0391, eos, + 0x03B2, 0x0392, 0x03D0, eos, + 0x03B3, 0x0393, eos, // 720 + 0x03B4, 0x0394, eos, + 0x03B5, 0x0395, 0x03F5, eos, + 0x03B6, 0x0396, eos, // 730 + 0x03B7, 0x0397, eos, + 0x03B8, 0x0398, 0x03D1, 0x03F4, eos, + 0x03BA, 0x039A, 0x03F0, eos, // 741 + 0x03BB, 0x039B, eos, + 0x03BD, 0x039D, eos, + 0x03BE, 0x039E, eos, // 751 + 0x03BF, 0x039F, eos, + 0x03C0, 0x03A0, 0x03D6, eos, + 0x03C1, 0x03A1, 0x03F1, eos, // 761 + 0x03C3, 0x03A3, 0x03C2, eos, + 0x03C4, 0x03A4, eos, + 0x03C5, 0x03A5, eos, // 772 + 0x03C6, 0x03A6, 0x03D5, eos, + 0x03C7, 0x03A7, eos, + 0x03C8, 0x03A8, eos, // 782 + 0x03C9, 0x03A9, 0x2126, eos, + 0x03CA, 0x03AA, eos, + 0x03CB, 0x03AB, eos, // 792 + 0x03D7, 0x03CF, eos, + 0x03D9, 0x03D8, eos, + 0x03DB, 0x03DA, eos, // 801 + 0x03DD, 0x03DC, eos, + 0x03DF, 0x03DE, eos, + 0x03E1, 0x03E0, eos, // 810 + 0x03E3, 0x03E2, eos, + 0x03E5, 0x03E4, eos, + 0x03E7, 0x03E6, eos, + 0x03E9, 0x03E8, eos, // 822 + 0x03EB, 0x03EA, eos, + 0x03ED, 0x03EC, eos, + 0x03EF, 0x03EE, eos, // 831 + 0x03F8, 0x03F7, eos, + 0x03F2, 0x03F9, eos, + 0x03FB, 0x03FA, eos, // 840 + 0x037B, 0x03FD, eos, + 0x037C, 0x03FE, eos, + 0x037D, 0x03FF, eos, + 0x0450, 0x0400, eos, // 852 + 0x0451, 0x0401, eos, + 0x0452, 0x0402, eos, + 0x0453, 0x0403, eos, // 861 + 0x0454, 0x0404, eos, + 0x0455, 0x0405, eos, + 0x0456, 0x0406, eos, // 870 + 0x0457, 0x0407, eos, + 0x0458, 0x0408, eos, + 0x0459, 0x0409, eos, + 0x045A, 0x040A, eos, // 882 + 0x045B, 0x040B, eos, + 0x045C, 0x040C, eos, + 0x045D, 0x040D, eos, // 891 + 0x045E, 0x040E, eos, + 0x045F, 0x040F, eos, + 0x0430, 0x0410, eos, // 900 + 0x0431, 0x0411, eos, + 0x0432, 0x0412, 0x1C80, eos, + 0x0433, 0x0413, eos, // 910 + 0x0434, 0x0414, 0x1C81, eos, + 0x0435, 0x0415, eos, + 0x0436, 0x0416, eos, // 920 + 0x0437, 0x0417, eos, + 0x0438, 0x0418, eos, + 0x0439, 0x0419, eos, + 0x043A, 0x041A, eos, // 932 + 0x043B, 0x041B, eos, + 0x043C, 0x041C, eos, + 0x043D, 0x041D, eos, // 941 + 0x043E, 0x041E, 0x1C82, eos, + 0x043F, 0x041F, eos, + 0x0440, 0x0420, eos, // 951 + 0x0441, 0x0421, 0x1C83, eos, + 0x0442, 0x0422, 0x1C84, 0x1C85, eos, + 0x0443, 0x0423, eos, // 963 + 0x0444, 0x0424, eos, + 0x0445, 0x0425, eos, + 0x0446, 0x0426, eos, // 972 + 0x0447, 0x0427, eos, + 0x0448, 0x0428, eos, + 0x0449, 0x0429, eos, // 981 + 0x044A, 0x042A, 0x1C86, eos, + 0x044B, 0x042B, eos, + 0x044C, 0x042C, eos, // 991 + 0x044D, 0x042D, eos, + 0x044E, 0x042E, eos, + 0x044F, 0x042F, eos, // 1000 + 0x0461, 0x0460, eos, + 0x0463, 0x0462, 0x1C87, eos, + 0x0465, 0x0464, eos, // 1010 + 0x0467, 0x0466, eos, + 0x0469, 0x0468, eos, + 0x046B, 0x046A, eos, + 0x046D, 0x046C, eos, // 1022 + 0x046F, 0x046E, eos, + 0x0471, 0x0470, eos, + 0x0473, 0x0472, eos, // 1031 + 0x0475, 0x0474, eos, + 0x0477, 0x0476, eos, + 0x0479, 0x0478, eos, // 1040 + 0x047B, 0x047A, eos, + 0x047D, 0x047C, eos, + 0x047F, 0x047E, eos, + 0x0481, 0x0480, eos, // 1052 + 0x048B, 0x048A, eos, + 0x048D, 0x048C, eos, + 0x048F, 0x048E, eos, // 1061 + 0x0491, 0x0490, eos, + 0x0493, 0x0492, eos, + 0x0495, 0x0494, eos, // 1070 + 0x0497, 0x0496, eos, + 0x0499, 0x0498, eos, + 0x049B, 0x049A, eos, + 0x049D, 0x049C, eos, // 1082 + 0x049F, 0x049E, eos, + 0x04A1, 0x04A0, eos, + 0x04A3, 0x04A2, eos, // 1091 + 0x04A5, 0x04A4, eos, + 0x04A7, 0x04A6, eos, + 0x04A9, 0x04A8, eos, // 1100 + 0x04AB, 0x04AA, eos, + 0x04AD, 0x04AC, eos, + 0x04AF, 0x04AE, eos, + 0x04B1, 0x04B0, eos, // 1112 + 0x04B3, 0x04B2, eos, + 0x04B5, 0x04B4, eos, + 0x04B7, 0x04B6, eos, // 1121 + 0x04B9, 0x04B8, eos, + 0x04BB, 0x04BA, eos, + 0x04BD, 0x04BC, eos, // 1130 + 0x04BF, 0x04BE, eos, + 0x04CF, 0x04C0, eos, + 0x04C2, 0x04C1, eos, + 0x04C4, 0x04C3, eos, // 1142 + 0x04C6, 0x04C5, eos, + 0x04C8, 0x04C7, eos, + 0x04CA, 0x04C9, eos, // 1151 + 0x04CC, 0x04CB, eos, + 0x04CE, 0x04CD, eos, + 0x04D1, 0x04D0, eos, // 1160 + 0x04D3, 0x04D2, eos, + 0x04D5, 0x04D4, eos, + 0x04D7, 0x04D6, eos, + 0x04D9, 0x04D8, eos, // 1172 + 0x04DB, 0x04DA, eos, + 0x04DD, 0x04DC, eos, + 0x04DF, 0x04DE, eos, // 1181 + 0x04E1, 0x04E0, eos, + 0x04E3, 0x04E2, eos, + 0x04E5, 0x04E4, eos, // 1190 + 0x04E7, 0x04E6, eos, + 0x04E9, 0x04E8, eos, + 0x04EB, 0x04EA, eos, + 0x04ED, 0x04EC, eos, // 1202 + 0x04EF, 0x04EE, eos, + 0x04F1, 0x04F0, eos, + 0x04F3, 0x04F2, eos, // 1211 + 0x04F5, 0x04F4, eos, + 0x04F7, 0x04F6, eos, + 0x04F9, 0x04F8, eos, // 1220 + 0x04FB, 0x04FA, eos, + 0x04FD, 0x04FC, eos, + 0x04FF, 0x04FE, eos, + 0x0501, 0x0500, eos, // 1232 + 0x0503, 0x0502, eos, + 0x0505, 0x0504, eos, + 0x0507, 0x0506, eos, // 1241 + 0x0509, 0x0508, eos, + 0x050B, 0x050A, eos, + 0x050D, 0x050C, eos, // 1250 + 0x050F, 0x050E, eos, + 0x0511, 0x0510, eos, + 0x0513, 0x0512, eos, + 0x0515, 0x0514, eos, // 1262 + 0x0517, 0x0516, eos, + 0x0519, 0x0518, eos, + 0x051B, 0x051A, eos, // 1271 + 0x051D, 0x051C, eos, + 0x051F, 0x051E, eos, + 0x0521, 0x0520, eos, // 1280 + 0x0523, 0x0522, eos, + 0x0525, 0x0524, eos, + 0x0527, 0x0526, eos, + 0x0529, 0x0528, eos, // 1292 + 0x052B, 0x052A, eos, + 0x052D, 0x052C, eos, + 0x052F, 0x052E, eos, // 1301 + 0x0561, 0x0531, eos, + 0x0562, 0x0532, eos, + 0x0563, 0x0533, eos, // 1310 + 0x0564, 0x0534, eos, + 0x0565, 0x0535, eos, + 0x0566, 0x0536, eos, + 0x0567, 0x0537, eos, // 1322 + 0x0568, 0x0538, eos, + 0x0569, 0x0539, eos, + 0x056A, 0x053A, eos, // 1331 + 0x056B, 0x053B, eos, + 0x056C, 0x053C, eos, + 0x056D, 0x053D, eos, // 1340 + 0x056E, 0x053E, eos, + 0x056F, 0x053F, eos, + 0x0570, 0x0540, eos, + 0x0571, 0x0541, eos, // 1352 + 0x0572, 0x0542, eos, + 0x0573, 0x0543, eos, + 0x0574, 0x0544, eos, // 1361 + 0x0575, 0x0545, eos, + 0x0576, 0x0546, eos, + 0x0577, 0x0547, eos, // 1370 + 0x0578, 0x0548, eos, + 0x0579, 0x0549, eos, + 0x057A, 0x054A, eos, + 0x057B, 0x054B, eos, // 1382 + 0x057C, 0x054C, eos, + 0x057D, 0x054D, eos, + 0x057E, 0x054E, eos, // 1391 + 0x057F, 0x054F, eos, + 0x0580, 0x0550, eos, + 0x0581, 0x0551, eos, // 1400 + 0x0582, 0x0552, eos, + 0x0583, 0x0553, eos, + 0x0584, 0x0554, eos, + 0x0585, 0x0555, eos, // 1412 + 0x0586, 0x0556, eos, + 0x2D00, 0x10A0, eos, + 0x2D01, 0x10A1, eos, // 1421 + 0x2D02, 0x10A2, eos, + 0x2D03, 0x10A3, eos, + 0x2D04, 0x10A4, eos, // 1430 + 0x2D05, 0x10A5, eos, + 0x2D06, 0x10A6, eos, + 0x2D07, 0x10A7, eos, + 0x2D08, 0x10A8, eos, // 1442 + 0x2D09, 0x10A9, eos, + 0x2D0A, 0x10AA, eos, + 0x2D0B, 0x10AB, eos, // 1451 + 0x2D0C, 0x10AC, eos, + 0x2D0D, 0x10AD, eos, + 0x2D0E, 0x10AE, eos, // 1460 + 0x2D0F, 0x10AF, eos, + 0x2D10, 0x10B0, eos, + 0x2D11, 0x10B1, eos, + 0x2D12, 0x10B2, eos, // 1472 + 0x2D13, 0x10B3, eos, + 0x2D14, 0x10B4, eos, + 0x2D15, 0x10B5, eos, // 1481 + 0x2D16, 0x10B6, eos, + 0x2D17, 0x10B7, eos, + 0x2D18, 0x10B8, eos, // 1490 + 0x2D19, 0x10B9, eos, + 0x2D1A, 0x10BA, eos, + 0x2D1B, 0x10BB, eos, + 0x2D1C, 0x10BC, eos, // 1502 + 0x2D1D, 0x10BD, eos, + 0x2D1E, 0x10BE, eos, + 0x2D1F, 0x10BF, eos, // 1511 + 0x2D20, 0x10C0, eos, + 0x2D21, 0x10C1, eos, + 0x2D22, 0x10C2, eos, // 1520 + 0x2D23, 0x10C3, eos, + 0x2D24, 0x10C4, eos, + 0x2D25, 0x10C5, eos, + 0x2D27, 0x10C7, eos, // 1532 + 0x2D2D, 0x10CD, eos, + 0x13F0, 0x13F8, eos, + 0x13F1, 0x13F9, eos, // 1541 + 0x13F2, 0x13FA, eos, + 0x13F3, 0x13FB, eos, + 0x13F4, 0x13FC, eos, // 1550 + 0x13F5, 0x13FD, eos, + 0xA64B, 0x1C88, 0xA64A, eos, + 0x10D0, 0x1C90, eos, // 1560 + 0x10D1, 0x1C91, eos, + 0x10D2, 0x1C92, eos, + 0x10D3, 0x1C93, eos, + 0x10D4, 0x1C94, eos, // 1572 + 0x10D5, 0x1C95, eos, + 0x10D6, 0x1C96, eos, + 0x10D7, 0x1C97, eos, // 1581 + 0x10D8, 0x1C98, eos, + 0x10D9, 0x1C99, eos, + 0x10DA, 0x1C9A, eos, // 1590 + 0x10DB, 0x1C9B, eos, + 0x10DC, 0x1C9C, eos, + 0x10DD, 0x1C9D, eos, + 0x10DE, 0x1C9E, eos, // 1602 + 0x10DF, 0x1C9F, eos, + 0x10E0, 0x1CA0, eos, + 0x10E1, 0x1CA1, eos, // 1611 + 0x10E2, 0x1CA2, eos, + 0x10E3, 0x1CA3, eos, + 0x10E4, 0x1CA4, eos, // 1620 + 0x10E5, 0x1CA5, eos, + 0x10E6, 0x1CA6, eos, + 0x10E7, 0x1CA7, eos, + 0x10E8, 0x1CA8, eos, // 1632 + 0x10E9, 0x1CA9, eos, + 0x10EA, 0x1CAA, eos, + 0x10EB, 0x1CAB, eos, // 1641 + 0x10EC, 0x1CAC, eos, + 0x10ED, 0x1CAD, eos, + 0x10EE, 0x1CAE, eos, // 1650 + 0x10EF, 0x1CAF, eos, + 0x10F0, 0x1CB0, eos, + 0x10F1, 0x1CB1, eos, + 0x10F2, 0x1CB2, eos, // 1662 + 0x10F3, 0x1CB3, eos, + 0x10F4, 0x1CB4, eos, + 0x10F5, 0x1CB5, eos, // 1671 + 0x10F6, 0x1CB6, eos, + 0x10F7, 0x1CB7, eos, + 0x10F8, 0x1CB8, eos, // 1680 + 0x10F9, 0x1CB9, eos, + 0x10FA, 0x1CBA, eos, + 0x10FD, 0x1CBD, eos, + 0x10FE, 0x1CBE, eos, // 1692 + 0x10FF, 0x1CBF, eos, + 0x1E01, 0x1E00, eos, + 0x1E03, 0x1E02, eos, // 1701 + 0x1E05, 0x1E04, eos, + 0x1E07, 0x1E06, eos, + 0x1E09, 0x1E08, eos, // 1710 + 0x1E0B, 0x1E0A, eos, + 0x1E0D, 0x1E0C, eos, + 0x1E0F, 0x1E0E, eos, + 0x1E11, 0x1E10, eos, // 1722 + 0x1E13, 0x1E12, eos, + 0x1E15, 0x1E14, eos, + 0x1E17, 0x1E16, eos, // 1731 + 0x1E19, 0x1E18, eos, + 0x1E1B, 0x1E1A, eos, + 0x1E1D, 0x1E1C, eos, // 1740 + 0x1E1F, 0x1E1E, eos, + 0x1E21, 0x1E20, eos, + 0x1E23, 0x1E22, eos, + 0x1E25, 0x1E24, eos, // 1752 + 0x1E27, 0x1E26, eos, + 0x1E29, 0x1E28, eos, + 0x1E2B, 0x1E2A, eos, // 1761 + 0x1E2D, 0x1E2C, eos, + 0x1E2F, 0x1E2E, eos, + 0x1E31, 0x1E30, eos, // 1770 + 0x1E33, 0x1E32, eos, + 0x1E35, 0x1E34, eos, + 0x1E37, 0x1E36, eos, + 0x1E39, 0x1E38, eos, // 1782 + 0x1E3B, 0x1E3A, eos, + 0x1E3D, 0x1E3C, eos, + 0x1E3F, 0x1E3E, eos, // 1791 + 0x1E41, 0x1E40, eos, + 0x1E43, 0x1E42, eos, + 0x1E45, 0x1E44, eos, // 1800 + 0x1E47, 0x1E46, eos, + 0x1E49, 0x1E48, eos, + 0x1E4B, 0x1E4A, eos, + 0x1E4D, 0x1E4C, eos, // 1812 + 0x1E4F, 0x1E4E, eos, + 0x1E51, 0x1E50, eos, + 0x1E53, 0x1E52, eos, // 1821 + 0x1E55, 0x1E54, eos, + 0x1E57, 0x1E56, eos, + 0x1E59, 0x1E58, eos, // 1830 + 0x1E5B, 0x1E5A, eos, + 0x1E5D, 0x1E5C, eos, + 0x1E5F, 0x1E5E, eos, + 0x1E61, 0x1E60, 0x1E9B, eos, // 1842 + 0x1E63, 0x1E62, eos, + 0x1E65, 0x1E64, eos, + 0x1E67, 0x1E66, eos, // 1852 + 0x1E69, 0x1E68, eos, + 0x1E6B, 0x1E6A, eos, + 0x1E6D, 0x1E6C, eos, // 1861 + 0x1E6F, 0x1E6E, eos, + 0x1E71, 0x1E70, eos, + 0x1E73, 0x1E72, eos, // 1870 + 0x1E75, 0x1E74, eos, + 0x1E77, 0x1E76, eos, + 0x1E79, 0x1E78, eos, + 0x1E7B, 0x1E7A, eos, // 1882 + 0x1E7D, 0x1E7C, eos, + 0x1E7F, 0x1E7E, eos, + 0x1E81, 0x1E80, eos, // 1891 + 0x1E83, 0x1E82, eos, + 0x1E85, 0x1E84, eos, + 0x1E87, 0x1E86, eos, // 1900 + 0x1E89, 0x1E88, eos, + 0x1E8B, 0x1E8A, eos, + 0x1E8D, 0x1E8C, eos, + 0x1E8F, 0x1E8E, eos, // 1912 + 0x1E91, 0x1E90, eos, + 0x1E93, 0x1E92, eos, + 0x1E95, 0x1E94, eos, // 1921 + 0x00DF, 0x1E9E, eos, + 0x1EA1, 0x1EA0, eos, + 0x1EA3, 0x1EA2, eos, // 1930 + 0x1EA5, 0x1EA4, eos, + 0x1EA7, 0x1EA6, eos, + 0x1EA9, 0x1EA8, eos, + 0x1EAB, 0x1EAA, eos, // 1942 + 0x1EAD, 0x1EAC, eos, + 0x1EAF, 0x1EAE, eos, + 0x1EB1, 0x1EB0, eos, // 1951 + 0x1EB3, 0x1EB2, eos, + 0x1EB5, 0x1EB4, eos, + 0x1EB7, 0x1EB6, eos, // 1960 + 0x1EB9, 0x1EB8, eos, + 0x1EBB, 0x1EBA, eos, + 0x1EBD, 0x1EBC, eos, + 0x1EBF, 0x1EBE, eos, // 1972 + 0x1EC1, 0x1EC0, eos, + 0x1EC3, 0x1EC2, eos, + 0x1EC5, 0x1EC4, eos, // 1981 + 0x1EC7, 0x1EC6, eos, + 0x1EC9, 0x1EC8, eos, + 0x1ECB, 0x1ECA, eos, // 1990 + 0x1ECD, 0x1ECC, eos, + 0x1ECF, 0x1ECE, eos, + 0x1ED1, 0x1ED0, eos, + 0x1ED3, 0x1ED2, eos, // 2002 + 0x1ED5, 0x1ED4, eos, + 0x1ED7, 0x1ED6, eos, + 0x1ED9, 0x1ED8, eos, // 2011 + 0x1EDB, 0x1EDA, eos, + 0x1EDD, 0x1EDC, eos, + 0x1EDF, 0x1EDE, eos, // 2020 + 0x1EE1, 0x1EE0, eos, + 0x1EE3, 0x1EE2, eos, + 0x1EE5, 0x1EE4, eos, + 0x1EE7, 0x1EE6, eos, // 2032 + 0x1EE9, 0x1EE8, eos, + 0x1EEB, 0x1EEA, eos, + 0x1EED, 0x1EEC, eos, // 2041 + 0x1EEF, 0x1EEE, eos, + 0x1EF1, 0x1EF0, eos, + 0x1EF3, 0x1EF2, eos, // 2050 + 0x1EF5, 0x1EF4, eos, + 0x1EF7, 0x1EF6, eos, + 0x1EF9, 0x1EF8, eos, + 0x1EFB, 0x1EFA, eos, // 2062 + 0x1EFD, 0x1EFC, eos, + 0x1EFF, 0x1EFE, eos, + 0x1F00, 0x1F08, eos, // 2071 + 0x1F01, 0x1F09, eos, + 0x1F02, 0x1F0A, eos, + 0x1F03, 0x1F0B, eos, // 2080 + 0x1F04, 0x1F0C, eos, + 0x1F05, 0x1F0D, eos, + 0x1F06, 0x1F0E, eos, + 0x1F07, 0x1F0F, eos, // 2092 + 0x1F10, 0x1F18, eos, + 0x1F11, 0x1F19, eos, + 0x1F12, 0x1F1A, eos, // 2101 + 0x1F13, 0x1F1B, eos, + 0x1F14, 0x1F1C, eos, + 0x1F15, 0x1F1D, eos, // 2110 + 0x1F20, 0x1F28, eos, + 0x1F21, 0x1F29, eos, + 0x1F22, 0x1F2A, eos, + 0x1F23, 0x1F2B, eos, // 2122 + 0x1F24, 0x1F2C, eos, + 0x1F25, 0x1F2D, eos, + 0x1F26, 0x1F2E, eos, // 2131 + 0x1F27, 0x1F2F, eos, + 0x1F30, 0x1F38, eos, + 0x1F31, 0x1F39, eos, // 2140 + 0x1F32, 0x1F3A, eos, + 0x1F33, 0x1F3B, eos, + 0x1F34, 0x1F3C, eos, + 0x1F35, 0x1F3D, eos, // 2152 + 0x1F36, 0x1F3E, eos, + 0x1F37, 0x1F3F, eos, + 0x1F40, 0x1F48, eos, // 2161 + 0x1F41, 0x1F49, eos, + 0x1F42, 0x1F4A, eos, + 0x1F43, 0x1F4B, eos, // 2170 + 0x1F44, 0x1F4C, eos, + 0x1F45, 0x1F4D, eos, + 0x1F51, 0x1F59, eos, + 0x1F53, 0x1F5B, eos, // 2182 + 0x1F55, 0x1F5D, eos, + 0x1F57, 0x1F5F, eos, + 0x1F60, 0x1F68, eos, // 2191 + 0x1F61, 0x1F69, eos, + 0x1F62, 0x1F6A, eos, + 0x1F63, 0x1F6B, eos, // 2200 + 0x1F64, 0x1F6C, eos, + 0x1F65, 0x1F6D, eos, + 0x1F66, 0x1F6E, eos, + 0x1F67, 0x1F6F, eos, // 2212 + 0x1F80, 0x1F88, eos, + 0x1F81, 0x1F89, eos, + 0x1F82, 0x1F8A, eos, // 2221 + 0x1F83, 0x1F8B, eos, + 0x1F84, 0x1F8C, eos, + 0x1F85, 0x1F8D, eos, // 2230 + 0x1F86, 0x1F8E, eos, + 0x1F87, 0x1F8F, eos, + 0x1F90, 0x1F98, eos, + 0x1F91, 0x1F99, eos, // 2242 + 0x1F92, 0x1F9A, eos, + 0x1F93, 0x1F9B, eos, + 0x1F94, 0x1F9C, eos, // 2251 + 0x1F95, 0x1F9D, eos, + 0x1F96, 0x1F9E, eos, + 0x1F97, 0x1F9F, eos, // 2260 + 0x1FA0, 0x1FA8, eos, + 0x1FA1, 0x1FA9, eos, + 0x1FA2, 0x1FAA, eos, + 0x1FA3, 0x1FAB, eos, // 2272 + 0x1FA4, 0x1FAC, eos, + 0x1FA5, 0x1FAD, eos, + 0x1FA6, 0x1FAE, eos, // 2281 + 0x1FA7, 0x1FAF, eos, + 0x1FB0, 0x1FB8, eos, + 0x1FB1, 0x1FB9, eos, // 2290 + 0x1F70, 0x1FBA, eos, + 0x1F71, 0x1FBB, eos, + 0x1FB3, 0x1FBC, eos, + 0x1F72, 0x1FC8, eos, // 2302 + 0x1F73, 0x1FC9, eos, + 0x1F74, 0x1FCA, eos, + 0x1F75, 0x1FCB, eos, // 2311 + 0x1FC3, 0x1FCC, eos, + 0x1FD0, 0x1FD8, eos, + 0x1FD1, 0x1FD9, eos, // 2320 + 0x1F76, 0x1FDA, eos, + 0x1F77, 0x1FDB, eos, + 0x1FE0, 0x1FE8, eos, + 0x1FE1, 0x1FE9, eos, // 2332 + 0x1F7A, 0x1FEA, eos, + 0x1F7B, 0x1FEB, eos, + 0x1FE5, 0x1FEC, eos, // 2341 + 0x1F78, 0x1FF8, eos, + 0x1F79, 0x1FF9, eos, + 0x1F7C, 0x1FFA, eos, // 2350 + 0x1F7D, 0x1FFB, eos, + 0x1FF3, 0x1FFC, eos, + 0x214E, 0x2132, eos, + 0x2170, 0x2160, eos, // 2362 + 0x2171, 0x2161, eos, + 0x2172, 0x2162, eos, + 0x2173, 0x2163, eos, // 2371 + 0x2174, 0x2164, eos, + 0x2175, 0x2165, eos, + 0x2176, 0x2166, eos, // 2380 + 0x2177, 0x2167, eos, + 0x2178, 0x2168, eos, + 0x2179, 0x2169, eos, + 0x217A, 0x216A, eos, // 2392 + 0x217B, 0x216B, eos, + 0x217C, 0x216C, eos, + 0x217D, 0x216D, eos, // 2401 + 0x217E, 0x216E, eos, + 0x217F, 0x216F, eos, + 0x2184, 0x2183, eos, // 2410 + 0x24D0, 0x24B6, eos, + 0x24D1, 0x24B7, eos, + 0x24D2, 0x24B8, eos, + 0x24D3, 0x24B9, eos, // 2422 + 0x24D4, 0x24BA, eos, + 0x24D5, 0x24BB, eos, + 0x24D6, 0x24BC, eos, // 2431 + 0x24D7, 0x24BD, eos, + 0x24D8, 0x24BE, eos, + 0x24D9, 0x24BF, eos, // 2440 + 0x24DA, 0x24C0, eos, + 0x24DB, 0x24C1, eos, + 0x24DC, 0x24C2, eos, + 0x24DD, 0x24C3, eos, // 2452 + 0x24DE, 0x24C4, eos, + 0x24DF, 0x24C5, eos, + 0x24E0, 0x24C6, eos, // 2461 + 0x24E1, 0x24C7, eos, + 0x24E2, 0x24C8, eos, + 0x24E3, 0x24C9, eos, // 2470 + 0x24E4, 0x24CA, eos, + 0x24E5, 0x24CB, eos, + 0x24E6, 0x24CC, eos, + 0x24E7, 0x24CD, eos, // 2482 + 0x24E8, 0x24CE, eos, + 0x24E9, 0x24CF, eos, + 0x2C30, 0x2C00, eos, // 2491 + 0x2C31, 0x2C01, eos, + 0x2C32, 0x2C02, eos, + 0x2C33, 0x2C03, eos, // 2500 + 0x2C34, 0x2C04, eos, + 0x2C35, 0x2C05, eos, + 0x2C36, 0x2C06, eos, + 0x2C37, 0x2C07, eos, // 2512 + 0x2C38, 0x2C08, eos, + 0x2C39, 0x2C09, eos, + 0x2C3A, 0x2C0A, eos, // 2521 + 0x2C3B, 0x2C0B, eos, + 0x2C3C, 0x2C0C, eos, + 0x2C3D, 0x2C0D, eos, // 2530 + 0x2C3E, 0x2C0E, eos, + 0x2C3F, 0x2C0F, eos, + 0x2C40, 0x2C10, eos, + 0x2C41, 0x2C11, eos, // 2542 + 0x2C42, 0x2C12, eos, + 0x2C43, 0x2C13, eos, + 0x2C44, 0x2C14, eos, // 2551 + 0x2C45, 0x2C15, eos, + 0x2C46, 0x2C16, eos, + 0x2C47, 0x2C17, eos, // 2560 + 0x2C48, 0x2C18, eos, + 0x2C49, 0x2C19, eos, + 0x2C4A, 0x2C1A, eos, + 0x2C4B, 0x2C1B, eos, // 2572 + 0x2C4C, 0x2C1C, eos, + 0x2C4D, 0x2C1D, eos, + 0x2C4E, 0x2C1E, eos, // 2581 + 0x2C4F, 0x2C1F, eos, + 0x2C50, 0x2C20, eos, + 0x2C51, 0x2C21, eos, // 2590 + 0x2C52, 0x2C22, eos, + 0x2C53, 0x2C23, eos, + 0x2C54, 0x2C24, eos, + 0x2C55, 0x2C25, eos, // 2602 + 0x2C56, 0x2C26, eos, + 0x2C57, 0x2C27, eos, + 0x2C58, 0x2C28, eos, // 2611 + 0x2C59, 0x2C29, eos, + 0x2C5A, 0x2C2A, eos, + 0x2C5B, 0x2C2B, eos, // 2620 + 0x2C5C, 0x2C2C, eos, + 0x2C5D, 0x2C2D, eos, + 0x2C5E, 0x2C2E, eos, + 0x2C5F, 0x2C2F, eos, // 2632 + 0x2C61, 0x2C60, eos, + 0x026B, 0x2C62, eos, + 0x1D7D, 0x2C63, eos, // 2641 + 0x027D, 0x2C64, eos, + 0x2C68, 0x2C67, eos, + 0x2C6A, 0x2C69, eos, // 2650 + 0x2C6C, 0x2C6B, eos, + 0x0251, 0x2C6D, eos, + 0x0271, 0x2C6E, eos, + 0x0250, 0x2C6F, eos, // 2662 + 0x0252, 0x2C70, eos, + 0x2C73, 0x2C72, eos, + 0x2C76, 0x2C75, eos, // 2671 + 0x023F, 0x2C7E, eos, + 0x0240, 0x2C7F, eos, + 0x2C81, 0x2C80, eos, // 2680 + 0x2C83, 0x2C82, eos, + 0x2C85, 0x2C84, eos, + 0x2C87, 0x2C86, eos, + 0x2C89, 0x2C88, eos, // 2692 + 0x2C8B, 0x2C8A, eos, + 0x2C8D, 0x2C8C, eos, + 0x2C8F, 0x2C8E, eos, // 2701 + 0x2C91, 0x2C90, eos, + 0x2C93, 0x2C92, eos, + 0x2C95, 0x2C94, eos, // 2710 + 0x2C97, 0x2C96, eos, + 0x2C99, 0x2C98, eos, + 0x2C9B, 0x2C9A, eos, + 0x2C9D, 0x2C9C, eos, // 2722 + 0x2C9F, 0x2C9E, eos, + 0x2CA1, 0x2CA0, eos, + 0x2CA3, 0x2CA2, eos, // 2731 + 0x2CA5, 0x2CA4, eos, + 0x2CA7, 0x2CA6, eos, + 0x2CA9, 0x2CA8, eos, // 2740 + 0x2CAB, 0x2CAA, eos, + 0x2CAD, 0x2CAC, eos, + 0x2CAF, 0x2CAE, eos, + 0x2CB1, 0x2CB0, eos, // 2752 + 0x2CB3, 0x2CB2, eos, + 0x2CB5, 0x2CB4, eos, + 0x2CB7, 0x2CB6, eos, // 2761 + 0x2CB9, 0x2CB8, eos, + 0x2CBB, 0x2CBA, eos, + 0x2CBD, 0x2CBC, eos, // 2770 + 0x2CBF, 0x2CBE, eos, + 0x2CC1, 0x2CC0, eos, + 0x2CC3, 0x2CC2, eos, + 0x2CC5, 0x2CC4, eos, // 2782 + 0x2CC7, 0x2CC6, eos, + 0x2CC9, 0x2CC8, eos, + 0x2CCB, 0x2CCA, eos, // 2791 + 0x2CCD, 0x2CCC, eos, + 0x2CCF, 0x2CCE, eos, + 0x2CD1, 0x2CD0, eos, // 2800 + 0x2CD3, 0x2CD2, eos, + 0x2CD5, 0x2CD4, eos, + 0x2CD7, 0x2CD6, eos, + 0x2CD9, 0x2CD8, eos, // 2812 + 0x2CDB, 0x2CDA, eos, + 0x2CDD, 0x2CDC, eos, + 0x2CDF, 0x2CDE, eos, // 2821 + 0x2CE1, 0x2CE0, eos, + 0x2CE3, 0x2CE2, eos, + 0x2CEC, 0x2CEB, eos, // 2830 + 0x2CEE, 0x2CED, eos, + 0x2CF3, 0x2CF2, eos, + 0xA641, 0xA640, eos, + 0xA643, 0xA642, eos, // 2842 + 0xA645, 0xA644, eos, + 0xA647, 0xA646, eos, + 0xA649, 0xA648, eos, // 2851 + 0xA64D, 0xA64C, eos, + 0xA64F, 0xA64E, eos, + 0xA651, 0xA650, eos, // 2860 + 0xA653, 0xA652, eos, + 0xA655, 0xA654, eos, + 0xA657, 0xA656, eos, + 0xA659, 0xA658, eos, // 2872 + 0xA65B, 0xA65A, eos, + 0xA65D, 0xA65C, eos, + 0xA65F, 0xA65E, eos, // 2881 + 0xA661, 0xA660, eos, + 0xA663, 0xA662, eos, + 0xA665, 0xA664, eos, // 2890 + 0xA667, 0xA666, eos, + 0xA669, 0xA668, eos, + 0xA66B, 0xA66A, eos, + 0xA66D, 0xA66C, eos, // 2902 + 0xA681, 0xA680, eos, + 0xA683, 0xA682, eos, + 0xA685, 0xA684, eos, // 2911 + 0xA687, 0xA686, eos, + 0xA689, 0xA688, eos, + 0xA68B, 0xA68A, eos, // 2920 + 0xA68D, 0xA68C, eos, + 0xA68F, 0xA68E, eos, + 0xA691, 0xA690, eos, + 0xA693, 0xA692, eos, // 2932 + 0xA695, 0xA694, eos, + 0xA697, 0xA696, eos, + 0xA699, 0xA698, eos, // 2941 + 0xA69B, 0xA69A, eos, + 0xA723, 0xA722, eos, + 0xA725, 0xA724, eos, // 2950 + 0xA727, 0xA726, eos, + 0xA729, 0xA728, eos, + 0xA72B, 0xA72A, eos, + 0xA72D, 0xA72C, eos, // 2962 + 0xA72F, 0xA72E, eos, + 0xA733, 0xA732, eos, + 0xA735, 0xA734, eos, // 2971 + 0xA737, 0xA736, eos, + 0xA739, 0xA738, eos, + 0xA73B, 0xA73A, eos, // 2980 + 0xA73D, 0xA73C, eos, + 0xA73F, 0xA73E, eos, + 0xA741, 0xA740, eos, + 0xA743, 0xA742, eos, // 2992 + 0xA745, 0xA744, eos, + 0xA747, 0xA746, eos, + 0xA749, 0xA748, eos, // 3001 + 0xA74B, 0xA74A, eos, + 0xA74D, 0xA74C, eos, + 0xA74F, 0xA74E, eos, // 3010 + 0xA751, 0xA750, eos, + 0xA753, 0xA752, eos, + 0xA755, 0xA754, eos, + 0xA757, 0xA756, eos, // 3022 + 0xA759, 0xA758, eos, + 0xA75B, 0xA75A, eos, + 0xA75D, 0xA75C, eos, // 3031 + 0xA75F, 0xA75E, eos, + 0xA761, 0xA760, eos, + 0xA763, 0xA762, eos, // 3040 + 0xA765, 0xA764, eos, + 0xA767, 0xA766, eos, + 0xA769, 0xA768, eos, + 0xA76B, 0xA76A, eos, // 3052 + 0xA76D, 0xA76C, eos, + 0xA76F, 0xA76E, eos, + 0xA77A, 0xA779, eos, // 3061 + 0xA77C, 0xA77B, eos, + 0x1D79, 0xA77D, eos, + 0xA77F, 0xA77E, eos, // 3070 + 0xA781, 0xA780, eos, + 0xA783, 0xA782, eos, + 0xA785, 0xA784, eos, + 0xA787, 0xA786, eos, // 3082 + 0xA78C, 0xA78B, eos, + 0x0265, 0xA78D, eos, + 0xA791, 0xA790, eos, // 3091 + 0xA793, 0xA792, eos, + 0xA797, 0xA796, eos, + 0xA799, 0xA798, eos, // 3100 + 0xA79B, 0xA79A, eos, + 0xA79D, 0xA79C, eos, + 0xA79F, 0xA79E, eos, + 0xA7A1, 0xA7A0, eos, // 3112 + 0xA7A3, 0xA7A2, eos, + 0xA7A5, 0xA7A4, eos, + 0xA7A7, 0xA7A6, eos, // 3121 + 0xA7A9, 0xA7A8, eos, + 0x0266, 0xA7AA, eos, + 0x025C, 0xA7AB, eos, // 3130 + 0x0261, 0xA7AC, eos, + 0x026C, 0xA7AD, eos, + 0x026A, 0xA7AE, eos, + 0x029E, 0xA7B0, eos, // 3142 + 0x0287, 0xA7B1, eos, + 0x029D, 0xA7B2, eos, + 0xAB53, 0xA7B3, eos, // 3151 + 0xA7B5, 0xA7B4, eos, + 0xA7B7, 0xA7B6, eos, + 0xA7B9, 0xA7B8, eos, // 3160 + 0xA7BB, 0xA7BA, eos, + 0xA7BD, 0xA7BC, eos, + 0xA7BF, 0xA7BE, eos, + 0xA7C1, 0xA7C0, eos, // 3172 + 0xA7C3, 0xA7C2, eos, + 0xA794, 0xA7C4, eos, + 0x0282, 0xA7C5, eos, // 3181 + 0x1D8E, 0xA7C6, eos, + 0xA7C8, 0xA7C7, eos, + 0xA7CA, 0xA7C9, eos, // 3190 + 0xA7D1, 0xA7D0, eos, + 0xA7D7, 0xA7D6, eos, + 0xA7D9, 0xA7D8, eos, + 0xA7F6, 0xA7F5, eos, // 3202 + 0x13A0, 0xAB70, eos, + 0x13A1, 0xAB71, eos, + 0x13A2, 0xAB72, eos, // 3211 + 0x13A3, 0xAB73, eos, + 0x13A4, 0xAB74, eos, + 0x13A5, 0xAB75, eos, // 3220 + 0x13A6, 0xAB76, eos, + 0x13A7, 0xAB77, eos, + 0x13A8, 0xAB78, eos, + 0x13A9, 0xAB79, eos, // 3232 + 0x13AA, 0xAB7A, eos, + 0x13AB, 0xAB7B, eos, + 0x13AC, 0xAB7C, eos, // 3241 + 0x13AD, 0xAB7D, eos, + 0x13AE, 0xAB7E, eos, + 0x13AF, 0xAB7F, eos, // 3250 + 0x13B0, 0xAB80, eos, + 0x13B1, 0xAB81, eos, + 0x13B2, 0xAB82, eos, + 0x13B3, 0xAB83, eos, // 3262 + 0x13B4, 0xAB84, eos, + 0x13B5, 0xAB85, eos, + 0x13B6, 0xAB86, eos, // 3271 + 0x13B7, 0xAB87, eos, + 0x13B8, 0xAB88, eos, + 0x13B9, 0xAB89, eos, // 3280 + 0x13BA, 0xAB8A, eos, + 0x13BB, 0xAB8B, eos, + 0x13BC, 0xAB8C, eos, + 0x13BD, 0xAB8D, eos, // 3292 + 0x13BE, 0xAB8E, eos, + 0x13BF, 0xAB8F, eos, + 0x13C0, 0xAB90, eos, // 3301 + 0x13C1, 0xAB91, eos, + 0x13C2, 0xAB92, eos, + 0x13C3, 0xAB93, eos, // 3310 + 0x13C4, 0xAB94, eos, + 0x13C5, 0xAB95, eos, + 0x13C6, 0xAB96, eos, + 0x13C7, 0xAB97, eos, // 3322 + 0x13C8, 0xAB98, eos, + 0x13C9, 0xAB99, eos, + 0x13CA, 0xAB9A, eos, // 3331 + 0x13CB, 0xAB9B, eos, + 0x13CC, 0xAB9C, eos, + 0x13CD, 0xAB9D, eos, // 3340 + 0x13CE, 0xAB9E, eos, + 0x13CF, 0xAB9F, eos, + 0x13D0, 0xABA0, eos, + 0x13D1, 0xABA1, eos, // 3352 + 0x13D2, 0xABA2, eos, + 0x13D3, 0xABA3, eos, + 0x13D4, 0xABA4, eos, // 3361 + 0x13D5, 0xABA5, eos, + 0x13D6, 0xABA6, eos, + 0x13D7, 0xABA7, eos, // 3370 + 0x13D8, 0xABA8, eos, + 0x13D9, 0xABA9, eos, + 0x13DA, 0xABAA, eos, + 0x13DB, 0xABAB, eos, // 3382 + 0x13DC, 0xABAC, eos, + 0x13DD, 0xABAD, eos, + 0x13DE, 0xABAE, eos, // 3391 + 0x13DF, 0xABAF, eos, + 0x13E0, 0xABB0, eos, + 0x13E1, 0xABB1, eos, // 3400 + 0x13E2, 0xABB2, eos, + 0x13E3, 0xABB3, eos, + 0x13E4, 0xABB4, eos, + 0x13E5, 0xABB5, eos, // 3412 + 0x13E6, 0xABB6, eos, + 0x13E7, 0xABB7, eos, + 0x13E8, 0xABB8, eos, // 3421 + 0x13E9, 0xABB9, eos, + 0x13EA, 0xABBA, eos, + 0x13EB, 0xABBB, eos, // 3430 + 0x13EC, 0xABBC, eos, + 0x13ED, 0xABBD, eos, + 0x13EE, 0xABBE, eos, + 0x13EF, 0xABBF, eos, // 3442 + 0xFF41, 0xFF21, eos, + 0xFF42, 0xFF22, eos, + 0xFF43, 0xFF23, eos, // 3451 + 0xFF44, 0xFF24, eos, + 0xFF45, 0xFF25, eos, + 0xFF46, 0xFF26, eos, // 3460 + 0xFF47, 0xFF27, eos, + 0xFF48, 0xFF28, eos, + 0xFF49, 0xFF29, eos, + 0xFF4A, 0xFF2A, eos, // 3472 + 0xFF4B, 0xFF2B, eos, + 0xFF4C, 0xFF2C, eos, + 0xFF4D, 0xFF2D, eos, // 3481 + 0xFF4E, 0xFF2E, eos, + 0xFF4F, 0xFF2F, eos, + 0xFF50, 0xFF30, eos, // 3490 + 0xFF51, 0xFF31, eos, + 0xFF52, 0xFF32, eos, + 0xFF53, 0xFF33, eos, + 0xFF54, 0xFF34, eos, // 3502 + 0xFF55, 0xFF35, eos, + 0xFF56, 0xFF36, eos, + 0xFF57, 0xFF37, eos, // 3511 + 0xFF58, 0xFF38, eos, + 0xFF59, 0xFF39, eos, + 0xFF5A, 0xFF3A, eos, // 3520 + 0x10428, 0x10400, eos, + 0x10429, 0x10401, eos, + 0x1042A, 0x10402, eos, + 0x1042B, 0x10403, eos, // 3532 + 0x1042C, 0x10404, eos, + 0x1042D, 0x10405, eos, + 0x1042E, 0x10406, eos, // 3541 + 0x1042F, 0x10407, eos, + 0x10430, 0x10408, eos, + 0x10431, 0x10409, eos, // 3550 + 0x10432, 0x1040A, eos, + 0x10433, 0x1040B, eos, + 0x10434, 0x1040C, eos, + 0x10435, 0x1040D, eos, // 3562 + 0x10436, 0x1040E, eos, + 0x10437, 0x1040F, eos, + 0x10438, 0x10410, eos, // 3571 + 0x10439, 0x10411, eos, + 0x1043A, 0x10412, eos, + 0x1043B, 0x10413, eos, // 3580 + 0x1043C, 0x10414, eos, + 0x1043D, 0x10415, eos, + 0x1043E, 0x10416, eos, + 0x1043F, 0x10417, eos, // 3592 + 0x10440, 0x10418, eos, + 0x10441, 0x10419, eos, + 0x10442, 0x1041A, eos, // 3601 + 0x10443, 0x1041B, eos, + 0x10444, 0x1041C, eos, + 0x10445, 0x1041D, eos, // 3610 + 0x10446, 0x1041E, eos, + 0x10447, 0x1041F, eos, + 0x10448, 0x10420, eos, + 0x10449, 0x10421, eos, // 3622 + 0x1044A, 0x10422, eos, + 0x1044B, 0x10423, eos, + 0x1044C, 0x10424, eos, // 3631 + 0x1044D, 0x10425, eos, + 0x1044E, 0x10426, eos, + 0x1044F, 0x10427, eos, // 3640 + 0x104D8, 0x104B0, eos, + 0x104D9, 0x104B1, eos, + 0x104DA, 0x104B2, eos, + 0x104DB, 0x104B3, eos, // 3652 + 0x104DC, 0x104B4, eos, + 0x104DD, 0x104B5, eos, + 0x104DE, 0x104B6, eos, // 3661 + 0x104DF, 0x104B7, eos, + 0x104E0, 0x104B8, eos, + 0x104E1, 0x104B9, eos, // 3670 + 0x104E2, 0x104BA, eos, + 0x104E3, 0x104BB, eos, + 0x104E4, 0x104BC, eos, + 0x104E5, 0x104BD, eos, // 3682 + 0x104E6, 0x104BE, eos, + 0x104E7, 0x104BF, eos, + 0x104E8, 0x104C0, eos, // 3691 + 0x104E9, 0x104C1, eos, + 0x104EA, 0x104C2, eos, + 0x104EB, 0x104C3, eos, // 3700 + 0x104EC, 0x104C4, eos, + 0x104ED, 0x104C5, eos, + 0x104EE, 0x104C6, eos, + 0x104EF, 0x104C7, eos, // 3712 + 0x104F0, 0x104C8, eos, + 0x104F1, 0x104C9, eos, + 0x104F2, 0x104CA, eos, // 3721 + 0x104F3, 0x104CB, eos, + 0x104F4, 0x104CC, eos, + 0x104F5, 0x104CD, eos, // 3730 + 0x104F6, 0x104CE, eos, + 0x104F7, 0x104CF, eos, + 0x104F8, 0x104D0, eos, + 0x104F9, 0x104D1, eos, // 3742 + 0x104FA, 0x104D2, eos, + 0x104FB, 0x104D3, eos, + 0x10597, 0x10570, eos, // 3751 + 0x10598, 0x10571, eos, + 0x10599, 0x10572, eos, + 0x1059A, 0x10573, eos, // 3760 + 0x1059B, 0x10574, eos, + 0x1059C, 0x10575, eos, + 0x1059D, 0x10576, eos, + 0x1059E, 0x10577, eos, // 3772 + 0x1059F, 0x10578, eos, + 0x105A0, 0x10579, eos, + 0x105A1, 0x1057A, eos, // 3781 + 0x105A3, 0x1057C, eos, + 0x105A4, 0x1057D, eos, + 0x105A5, 0x1057E, eos, // 3790 + 0x105A6, 0x1057F, eos, + 0x105A7, 0x10580, eos, + 0x105A8, 0x10581, eos, + 0x105A9, 0x10582, eos, // 3802 + 0x105AA, 0x10583, eos, + 0x105AB, 0x10584, eos, + 0x105AC, 0x10585, eos, // 3811 + 0x105AD, 0x10586, eos, + 0x105AE, 0x10587, eos, + 0x105AF, 0x10588, eos, // 3820 + 0x105B0, 0x10589, eos, + 0x105B1, 0x1058A, eos, + 0x105B3, 0x1058C, eos, + 0x105B4, 0x1058D, eos, // 3832 + 0x105B5, 0x1058E, eos, + 0x105B6, 0x1058F, eos, + 0x105B7, 0x10590, eos, // 3841 + 0x105B8, 0x10591, eos, + 0x105B9, 0x10592, eos, + 0x105BB, 0x10594, eos, // 3850 + 0x105BC, 0x10595, eos, + 0x10CC0, 0x10C80, eos, + 0x10CC1, 0x10C81, eos, + 0x10CC2, 0x10C82, eos, // 3862 + 0x10CC3, 0x10C83, eos, + 0x10CC4, 0x10C84, eos, + 0x10CC5, 0x10C85, eos, // 3871 + 0x10CC6, 0x10C86, eos, + 0x10CC7, 0x10C87, eos, + 0x10CC8, 0x10C88, eos, // 3880 + 0x10CC9, 0x10C89, eos, + 0x10CCA, 0x10C8A, eos, + 0x10CCB, 0x10C8B, eos, + 0x10CCC, 0x10C8C, eos, // 3892 + 0x10CCD, 0x10C8D, eos, + 0x10CCE, 0x10C8E, eos, + 0x10CCF, 0x10C8F, eos, // 3901 + 0x10CD0, 0x10C90, eos, + 0x10CD1, 0x10C91, eos, + 0x10CD2, 0x10C92, eos, // 3910 + 0x10CD3, 0x10C93, eos, + 0x10CD4, 0x10C94, eos, + 0x10CD5, 0x10C95, eos, + 0x10CD6, 0x10C96, eos, // 3922 + 0x10CD7, 0x10C97, eos, + 0x10CD8, 0x10C98, eos, + 0x10CD9, 0x10C99, eos, // 3931 + 0x10CDA, 0x10C9A, eos, + 0x10CDB, 0x10C9B, eos, + 0x10CDC, 0x10C9C, eos, // 3940 + 0x10CDD, 0x10C9D, eos, + 0x10CDE, 0x10C9E, eos, + 0x10CDF, 0x10C9F, eos, + 0x10CE0, 0x10CA0, eos, // 3952 + 0x10CE1, 0x10CA1, eos, + 0x10CE2, 0x10CA2, eos, + 0x10CE3, 0x10CA3, eos, // 3961 + 0x10CE4, 0x10CA4, eos, + 0x10CE5, 0x10CA5, eos, + 0x10CE6, 0x10CA6, eos, // 3970 + 0x10CE7, 0x10CA7, eos, + 0x10CE8, 0x10CA8, eos, + 0x10CE9, 0x10CA9, eos, + 0x10CEA, 0x10CAA, eos, // 3982 + 0x10CEB, 0x10CAB, eos, + 0x10CEC, 0x10CAC, eos, + 0x10CED, 0x10CAD, eos, // 3991 + 0x10CEE, 0x10CAE, eos, + 0x10CEF, 0x10CAF, eos, + 0x10CF0, 0x10CB0, eos, // 4000 + 0x10CF1, 0x10CB1, eos, + 0x10CF2, 0x10CB2, eos, + 0x118C0, 0x118A0, eos, + 0x118C1, 0x118A1, eos, // 4012 + 0x118C2, 0x118A2, eos, + 0x118C3, 0x118A3, eos, + 0x118C4, 0x118A4, eos, // 4021 + 0x118C5, 0x118A5, eos, + 0x118C6, 0x118A6, eos, + 0x118C7, 0x118A7, eos, // 4030 + 0x118C8, 0x118A8, eos, + 0x118C9, 0x118A9, eos, + 0x118CA, 0x118AA, eos, + 0x118CB, 0x118AB, eos, // 4042 + 0x118CC, 0x118AC, eos, + 0x118CD, 0x118AD, eos, + 0x118CE, 0x118AE, eos, // 4051 + 0x118CF, 0x118AF, eos, + 0x118D0, 0x118B0, eos, + 0x118D1, 0x118B1, eos, // 4060 + 0x118D2, 0x118B2, eos, + 0x118D3, 0x118B3, eos, + 0x118D4, 0x118B4, eos, + 0x118D5, 0x118B5, eos, // 4072 + 0x118D6, 0x118B6, eos, + 0x118D7, 0x118B7, eos, + 0x118D8, 0x118B8, eos, // 4081 + 0x118D9, 0x118B9, eos, + 0x118DA, 0x118BA, eos, + 0x118DB, 0x118BB, eos, // 4090 + 0x118DC, 0x118BC, eos, + 0x118DD, 0x118BD, eos, + 0x118DE, 0x118BE, eos, + 0x118DF, 0x118BF, eos, // 4102 + 0x16E60, 0x16E40, eos, + 0x16E61, 0x16E41, eos, + 0x16E62, 0x16E42, eos, // 4111 + 0x16E63, 0x16E43, eos, + 0x16E64, 0x16E44, eos, + 0x16E65, 0x16E45, eos, // 4120 + 0x16E66, 0x16E46, eos, + 0x16E67, 0x16E47, eos, + 0x16E68, 0x16E48, eos, + 0x16E69, 0x16E49, eos, // 4132 + 0x16E6A, 0x16E4A, eos, + 0x16E6B, 0x16E4B, eos, + 0x16E6C, 0x16E4C, eos, // 4141 + 0x16E6D, 0x16E4D, eos, + 0x16E6E, 0x16E4E, eos, + 0x16E6F, 0x16E4F, eos, // 4150 + 0x16E70, 0x16E50, eos, + 0x16E71, 0x16E51, eos, + 0x16E72, 0x16E52, eos, + 0x16E73, 0x16E53, eos, // 4162 + 0x16E74, 0x16E54, eos, + 0x16E75, 0x16E55, eos, + 0x16E76, 0x16E56, eos, // 4171 + 0x16E77, 0x16E57, eos, + 0x16E78, 0x16E58, eos, + 0x16E79, 0x16E59, eos, // 4180 + 0x16E7A, 0x16E5A, eos, + 0x16E7B, 0x16E5B, eos, + 0x16E7C, 0x16E5C, eos, + 0x16E7D, 0x16E5D, eos, // 4192 + 0x16E7E, 0x16E5E, eos, + 0x16E7F, 0x16E5F, eos, + 0x1E922, 0x1E900, eos, // 4201 + 0x1E923, 0x1E901, eos, + 0x1E924, 0x1E902, eos, + 0x1E925, 0x1E903, eos, // 4210 + 0x1E926, 0x1E904, eos, + 0x1E927, 0x1E905, eos, + 0x1E928, 0x1E906, eos, + 0x1E929, 0x1E907, eos, // 4222 + 0x1E92A, 0x1E908, eos, + 0x1E92B, 0x1E909, eos, + 0x1E92C, 0x1E90A, eos, // 4231 + 0x1E92D, 0x1E90B, eos, + 0x1E92E, 0x1E90C, eos, + 0x1E92F, 0x1E90D, eos, // 4240 + 0x1E930, 0x1E90E, eos, + 0x1E931, 0x1E90F, eos, + 0x1E932, 0x1E910, eos, + 0x1E933, 0x1E911, eos, // 4252 + 0x1E934, 0x1E912, eos, + 0x1E935, 0x1E913, eos, + 0x1E936, 0x1E914, eos, // 4261 + 0x1E937, 0x1E915, eos, + 0x1E938, 0x1E916, eos, + 0x1E939, 0x1E917, eos, // 4270 + 0x1E93A, 0x1E918, eos, + 0x1E93B, 0x1E919, eos, + 0x1E93C, 0x1E91A, eos, + 0x1E93D, 0x1E91B, eos, // 4282 + 0x1E93E, 0x1E91C, eos, + 0x1E93F, 0x1E91D, eos, + 0x1E940, 0x1E91E, eos, // 4291 + 0x1E941, 0x1E91F, eos, + 0x1E942, 0x1E920, eos, + 0x1E943, 0x1E921, eos // 4300 +}; +#define SRELL_UCFDATA_VERSION 201 diff --git a/NVL/include/srell_updata2.hpp b/NVL/include/srell_updata2.hpp new file mode 100644 index 0000000..c9c8bc4 --- /dev/null +++ b/NVL/include/srell_updata2.hpp @@ -0,0 +1,8782 @@ +// UnicodeData.txt +// +// PropList-14.0.0.txt +// Date: 2021-08-12, 23:13:05 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// +// DerivedCoreProperties-14.0.0.txt +// Date: 2021-08-12, 23:12:53 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// +// emoji-data-14.0.0.txt +// Date: 2021-08-26, 17:22:22 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// +// DerivedNormalizationProps-14.0.0.txt +// Date: 2021-06-04, 02:19:20 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// +// emoji-sequences.txt +// Date: 2021-08-26, 17:22:22 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// +// emoji-zwj-sequences.txt +// Date: 2021-06-08, 05:19:16 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// +// Scripts-14.0.0.txt +// Date: 2021-07-10, 00:35:31 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// +// ScriptExtensions-14.0.0.txt +// Date: 2021-06-04, 02:19:38 GMT +// © 2021 Unicode®, Inc. +// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +// For terms of use, see http://www.unicode.org/terms_of_use.html +// + +enum upid_type +{ + upid_unknown = 0, + gc_Other = 1, // #1 + gc_Control = 2, // #2 + gc_Format = 3, // #3 + gc_Unassigned = 4, // #4 + gc_Private_Use = 5, // #5 + gc_Surrogate = 6, // #6 + gc_Letter = 7, // #7 + gc_Cased_Letter = 8, // #8 + gc_Lowercase_Letter = 9, // #9 + gc_Titlecase_Letter = 10, // #10 + gc_Uppercase_Letter = 11, // #11 + gc_Modifier_Letter = 12, // #12 + gc_Other_Letter = 13, // #13 + gc_Mark = 14, // #14 + gc_Spacing_Mark = 15, // #15 + gc_Enclosing_Mark = 16, // #16 + gc_Nonspacing_Mark = 17, // #17 + gc_Number = 18, // #18 + gc_Decimal_Number = 19, // #19 + gc_Letter_Number = 20, // #20 + gc_Other_Number = 21, // #21 + gc_Punctuation = 22, // #22 + gc_Connector_Punctuation = 23, // #23 + gc_Dash_Punctuation = 24, // #24 + gc_Close_Punctuation = 25, // #25 + gc_Final_Punctuation = 26, // #26 + gc_Initial_Punctuation = 27, // #27 + gc_Other_Punctuation = 28, // #28 + gc_Open_Punctuation = 29, // #29 + gc_Symbol = 30, // #30 + gc_Currency_Symbol = 31, // #31 + gc_Modifier_Symbol = 32, // #32 + gc_Math_Symbol = 33, // #33 + gc_Other_Symbol = 34, // #34 + gc_Separator = 35, // #35 + gc_Line_Separator = 36, // #36 + gc_Paragraph_Separator = 37, // #37 + gc_Space_Separator = 38, // #38 + bp_ASCII = 39, // #39 + bp_ASCII_Hex_Digit = 40, // #40 + bp_Alphabetic = 41, // #41 + bp_Any = 42, // #42 + bp_Assigned = 43, // #43 + bp_Bidi_Control = 44, // #44 + bp_Bidi_Mirrored = 45, // #45 + bp_Case_Ignorable = 46, // #46 + bp_Cased = 47, // #47 + bp_Changes_When_Casefolded = 48, // #48 + bp_Changes_When_Casemapped = 49, // #49 + bp_Changes_When_Lowercased = 50, // #50 + bp_Changes_When_NFKC_Casefolded = 51, // #51 + bp_Changes_When_Titlecased = 52, // #52 + bp_Changes_When_Uppercased = 53, // #53 + bp_Dash = 54, // #54 + bp_Default_Ignorable_Code_Point = 55, // #55 + bp_Deprecated = 56, // #56 + bp_Diacritic = 57, // #57 + bp_Emoji = 58, // #58 + bp_Emoji_Component = 59, // #59 + bp_Emoji_Modifier = 60, // #60 + bp_Emoji_Modifier_Base = 61, // #61 + bp_Emoji_Presentation = 62, // #62 + bp_Extended_Pictographic = 63, // #63 + bp_Extender = 64, // #64 + bp_Grapheme_Base = 65, // #65 + bp_Grapheme_Extend = 66, // #66 + bp_Hex_Digit = 67, // #67 + bp_IDS_Binary_Operator = 68, // #68 + bp_IDS_Trinary_Operator = 69, // #69 + bp_ID_Continue = 70, // #70 + bp_ID_Start = 71, // #71 + bp_Ideographic = 72, // #72 + bp_Join_Control = 73, // #73 + bp_Logical_Order_Exception = 74, // #74 + bp_Lowercase = 75, // #75 + bp_Math = 76, // #76 + bp_Noncharacter_Code_Point = 77, // #77 + bp_Pattern_Syntax = 78, // #78 + bp_Pattern_White_Space = 79, // #79 + bp_Quotation_Mark = 80, // #80 + bp_Radical = 81, // #81 + bp_Regional_Indicator = 82, // #82 + bp_Sentence_Terminal = 83, // #83 + bp_Soft_Dotted = 84, // #84 + bp_Terminal_Punctuation = 85, // #85 + bp_Unified_Ideograph = 86, // #86 + bp_Uppercase = 87, // #87 + bp_Variation_Selector = 88, // #88 + bp_White_Space = 89, // #89 + bp_XID_Continue = 90, // #90 + bp_XID_Start = 91, // #91 + sc_Adlam = 92, // #92 + sc_Ahom = 93, // #93 + sc_Anatolian_Hieroglyphs = 94, // #94 + sc_Arabic = 95, // #95 + sc_Armenian = 96, // #96 + sc_Avestan = 97, // #97 + sc_Balinese = 98, // #98 + sc_Bamum = 99, // #99 + sc_Bassa_Vah = 100, // #100 + sc_Batak = 101, // #101 + sc_Bengali = 102, // #102 + sc_Bhaiksuki = 103, // #103 + sc_Bopomofo = 104, // #104 + sc_Brahmi = 105, // #105 + sc_Braille = 106, // #106 + sc_Buginese = 107, // #107 + sc_Buhid = 108, // #108 + sc_Canadian_Aboriginal = 109, // #109 + sc_Carian = 110, // #110 + sc_Caucasian_Albanian = 111, // #111 + sc_Chakma = 112, // #112 + sc_Cham = 113, // #113 + sc_Cherokee = 114, // #114 + sc_Chorasmian = 115, // #115 + sc_Common = 116, // #116 + sc_Coptic = 117, // #117 + sc_Cypro_Minoan = 118, // #118 + sc_Cuneiform = 119, // #119 + sc_Cypriot = 120, // #120 + sc_Cyrillic = 121, // #121 + sc_Deseret = 122, // #122 + sc_Devanagari = 123, // #123 + sc_Dives_Akuru = 124, // #124 + sc_Dogra = 125, // #125 + sc_Duployan = 126, // #126 + sc_Egyptian_Hieroglyphs = 127, // #127 + sc_Elbasan = 128, // #128 + sc_Elymaic = 129, // #129 + sc_Ethiopic = 130, // #130 + sc_Georgian = 131, // #131 + sc_Glagolitic = 132, // #132 + sc_Gothic = 133, // #133 + sc_Grantha = 134, // #134 + sc_Greek = 135, // #135 + sc_Gujarati = 136, // #136 + sc_Gunjala_Gondi = 137, // #137 + sc_Gurmukhi = 138, // #138 + sc_Han = 139, // #139 + sc_Hangul = 140, // #140 + sc_Hanifi_Rohingya = 141, // #141 + sc_Hanunoo = 142, // #142 + sc_Hatran = 143, // #143 + sc_Hebrew = 144, // #144 + sc_Hiragana = 145, // #145 + sc_Imperial_Aramaic = 146, // #146 + sc_Inherited = 147, // #147 + sc_Inscriptional_Pahlavi = 148, // #148 + sc_Inscriptional_Parthian = 149, // #149 + sc_Javanese = 150, // #150 + sc_Kaithi = 151, // #151 + sc_Kannada = 152, // #152 + sc_Katakana = 153, // #153 + sc_Kayah_Li = 154, // #154 + sc_Kharoshthi = 155, // #155 + sc_Khitan_Small_Script = 156, // #156 + sc_Khmer = 157, // #157 + sc_Khojki = 158, // #158 + sc_Khudawadi = 159, // #159 + sc_Lao = 160, // #160 + sc_Latin = 161, // #161 + sc_Lepcha = 162, // #162 + sc_Limbu = 163, // #163 + sc_Linear_A = 164, // #164 + sc_Linear_B = 165, // #165 + sc_Lisu = 166, // #166 + sc_Lycian = 167, // #167 + sc_Lydian = 168, // #168 + sc_Mahajani = 169, // #169 + sc_Makasar = 170, // #170 + sc_Malayalam = 171, // #171 + sc_Mandaic = 172, // #172 + sc_Manichaean = 173, // #173 + sc_Marchen = 174, // #174 + sc_Masaram_Gondi = 175, // #175 + sc_Medefaidrin = 176, // #176 + sc_Meetei_Mayek = 177, // #177 + sc_Mende_Kikakui = 178, // #178 + sc_Meroitic_Cursive = 179, // #179 + sc_Meroitic_Hieroglyphs = 180, // #180 + sc_Miao = 181, // #181 + sc_Modi = 182, // #182 + sc_Mongolian = 183, // #183 + sc_Mro = 184, // #184 + sc_Multani = 185, // #185 + sc_Myanmar = 186, // #186 + sc_Nabataean = 187, // #187 + sc_Nandinagari = 188, // #188 + sc_New_Tai_Lue = 189, // #189 + sc_Newa = 190, // #190 + sc_Nko = 191, // #191 + sc_Nushu = 192, // #192 + sc_Nyiakeng_Puachue_Hmong = 193, // #193 + sc_Ogham = 194, // #194 + sc_Ol_Chiki = 195, // #195 + sc_Old_Hungarian = 196, // #196 + sc_Old_Italic = 197, // #197 + sc_Old_North_Arabian = 198, // #198 + sc_Old_Permic = 199, // #199 + sc_Old_Persian = 200, // #200 + sc_Old_Sogdian = 201, // #201 + sc_Old_South_Arabian = 202, // #202 + sc_Old_Turkic = 203, // #203 + sc_Old_Uyghur = 204, // #204 + sc_Oriya = 205, // #205 + sc_Osage = 206, // #206 + sc_Osmanya = 207, // #207 + sc_Pahawh_Hmong = 208, // #208 + sc_Palmyrene = 209, // #209 + sc_Pau_Cin_Hau = 210, // #210 + sc_Phags_Pa = 211, // #211 + sc_Phoenician = 212, // #212 + sc_Psalter_Pahlavi = 213, // #213 + sc_Rejang = 214, // #214 + sc_Runic = 215, // #215 + sc_Samaritan = 216, // #216 + sc_Saurashtra = 217, // #217 + sc_Sharada = 218, // #218 + sc_Shavian = 219, // #219 + sc_Siddham = 220, // #220 + sc_SignWriting = 221, // #221 + sc_Sinhala = 222, // #222 + sc_Sogdian = 223, // #223 + sc_Sora_Sompeng = 224, // #224 + sc_Soyombo = 225, // #225 + sc_Sundanese = 226, // #226 + sc_Syloti_Nagri = 227, // #227 + sc_Syriac = 228, // #228 + sc_Tagalog = 229, // #229 + sc_Tagbanwa = 230, // #230 + sc_Tai_Le = 231, // #231 + sc_Tai_Tham = 232, // #232 + sc_Tai_Viet = 233, // #233 + sc_Takri = 234, // #234 + sc_Tamil = 235, // #235 + sc_Tangsa = 236, // #236 + sc_Tangut = 237, // #237 + sc_Telugu = 238, // #238 + sc_Thaana = 239, // #239 + sc_Thai = 240, // #240 + sc_Tibetan = 241, // #241 + sc_Tifinagh = 242, // #242 + sc_Tirhuta = 243, // #243 + sc_Toto = 244, // #244 + sc_Ugaritic = 245, // #245 + sc_Vai = 246, // #246 + sc_Vithkuqi = 247, // #247 + sc_Wancho = 248, // #248 + sc_Warang_Citi = 249, // #249 + sc_Yezidi = 250, // #250 + sc_Yi = 251, // #251 + sc_Zanabazar_Square = 252, // #252 + scx_Adlam = 253, // #253 + scx_Ahom = 254, // #93 + scx_Anatolian_Hieroglyphs = 255, // #94 + scx_Arabic = 256, // #254 + scx_Armenian = 257, // #96 + scx_Avestan = 258, // #97 + scx_Balinese = 259, // #98 + scx_Bamum = 260, // #99 + scx_Bassa_Vah = 261, // #100 + scx_Batak = 262, // #101 + scx_Bengali = 263, // #255 + scx_Bhaiksuki = 264, // #103 + scx_Bopomofo = 265, // #256 + scx_Brahmi = 266, // #105 + scx_Braille = 267, // #106 + scx_Buginese = 268, // #257 + scx_Buhid = 269, // #258 + scx_Canadian_Aboriginal = 270, // #109 + scx_Carian = 271, // #110 + scx_Caucasian_Albanian = 272, // #111 + scx_Chakma = 273, // #259 + scx_Cham = 274, // #113 + scx_Cherokee = 275, // #114 + scx_Chorasmian = 276, // #115 + scx_Common = 277, // #260 + scx_Coptic = 278, // #261 + scx_Cypro_Minoan = 279, // #262 + scx_Cuneiform = 280, // #119 + scx_Cypriot = 281, // #263 + scx_Cyrillic = 282, // #264 + scx_Deseret = 283, // #122 + scx_Devanagari = 284, // #265 + scx_Dives_Akuru = 285, // #124 + scx_Dogra = 286, // #266 + scx_Duployan = 287, // #267 + scx_Egyptian_Hieroglyphs = 288, // #127 + scx_Elbasan = 289, // #128 + scx_Elymaic = 290, // #129 + scx_Ethiopic = 291, // #130 + scx_Georgian = 292, // #268 + scx_Glagolitic = 293, // #269 + scx_Gothic = 294, // #133 + scx_Grantha = 295, // #270 + scx_Greek = 296, // #271 + scx_Gujarati = 297, // #272 + scx_Gunjala_Gondi = 298, // #273 + scx_Gurmukhi = 299, // #274 + scx_Han = 300, // #275 + scx_Hangul = 301, // #276 + scx_Hanifi_Rohingya = 302, // #277 + scx_Hanunoo = 303, // #278 + scx_Hatran = 304, // #143 + scx_Hebrew = 305, // #144 + scx_Hiragana = 306, // #279 + scx_Imperial_Aramaic = 307, // #146 + scx_Inherited = 308, // #280 + scx_Inscriptional_Pahlavi = 309, // #148 + scx_Inscriptional_Parthian = 310, // #149 + scx_Javanese = 311, // #281 + scx_Kaithi = 312, // #282 + scx_Kannada = 313, // #283 + scx_Katakana = 314, // #284 + scx_Kayah_Li = 315, // #285 + scx_Kharoshthi = 316, // #155 + scx_Khitan_Small_Script = 317, // #156 + scx_Khmer = 318, // #157 + scx_Khojki = 319, // #286 + scx_Khudawadi = 320, // #287 + scx_Lao = 321, // #160 + scx_Latin = 322, // #288 + scx_Lepcha = 323, // #162 + scx_Limbu = 324, // #289 + scx_Linear_A = 325, // #290 + scx_Linear_B = 326, // #291 + scx_Lisu = 327, // #166 + scx_Lycian = 328, // #167 + scx_Lydian = 329, // #168 + scx_Mahajani = 330, // #292 + scx_Makasar = 331, // #170 + scx_Malayalam = 332, // #293 + scx_Mandaic = 333, // #294 + scx_Manichaean = 334, // #295 + scx_Marchen = 335, // #174 + scx_Masaram_Gondi = 336, // #296 + scx_Medefaidrin = 337, // #176 + scx_Meetei_Mayek = 338, // #177 + scx_Mende_Kikakui = 339, // #178 + scx_Meroitic_Cursive = 340, // #179 + scx_Meroitic_Hieroglyphs = 341, // #180 + scx_Miao = 342, // #181 + scx_Modi = 343, // #297 + scx_Mongolian = 344, // #298 + scx_Mro = 345, // #184 + scx_Multani = 346, // #299 + scx_Myanmar = 347, // #300 + scx_Nabataean = 348, // #187 + scx_Nandinagari = 349, // #301 + scx_New_Tai_Lue = 350, // #189 + scx_Newa = 351, // #190 + scx_Nko = 352, // #302 + scx_Nushu = 353, // #192 + scx_Nyiakeng_Puachue_Hmong = 354, // #193 + scx_Ogham = 355, // #194 + scx_Ol_Chiki = 356, // #195 + scx_Old_Hungarian = 357, // #196 + scx_Old_Italic = 358, // #197 + scx_Old_North_Arabian = 359, // #198 + scx_Old_Permic = 360, // #303 + scx_Old_Persian = 361, // #200 + scx_Old_Sogdian = 362, // #201 + scx_Old_South_Arabian = 363, // #202 + scx_Old_Turkic = 364, // #203 + scx_Old_Uyghur = 365, // #304 + scx_Oriya = 366, // #305 + scx_Osage = 367, // #206 + scx_Osmanya = 368, // #207 + scx_Pahawh_Hmong = 369, // #208 + scx_Palmyrene = 370, // #209 + scx_Pau_Cin_Hau = 371, // #210 + scx_Phags_Pa = 372, // #306 + scx_Phoenician = 373, // #212 + scx_Psalter_Pahlavi = 374, // #307 + scx_Rejang = 375, // #214 + scx_Runic = 376, // #215 + scx_Samaritan = 377, // #216 + scx_Saurashtra = 378, // #217 + scx_Sharada = 379, // #308 + scx_Shavian = 380, // #219 + scx_Siddham = 381, // #220 + scx_SignWriting = 382, // #221 + scx_Sinhala = 383, // #309 + scx_Sogdian = 384, // #310 + scx_Sora_Sompeng = 385, // #224 + scx_Soyombo = 386, // #225 + scx_Sundanese = 387, // #226 + scx_Syloti_Nagri = 388, // #311 + scx_Syriac = 389, // #312 + scx_Tagalog = 390, // #313 + scx_Tagbanwa = 391, // #314 + scx_Tai_Le = 392, // #315 + scx_Tai_Tham = 393, // #232 + scx_Tai_Viet = 394, // #233 + scx_Takri = 395, // #316 + scx_Tamil = 396, // #317 + scx_Tangsa = 397, // #236 + scx_Tangut = 398, // #237 + scx_Telugu = 399, // #318 + scx_Thaana = 400, // #319 + scx_Thai = 401, // #240 + scx_Tibetan = 402, // #241 + scx_Tifinagh = 403, // #242 + scx_Tirhuta = 404, // #320 + scx_Toto = 405, // #244 + scx_Ugaritic = 406, // #245 + scx_Vai = 407, // #246 + scx_Vithkuqi = 408, // #247 + scx_Wancho = 409, // #248 + scx_Warang_Citi = 410, // #249 + scx_Yezidi = 411, // #321 + scx_Yi = 412, // #322 + scx_Zanabazar_Square = 413, // #252 + upid_max_property_number = 322, + bp_RGI_Emoji = 414, // #323 + bp_Basic_Emoji = 415, // #324 + bp_Emoji_Keycap_Sequence = 416, // #325 + bp_RGI_Emoji_Modifier_Sequence = 417, // #326 + bp_RGI_Emoji_Flag_Sequence = 418, // #327 + bp_RGI_Emoji_Tag_Sequence = 419, // #328 + bp_RGI_Emoji_ZWJ_Sequence = 420, // #329 + upid_max_pos_number = 329 +}; + +enum up_type +{ + uptype_unknown = 0, + uptype_binary = 1, + uptype_general_category = 2, + uptype_script = 3, + uptype_script_extensions = 4 +}; + +template +struct unicode_property_data +{ + static const T3 propertynametable[]; + static const T4 rangetable[]; + static const T5 rangenumbertable[]; + static const T6 positiontable[]; +}; + +template +const T3 unicode_property_data::propertynametable[] = +{ + "*", // #0:unknown + "*", // #1:binary + "General_Category:gc", // #2 + "Script:sc", // #3 + "Script_Extensions:scx", // #4 + "" +}; + +template +const T4 unicode_property_data::rangetable[] = +{ + // #1 (0+725): gc=Other:C + // Cc:2 + Cf:21 + Cn:698 + Co:3 + Cs:1 + // #2 (0+2): gc=Control:Cc:cntrl + 0x0000, 0x001F, 0x007F, 0x009F, + // #3 (2+21): gc=Format:Cf + 0x00AD, 0x00AD, 0x0600, 0x0605, 0x061C, 0x061C, 0x06DD, 0x06DD, + 0x070F, 0x070F, 0x0890, 0x0891, 0x08E2, 0x08E2, 0x180E, 0x180E, + 0x200B, 0x200F, 0x202A, 0x202E, 0x2060, 0x2064, 0x2066, 0x206F, + 0xFEFF, 0xFEFF, 0xFFF9, 0xFFFB, 0x110BD, 0x110BD, 0x110CD, 0x110CD, + 0x13430, 0x13438, 0x1BCA0, 0x1BCA3, 0x1D173, 0x1D17A, 0xE0001, 0xE0001, + 0xE0020, 0xE007F, + // #4 (23+698): gc=Unassigned:Cn + 0x0378, 0x0379, 0x0380, 0x0383, 0x038B, 0x038B, 0x038D, 0x038D, + 0x03A2, 0x03A2, 0x0530, 0x0530, 0x0557, 0x0558, 0x058B, 0x058C, + 0x0590, 0x0590, 0x05C8, 0x05CF, 0x05EB, 0x05EE, 0x05F5, 0x05FF, + 0x070E, 0x070E, 0x074B, 0x074C, 0x07B2, 0x07BF, 0x07FB, 0x07FC, + 0x082E, 0x082F, 0x083F, 0x083F, 0x085C, 0x085D, 0x085F, 0x085F, + 0x086B, 0x086F, 0x088F, 0x088F, 0x0892, 0x0897, 0x0984, 0x0984, + 0x098D, 0x098E, 0x0991, 0x0992, 0x09A9, 0x09A9, 0x09B1, 0x09B1, + 0x09B3, 0x09B5, 0x09BA, 0x09BB, 0x09C5, 0x09C6, 0x09C9, 0x09CA, + 0x09CF, 0x09D6, 0x09D8, 0x09DB, 0x09DE, 0x09DE, 0x09E4, 0x09E5, + 0x09FF, 0x0A00, 0x0A04, 0x0A04, 0x0A0B, 0x0A0E, 0x0A11, 0x0A12, + 0x0A29, 0x0A29, 0x0A31, 0x0A31, 0x0A34, 0x0A34, 0x0A37, 0x0A37, + 0x0A3A, 0x0A3B, 0x0A3D, 0x0A3D, 0x0A43, 0x0A46, 0x0A49, 0x0A4A, + 0x0A4E, 0x0A50, 0x0A52, 0x0A58, 0x0A5D, 0x0A5D, 0x0A5F, 0x0A65, + 0x0A77, 0x0A80, 0x0A84, 0x0A84, 0x0A8E, 0x0A8E, 0x0A92, 0x0A92, + 0x0AA9, 0x0AA9, 0x0AB1, 0x0AB1, 0x0AB4, 0x0AB4, 0x0ABA, 0x0ABB, + 0x0AC6, 0x0AC6, 0x0ACA, 0x0ACA, 0x0ACE, 0x0ACF, 0x0AD1, 0x0ADF, + 0x0AE4, 0x0AE5, 0x0AF2, 0x0AF8, 0x0B00, 0x0B00, 0x0B04, 0x0B04, + 0x0B0D, 0x0B0E, 0x0B11, 0x0B12, 0x0B29, 0x0B29, 0x0B31, 0x0B31, + 0x0B34, 0x0B34, 0x0B3A, 0x0B3B, 0x0B45, 0x0B46, 0x0B49, 0x0B4A, + 0x0B4E, 0x0B54, 0x0B58, 0x0B5B, 0x0B5E, 0x0B5E, 0x0B64, 0x0B65, + 0x0B78, 0x0B81, 0x0B84, 0x0B84, 0x0B8B, 0x0B8D, 0x0B91, 0x0B91, + 0x0B96, 0x0B98, 0x0B9B, 0x0B9B, 0x0B9D, 0x0B9D, 0x0BA0, 0x0BA2, + 0x0BA5, 0x0BA7, 0x0BAB, 0x0BAD, 0x0BBA, 0x0BBD, 0x0BC3, 0x0BC5, + 0x0BC9, 0x0BC9, 0x0BCE, 0x0BCF, 0x0BD1, 0x0BD6, 0x0BD8, 0x0BE5, + 0x0BFB, 0x0BFF, 0x0C0D, 0x0C0D, 0x0C11, 0x0C11, 0x0C29, 0x0C29, + 0x0C3A, 0x0C3B, 0x0C45, 0x0C45, 0x0C49, 0x0C49, 0x0C4E, 0x0C54, + 0x0C57, 0x0C57, 0x0C5B, 0x0C5C, 0x0C5E, 0x0C5F, 0x0C64, 0x0C65, + 0x0C70, 0x0C76, 0x0C8D, 0x0C8D, 0x0C91, 0x0C91, 0x0CA9, 0x0CA9, + 0x0CB4, 0x0CB4, 0x0CBA, 0x0CBB, 0x0CC5, 0x0CC5, 0x0CC9, 0x0CC9, + 0x0CCE, 0x0CD4, 0x0CD7, 0x0CDC, 0x0CDF, 0x0CDF, 0x0CE4, 0x0CE5, + 0x0CF0, 0x0CF0, 0x0CF3, 0x0CFF, 0x0D0D, 0x0D0D, 0x0D11, 0x0D11, + 0x0D45, 0x0D45, 0x0D49, 0x0D49, 0x0D50, 0x0D53, 0x0D64, 0x0D65, + 0x0D80, 0x0D80, 0x0D84, 0x0D84, 0x0D97, 0x0D99, 0x0DB2, 0x0DB2, + 0x0DBC, 0x0DBC, 0x0DBE, 0x0DBF, 0x0DC7, 0x0DC9, 0x0DCB, 0x0DCE, + 0x0DD5, 0x0DD5, 0x0DD7, 0x0DD7, 0x0DE0, 0x0DE5, 0x0DF0, 0x0DF1, + 0x0DF5, 0x0E00, 0x0E3B, 0x0E3E, 0x0E5C, 0x0E80, 0x0E83, 0x0E83, + 0x0E85, 0x0E85, 0x0E8B, 0x0E8B, 0x0EA4, 0x0EA4, 0x0EA6, 0x0EA6, + 0x0EBE, 0x0EBF, 0x0EC5, 0x0EC5, 0x0EC7, 0x0EC7, 0x0ECE, 0x0ECF, + 0x0EDA, 0x0EDB, 0x0EE0, 0x0EFF, 0x0F48, 0x0F48, 0x0F6D, 0x0F70, + 0x0F98, 0x0F98, 0x0FBD, 0x0FBD, 0x0FCD, 0x0FCD, 0x0FDB, 0x0FFF, + 0x10C6, 0x10C6, 0x10C8, 0x10CC, 0x10CE, 0x10CF, 0x1249, 0x1249, + 0x124E, 0x124F, 0x1257, 0x1257, 0x1259, 0x1259, 0x125E, 0x125F, + 0x1289, 0x1289, 0x128E, 0x128F, 0x12B1, 0x12B1, 0x12B6, 0x12B7, + 0x12BF, 0x12BF, 0x12C1, 0x12C1, 0x12C6, 0x12C7, 0x12D7, 0x12D7, + 0x1311, 0x1311, 0x1316, 0x1317, 0x135B, 0x135C, 0x137D, 0x137F, + 0x139A, 0x139F, 0x13F6, 0x13F7, 0x13FE, 0x13FF, 0x169D, 0x169F, + 0x16F9, 0x16FF, 0x1716, 0x171E, 0x1737, 0x173F, 0x1754, 0x175F, + 0x176D, 0x176D, 0x1771, 0x1771, 0x1774, 0x177F, 0x17DE, 0x17DF, + 0x17EA, 0x17EF, 0x17FA, 0x17FF, 0x181A, 0x181F, 0x1879, 0x187F, + 0x18AB, 0x18AF, 0x18F6, 0x18FF, 0x191F, 0x191F, 0x192C, 0x192F, + 0x193C, 0x193F, 0x1941, 0x1943, 0x196E, 0x196F, 0x1975, 0x197F, + 0x19AC, 0x19AF, 0x19CA, 0x19CF, 0x19DB, 0x19DD, 0x1A1C, 0x1A1D, + 0x1A5F, 0x1A5F, 0x1A7D, 0x1A7E, 0x1A8A, 0x1A8F, 0x1A9A, 0x1A9F, + 0x1AAE, 0x1AAF, 0x1ACF, 0x1AFF, 0x1B4D, 0x1B4F, 0x1B7F, 0x1B7F, + 0x1BF4, 0x1BFB, 0x1C38, 0x1C3A, 0x1C4A, 0x1C4C, 0x1C89, 0x1C8F, + 0x1CBB, 0x1CBC, 0x1CC8, 0x1CCF, 0x1CFB, 0x1CFF, 0x1F16, 0x1F17, + 0x1F1E, 0x1F1F, 0x1F46, 0x1F47, 0x1F4E, 0x1F4F, 0x1F58, 0x1F58, + 0x1F5A, 0x1F5A, 0x1F5C, 0x1F5C, 0x1F5E, 0x1F5E, 0x1F7E, 0x1F7F, + 0x1FB5, 0x1FB5, 0x1FC5, 0x1FC5, 0x1FD4, 0x1FD5, 0x1FDC, 0x1FDC, + 0x1FF0, 0x1FF1, 0x1FF5, 0x1FF5, 0x1FFF, 0x1FFF, 0x2065, 0x2065, + 0x2072, 0x2073, 0x208F, 0x208F, 0x209D, 0x209F, 0x20C1, 0x20CF, + 0x20F1, 0x20FF, 0x218C, 0x218F, 0x2427, 0x243F, 0x244B, 0x245F, + 0x2B74, 0x2B75, 0x2B96, 0x2B96, 0x2CF4, 0x2CF8, 0x2D26, 0x2D26, + 0x2D28, 0x2D2C, 0x2D2E, 0x2D2F, 0x2D68, 0x2D6E, 0x2D71, 0x2D7E, + 0x2D97, 0x2D9F, 0x2DA7, 0x2DA7, 0x2DAF, 0x2DAF, 0x2DB7, 0x2DB7, + 0x2DBF, 0x2DBF, 0x2DC7, 0x2DC7, 0x2DCF, 0x2DCF, 0x2DD7, 0x2DD7, + 0x2DDF, 0x2DDF, 0x2E5E, 0x2E7F, 0x2E9A, 0x2E9A, 0x2EF4, 0x2EFF, + 0x2FD6, 0x2FEF, 0x2FFC, 0x2FFF, 0x3040, 0x3040, 0x3097, 0x3098, + 0x3100, 0x3104, 0x3130, 0x3130, 0x318F, 0x318F, 0x31E4, 0x31EF, + 0x321F, 0x321F, 0xA48D, 0xA48F, 0xA4C7, 0xA4CF, 0xA62C, 0xA63F, + 0xA6F8, 0xA6FF, 0xA7CB, 0xA7CF, 0xA7D2, 0xA7D2, 0xA7D4, 0xA7D4, + 0xA7DA, 0xA7F1, 0xA82D, 0xA82F, 0xA83A, 0xA83F, 0xA878, 0xA87F, + 0xA8C6, 0xA8CD, 0xA8DA, 0xA8DF, 0xA954, 0xA95E, 0xA97D, 0xA97F, + 0xA9CE, 0xA9CE, 0xA9DA, 0xA9DD, 0xA9FF, 0xA9FF, 0xAA37, 0xAA3F, + 0xAA4E, 0xAA4F, 0xAA5A, 0xAA5B, 0xAAC3, 0xAADA, 0xAAF7, 0xAB00, + 0xAB07, 0xAB08, 0xAB0F, 0xAB10, 0xAB17, 0xAB1F, 0xAB27, 0xAB27, + 0xAB2F, 0xAB2F, 0xAB6C, 0xAB6F, 0xABEE, 0xABEF, 0xABFA, 0xABFF, + 0xD7A4, 0xD7AF, 0xD7C7, 0xD7CA, 0xD7FC, 0xD7FF, 0xFA6E, 0xFA6F, + 0xFADA, 0xFAFF, 0xFB07, 0xFB12, 0xFB18, 0xFB1C, 0xFB37, 0xFB37, + 0xFB3D, 0xFB3D, 0xFB3F, 0xFB3F, 0xFB42, 0xFB42, 0xFB45, 0xFB45, + 0xFBC3, 0xFBD2, 0xFD90, 0xFD91, 0xFDC8, 0xFDCE, 0xFDD0, 0xFDEF, + 0xFE1A, 0xFE1F, 0xFE53, 0xFE53, 0xFE67, 0xFE67, 0xFE6C, 0xFE6F, + 0xFE75, 0xFE75, 0xFEFD, 0xFEFE, 0xFF00, 0xFF00, 0xFFBF, 0xFFC1, + 0xFFC8, 0xFFC9, 0xFFD0, 0xFFD1, 0xFFD8, 0xFFD9, 0xFFDD, 0xFFDF, + 0xFFE7, 0xFFE7, 0xFFEF, 0xFFF8, 0xFFFE, 0xFFFF, 0x1000C, 0x1000C, + 0x10027, 0x10027, 0x1003B, 0x1003B, 0x1003E, 0x1003E, 0x1004E, 0x1004F, + 0x1005E, 0x1007F, 0x100FB, 0x100FF, 0x10103, 0x10106, 0x10134, 0x10136, + 0x1018F, 0x1018F, 0x1019D, 0x1019F, 0x101A1, 0x101CF, 0x101FE, 0x1027F, + 0x1029D, 0x1029F, 0x102D1, 0x102DF, 0x102FC, 0x102FF, 0x10324, 0x1032C, + 0x1034B, 0x1034F, 0x1037B, 0x1037F, 0x1039E, 0x1039E, 0x103C4, 0x103C7, + 0x103D6, 0x103FF, 0x1049E, 0x1049F, 0x104AA, 0x104AF, 0x104D4, 0x104D7, + 0x104FC, 0x104FF, 0x10528, 0x1052F, 0x10564, 0x1056E, 0x1057B, 0x1057B, + 0x1058B, 0x1058B, 0x10593, 0x10593, 0x10596, 0x10596, 0x105A2, 0x105A2, + 0x105B2, 0x105B2, 0x105BA, 0x105BA, 0x105BD, 0x105FF, 0x10737, 0x1073F, + 0x10756, 0x1075F, 0x10768, 0x1077F, 0x10786, 0x10786, 0x107B1, 0x107B1, + 0x107BB, 0x107FF, 0x10806, 0x10807, 0x10809, 0x10809, 0x10836, 0x10836, + 0x10839, 0x1083B, 0x1083D, 0x1083E, 0x10856, 0x10856, 0x1089F, 0x108A6, + 0x108B0, 0x108DF, 0x108F3, 0x108F3, 0x108F6, 0x108FA, 0x1091C, 0x1091E, + 0x1093A, 0x1093E, 0x10940, 0x1097F, 0x109B8, 0x109BB, 0x109D0, 0x109D1, + 0x10A04, 0x10A04, 0x10A07, 0x10A0B, 0x10A14, 0x10A14, 0x10A18, 0x10A18, + 0x10A36, 0x10A37, 0x10A3B, 0x10A3E, 0x10A49, 0x10A4F, 0x10A59, 0x10A5F, + 0x10AA0, 0x10ABF, 0x10AE7, 0x10AEA, 0x10AF7, 0x10AFF, 0x10B36, 0x10B38, + 0x10B56, 0x10B57, 0x10B73, 0x10B77, 0x10B92, 0x10B98, 0x10B9D, 0x10BA8, + 0x10BB0, 0x10BFF, 0x10C49, 0x10C7F, 0x10CB3, 0x10CBF, 0x10CF3, 0x10CF9, + 0x10D28, 0x10D2F, 0x10D3A, 0x10E5F, 0x10E7F, 0x10E7F, 0x10EAA, 0x10EAA, + 0x10EAE, 0x10EAF, 0x10EB2, 0x10EFF, 0x10F28, 0x10F2F, 0x10F5A, 0x10F6F, + 0x10F8A, 0x10FAF, 0x10FCC, 0x10FDF, 0x10FF7, 0x10FFF, 0x1104E, 0x11051, + 0x11076, 0x1107E, 0x110C3, 0x110CC, 0x110CE, 0x110CF, 0x110E9, 0x110EF, + 0x110FA, 0x110FF, 0x11135, 0x11135, 0x11148, 0x1114F, 0x11177, 0x1117F, + 0x111E0, 0x111E0, 0x111F5, 0x111FF, 0x11212, 0x11212, 0x1123F, 0x1127F, + 0x11287, 0x11287, 0x11289, 0x11289, 0x1128E, 0x1128E, 0x1129E, 0x1129E, + 0x112AA, 0x112AF, 0x112EB, 0x112EF, 0x112FA, 0x112FF, 0x11304, 0x11304, + 0x1130D, 0x1130E, 0x11311, 0x11312, 0x11329, 0x11329, 0x11331, 0x11331, + 0x11334, 0x11334, 0x1133A, 0x1133A, 0x11345, 0x11346, 0x11349, 0x1134A, + 0x1134E, 0x1134F, 0x11351, 0x11356, 0x11358, 0x1135C, 0x11364, 0x11365, + 0x1136D, 0x1136F, 0x11375, 0x113FF, 0x1145C, 0x1145C, 0x11462, 0x1147F, + 0x114C8, 0x114CF, 0x114DA, 0x1157F, 0x115B6, 0x115B7, 0x115DE, 0x115FF, + 0x11645, 0x1164F, 0x1165A, 0x1165F, 0x1166D, 0x1167F, 0x116BA, 0x116BF, + 0x116CA, 0x116FF, 0x1171B, 0x1171C, 0x1172C, 0x1172F, 0x11747, 0x117FF, + 0x1183C, 0x1189F, 0x118F3, 0x118FE, 0x11907, 0x11908, 0x1190A, 0x1190B, + 0x11914, 0x11914, 0x11917, 0x11917, 0x11936, 0x11936, 0x11939, 0x1193A, + 0x11947, 0x1194F, 0x1195A, 0x1199F, 0x119A8, 0x119A9, 0x119D8, 0x119D9, + 0x119E5, 0x119FF, 0x11A48, 0x11A4F, 0x11AA3, 0x11AAF, 0x11AF9, 0x11BFF, + 0x11C09, 0x11C09, 0x11C37, 0x11C37, 0x11C46, 0x11C4F, 0x11C6D, 0x11C6F, + 0x11C90, 0x11C91, 0x11CA8, 0x11CA8, 0x11CB7, 0x11CFF, 0x11D07, 0x11D07, + 0x11D0A, 0x11D0A, 0x11D37, 0x11D39, 0x11D3B, 0x11D3B, 0x11D3E, 0x11D3E, + 0x11D48, 0x11D4F, 0x11D5A, 0x11D5F, 0x11D66, 0x11D66, 0x11D69, 0x11D69, + 0x11D8F, 0x11D8F, 0x11D92, 0x11D92, 0x11D99, 0x11D9F, 0x11DAA, 0x11EDF, + 0x11EF9, 0x11FAF, 0x11FB1, 0x11FBF, 0x11FF2, 0x11FFE, 0x1239A, 0x123FF, + 0x1246F, 0x1246F, 0x12475, 0x1247F, 0x12544, 0x12F8F, 0x12FF3, 0x12FFF, + 0x1342F, 0x1342F, 0x13439, 0x143FF, 0x14647, 0x167FF, 0x16A39, 0x16A3F, + 0x16A5F, 0x16A5F, 0x16A6A, 0x16A6D, 0x16ABF, 0x16ABF, 0x16ACA, 0x16ACF, + 0x16AEE, 0x16AEF, 0x16AF6, 0x16AFF, 0x16B46, 0x16B4F, 0x16B5A, 0x16B5A, + 0x16B62, 0x16B62, 0x16B78, 0x16B7C, 0x16B90, 0x16E3F, 0x16E9B, 0x16EFF, + 0x16F4B, 0x16F4E, 0x16F88, 0x16F8E, 0x16FA0, 0x16FDF, 0x16FE5, 0x16FEF, + 0x16FF2, 0x16FFF, 0x187F8, 0x187FF, 0x18CD6, 0x18CFF, 0x18D09, 0x1AFEF, + 0x1AFF4, 0x1AFF4, 0x1AFFC, 0x1AFFC, 0x1AFFF, 0x1AFFF, 0x1B123, 0x1B14F, + 0x1B153, 0x1B163, 0x1B168, 0x1B16F, 0x1B2FC, 0x1BBFF, 0x1BC6B, 0x1BC6F, + 0x1BC7D, 0x1BC7F, 0x1BC89, 0x1BC8F, 0x1BC9A, 0x1BC9B, 0x1BCA4, 0x1CEFF, + 0x1CF2E, 0x1CF2F, 0x1CF47, 0x1CF4F, 0x1CFC4, 0x1CFFF, 0x1D0F6, 0x1D0FF, + 0x1D127, 0x1D128, 0x1D1EB, 0x1D1FF, 0x1D246, 0x1D2DF, 0x1D2F4, 0x1D2FF, + 0x1D357, 0x1D35F, 0x1D379, 0x1D3FF, 0x1D455, 0x1D455, 0x1D49D, 0x1D49D, + 0x1D4A0, 0x1D4A1, 0x1D4A3, 0x1D4A4, 0x1D4A7, 0x1D4A8, 0x1D4AD, 0x1D4AD, + 0x1D4BA, 0x1D4BA, 0x1D4BC, 0x1D4BC, 0x1D4C4, 0x1D4C4, 0x1D506, 0x1D506, + 0x1D50B, 0x1D50C, 0x1D515, 0x1D515, 0x1D51D, 0x1D51D, 0x1D53A, 0x1D53A, + 0x1D53F, 0x1D53F, 0x1D545, 0x1D545, 0x1D547, 0x1D549, 0x1D551, 0x1D551, + 0x1D6A6, 0x1D6A7, 0x1D7CC, 0x1D7CD, 0x1DA8C, 0x1DA9A, 0x1DAA0, 0x1DAA0, + 0x1DAB0, 0x1DEFF, 0x1DF1F, 0x1DFFF, 0x1E007, 0x1E007, 0x1E019, 0x1E01A, + 0x1E022, 0x1E022, 0x1E025, 0x1E025, 0x1E02B, 0x1E0FF, 0x1E12D, 0x1E12F, + 0x1E13E, 0x1E13F, 0x1E14A, 0x1E14D, 0x1E150, 0x1E28F, 0x1E2AF, 0x1E2BF, + 0x1E2FA, 0x1E2FE, 0x1E300, 0x1E7DF, 0x1E7E7, 0x1E7E7, 0x1E7EC, 0x1E7EC, + 0x1E7EF, 0x1E7EF, 0x1E7FF, 0x1E7FF, 0x1E8C5, 0x1E8C6, 0x1E8D7, 0x1E8FF, + 0x1E94C, 0x1E94F, 0x1E95A, 0x1E95D, 0x1E960, 0x1EC70, 0x1ECB5, 0x1ED00, + 0x1ED3E, 0x1EDFF, 0x1EE04, 0x1EE04, 0x1EE20, 0x1EE20, 0x1EE23, 0x1EE23, + 0x1EE25, 0x1EE26, 0x1EE28, 0x1EE28, 0x1EE33, 0x1EE33, 0x1EE38, 0x1EE38, + 0x1EE3A, 0x1EE3A, 0x1EE3C, 0x1EE41, 0x1EE43, 0x1EE46, 0x1EE48, 0x1EE48, + 0x1EE4A, 0x1EE4A, 0x1EE4C, 0x1EE4C, 0x1EE50, 0x1EE50, 0x1EE53, 0x1EE53, + 0x1EE55, 0x1EE56, 0x1EE58, 0x1EE58, 0x1EE5A, 0x1EE5A, 0x1EE5C, 0x1EE5C, + 0x1EE5E, 0x1EE5E, 0x1EE60, 0x1EE60, 0x1EE63, 0x1EE63, 0x1EE65, 0x1EE66, + 0x1EE6B, 0x1EE6B, 0x1EE73, 0x1EE73, 0x1EE78, 0x1EE78, 0x1EE7D, 0x1EE7D, + 0x1EE7F, 0x1EE7F, 0x1EE8A, 0x1EE8A, 0x1EE9C, 0x1EEA0, 0x1EEA4, 0x1EEA4, + 0x1EEAA, 0x1EEAA, 0x1EEBC, 0x1EEEF, 0x1EEF2, 0x1EFFF, 0x1F02C, 0x1F02F, + 0x1F094, 0x1F09F, 0x1F0AF, 0x1F0B0, 0x1F0C0, 0x1F0C0, 0x1F0D0, 0x1F0D0, + 0x1F0F6, 0x1F0FF, 0x1F1AE, 0x1F1E5, 0x1F203, 0x1F20F, 0x1F23C, 0x1F23F, + 0x1F249, 0x1F24F, 0x1F252, 0x1F25F, 0x1F266, 0x1F2FF, 0x1F6D8, 0x1F6DC, + 0x1F6ED, 0x1F6EF, 0x1F6FD, 0x1F6FF, 0x1F774, 0x1F77F, 0x1F7D9, 0x1F7DF, + 0x1F7EC, 0x1F7EF, 0x1F7F1, 0x1F7FF, 0x1F80C, 0x1F80F, 0x1F848, 0x1F84F, + 0x1F85A, 0x1F85F, 0x1F888, 0x1F88F, 0x1F8AE, 0x1F8AF, 0x1F8B2, 0x1F8FF, + 0x1FA54, 0x1FA5F, 0x1FA6E, 0x1FA6F, 0x1FA75, 0x1FA77, 0x1FA7D, 0x1FA7F, + 0x1FA87, 0x1FA8F, 0x1FAAD, 0x1FAAF, 0x1FABB, 0x1FABF, 0x1FAC6, 0x1FACF, + 0x1FADA, 0x1FADF, 0x1FAE8, 0x1FAEF, 0x1FAF7, 0x1FAFF, 0x1FB93, 0x1FB93, + 0x1FBCB, 0x1FBEF, 0x1FBFA, 0x1FFFF, 0x2A6E0, 0x2A6FF, 0x2B739, 0x2B73F, + 0x2B81E, 0x2B81F, 0x2CEA2, 0x2CEAF, 0x2EBE1, 0x2F7FF, 0x2FA1E, 0x2FFFF, + 0x3134B, 0xE0000, 0xE0002, 0xE001F, 0xE0080, 0xE00FF, 0xE01F0, 0xEFFFF, + 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF, + // #5 (721+3): gc=Private_Use:Co + 0xE000, 0xF8FF, 0xF0000, 0xFFFFD, 0x100000, 0x10FFFD, + // #6 (724+1): gc=Surrogate:Cs + 0xD800, 0xDFFF, + // #7 (725+1883): gc=Letter:L + // Ll:657 + Lt:10 + Lu:646 + Lm:69 + Lo:501 + // #8 (725+1313): gc=Cased_Letter:LC + // Ll:657 + Lt:10 + Lu:646 + // #9 (725+657): gc=Lowercase_Letter:Ll + 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF, + 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107, + 0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F, + 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117, + 0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F, + 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127, + 0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F, + 0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0138, + 0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140, + 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149, + 0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151, + 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159, + 0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161, + 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169, + 0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171, + 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A, + 0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185, + 0x0188, 0x0188, 0x018C, 0x018D, 0x0192, 0x0192, 0x0195, 0x0195, + 0x0199, 0x019B, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3, + 0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AA, 0x01AB, 0x01AD, 0x01AD, + 0x01B0, 0x01B0, 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01BA, + 0x01BD, 0x01BF, 0x01C6, 0x01C6, 0x01C9, 0x01C9, 0x01CC, 0x01CC, + 0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2, 0x01D4, 0x01D4, + 0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA, 0x01DC, 0x01DD, + 0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3, 0x01E5, 0x01E5, + 0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB, 0x01ED, 0x01ED, + 0x01EF, 0x01F0, 0x01F3, 0x01F3, 0x01F5, 0x01F5, 0x01F9, 0x01F9, + 0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF, 0x0201, 0x0201, + 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, 0x0209, 0x0209, + 0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F, 0x0211, 0x0211, + 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, 0x0219, 0x0219, + 0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F, 0x0221, 0x0221, + 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229, + 0x022B, 0x022B, 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231, + 0x0233, 0x0239, 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242, + 0x0247, 0x0247, 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D, + 0x024F, 0x0293, 0x0295, 0x02AF, 0x0371, 0x0371, 0x0373, 0x0373, + 0x0377, 0x0377, 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE, + 0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB, + 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3, + 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB, + 0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8, + 0x03FB, 0x03FC, 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463, + 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B, + 0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473, + 0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B, + 0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B, + 0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493, + 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B, + 0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3, + 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB, + 0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3, + 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB, + 0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4, + 0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC, + 0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5, + 0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD, + 0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5, + 0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED, + 0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5, + 0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD, + 0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, + 0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D, + 0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515, + 0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D, + 0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525, + 0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D, + 0x052F, 0x052F, 0x0560, 0x0588, 0x10D0, 0x10FA, 0x10FD, 0x10FF, + 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1D00, 0x1D2B, 0x1D6B, 0x1D77, + 0x1D79, 0x1D9A, 0x1E01, 0x1E01, 0x1E03, 0x1E03, 0x1E05, 0x1E05, + 0x1E07, 0x1E07, 0x1E09, 0x1E09, 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, + 0x1E0F, 0x1E0F, 0x1E11, 0x1E11, 0x1E13, 0x1E13, 0x1E15, 0x1E15, + 0x1E17, 0x1E17, 0x1E19, 0x1E19, 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D, + 0x1E1F, 0x1E1F, 0x1E21, 0x1E21, 0x1E23, 0x1E23, 0x1E25, 0x1E25, + 0x1E27, 0x1E27, 0x1E29, 0x1E29, 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, + 0x1E2F, 0x1E2F, 0x1E31, 0x1E31, 0x1E33, 0x1E33, 0x1E35, 0x1E35, + 0x1E37, 0x1E37, 0x1E39, 0x1E39, 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, + 0x1E3F, 0x1E3F, 0x1E41, 0x1E41, 0x1E43, 0x1E43, 0x1E45, 0x1E45, + 0x1E47, 0x1E47, 0x1E49, 0x1E49, 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D, + 0x1E4F, 0x1E4F, 0x1E51, 0x1E51, 0x1E53, 0x1E53, 0x1E55, 0x1E55, + 0x1E57, 0x1E57, 0x1E59, 0x1E59, 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, + 0x1E5F, 0x1E5F, 0x1E61, 0x1E61, 0x1E63, 0x1E63, 0x1E65, 0x1E65, + 0x1E67, 0x1E67, 0x1E69, 0x1E69, 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D, + 0x1E6F, 0x1E6F, 0x1E71, 0x1E71, 0x1E73, 0x1E73, 0x1E75, 0x1E75, + 0x1E77, 0x1E77, 0x1E79, 0x1E79, 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, + 0x1E7F, 0x1E7F, 0x1E81, 0x1E81, 0x1E83, 0x1E83, 0x1E85, 0x1E85, + 0x1E87, 0x1E87, 0x1E89, 0x1E89, 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, + 0x1E8F, 0x1E8F, 0x1E91, 0x1E91, 0x1E93, 0x1E93, 0x1E95, 0x1E9D, + 0x1E9F, 0x1E9F, 0x1EA1, 0x1EA1, 0x1EA3, 0x1EA3, 0x1EA5, 0x1EA5, + 0x1EA7, 0x1EA7, 0x1EA9, 0x1EA9, 0x1EAB, 0x1EAB, 0x1EAD, 0x1EAD, + 0x1EAF, 0x1EAF, 0x1EB1, 0x1EB1, 0x1EB3, 0x1EB3, 0x1EB5, 0x1EB5, + 0x1EB7, 0x1EB7, 0x1EB9, 0x1EB9, 0x1EBB, 0x1EBB, 0x1EBD, 0x1EBD, + 0x1EBF, 0x1EBF, 0x1EC1, 0x1EC1, 0x1EC3, 0x1EC3, 0x1EC5, 0x1EC5, + 0x1EC7, 0x1EC7, 0x1EC9, 0x1EC9, 0x1ECB, 0x1ECB, 0x1ECD, 0x1ECD, + 0x1ECF, 0x1ECF, 0x1ED1, 0x1ED1, 0x1ED3, 0x1ED3, 0x1ED5, 0x1ED5, + 0x1ED7, 0x1ED7, 0x1ED9, 0x1ED9, 0x1EDB, 0x1EDB, 0x1EDD, 0x1EDD, + 0x1EDF, 0x1EDF, 0x1EE1, 0x1EE1, 0x1EE3, 0x1EE3, 0x1EE5, 0x1EE5, + 0x1EE7, 0x1EE7, 0x1EE9, 0x1EE9, 0x1EEB, 0x1EEB, 0x1EED, 0x1EED, + 0x1EEF, 0x1EEF, 0x1EF1, 0x1EF1, 0x1EF3, 0x1EF3, 0x1EF5, 0x1EF5, + 0x1EF7, 0x1EF7, 0x1EF9, 0x1EF9, 0x1EFB, 0x1EFB, 0x1EFD, 0x1EFD, + 0x1EFF, 0x1F07, 0x1F10, 0x1F15, 0x1F20, 0x1F27, 0x1F30, 0x1F37, + 0x1F40, 0x1F45, 0x1F50, 0x1F57, 0x1F60, 0x1F67, 0x1F70, 0x1F7D, + 0x1F80, 0x1F87, 0x1F90, 0x1F97, 0x1FA0, 0x1FA7, 0x1FB0, 0x1FB4, + 0x1FB6, 0x1FB7, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC7, + 0x1FD0, 0x1FD3, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7, 0x1FF2, 0x1FF4, + 0x1FF6, 0x1FF7, 0x210A, 0x210A, 0x210E, 0x210F, 0x2113, 0x2113, + 0x212F, 0x212F, 0x2134, 0x2134, 0x2139, 0x2139, 0x213C, 0x213D, + 0x2146, 0x2149, 0x214E, 0x214E, 0x2184, 0x2184, 0x2C30, 0x2C5F, + 0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A, + 0x2C6C, 0x2C6C, 0x2C71, 0x2C71, 0x2C73, 0x2C74, 0x2C76, 0x2C7B, + 0x2C81, 0x2C81, 0x2C83, 0x2C83, 0x2C85, 0x2C85, 0x2C87, 0x2C87, + 0x2C89, 0x2C89, 0x2C8B, 0x2C8B, 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F, + 0x2C91, 0x2C91, 0x2C93, 0x2C93, 0x2C95, 0x2C95, 0x2C97, 0x2C97, + 0x2C99, 0x2C99, 0x2C9B, 0x2C9B, 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F, + 0x2CA1, 0x2CA1, 0x2CA3, 0x2CA3, 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7, + 0x2CA9, 0x2CA9, 0x2CAB, 0x2CAB, 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF, + 0x2CB1, 0x2CB1, 0x2CB3, 0x2CB3, 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7, + 0x2CB9, 0x2CB9, 0x2CBB, 0x2CBB, 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF, + 0x2CC1, 0x2CC1, 0x2CC3, 0x2CC3, 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7, + 0x2CC9, 0x2CC9, 0x2CCB, 0x2CCB, 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF, + 0x2CD1, 0x2CD1, 0x2CD3, 0x2CD3, 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7, + 0x2CD9, 0x2CD9, 0x2CDB, 0x2CDB, 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF, + 0x2CE1, 0x2CE1, 0x2CE3, 0x2CE4, 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE, + 0x2CF3, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, + 0xA641, 0xA641, 0xA643, 0xA643, 0xA645, 0xA645, 0xA647, 0xA647, + 0xA649, 0xA649, 0xA64B, 0xA64B, 0xA64D, 0xA64D, 0xA64F, 0xA64F, + 0xA651, 0xA651, 0xA653, 0xA653, 0xA655, 0xA655, 0xA657, 0xA657, + 0xA659, 0xA659, 0xA65B, 0xA65B, 0xA65D, 0xA65D, 0xA65F, 0xA65F, + 0xA661, 0xA661, 0xA663, 0xA663, 0xA665, 0xA665, 0xA667, 0xA667, + 0xA669, 0xA669, 0xA66B, 0xA66B, 0xA66D, 0xA66D, 0xA681, 0xA681, + 0xA683, 0xA683, 0xA685, 0xA685, 0xA687, 0xA687, 0xA689, 0xA689, + 0xA68B, 0xA68B, 0xA68D, 0xA68D, 0xA68F, 0xA68F, 0xA691, 0xA691, + 0xA693, 0xA693, 0xA695, 0xA695, 0xA697, 0xA697, 0xA699, 0xA699, + 0xA69B, 0xA69B, 0xA723, 0xA723, 0xA725, 0xA725, 0xA727, 0xA727, + 0xA729, 0xA729, 0xA72B, 0xA72B, 0xA72D, 0xA72D, 0xA72F, 0xA731, + 0xA733, 0xA733, 0xA735, 0xA735, 0xA737, 0xA737, 0xA739, 0xA739, + 0xA73B, 0xA73B, 0xA73D, 0xA73D, 0xA73F, 0xA73F, 0xA741, 0xA741, + 0xA743, 0xA743, 0xA745, 0xA745, 0xA747, 0xA747, 0xA749, 0xA749, + 0xA74B, 0xA74B, 0xA74D, 0xA74D, 0xA74F, 0xA74F, 0xA751, 0xA751, + 0xA753, 0xA753, 0xA755, 0xA755, 0xA757, 0xA757, 0xA759, 0xA759, + 0xA75B, 0xA75B, 0xA75D, 0xA75D, 0xA75F, 0xA75F, 0xA761, 0xA761, + 0xA763, 0xA763, 0xA765, 0xA765, 0xA767, 0xA767, 0xA769, 0xA769, + 0xA76B, 0xA76B, 0xA76D, 0xA76D, 0xA76F, 0xA76F, 0xA771, 0xA778, + 0xA77A, 0xA77A, 0xA77C, 0xA77C, 0xA77F, 0xA77F, 0xA781, 0xA781, + 0xA783, 0xA783, 0xA785, 0xA785, 0xA787, 0xA787, 0xA78C, 0xA78C, + 0xA78E, 0xA78E, 0xA791, 0xA791, 0xA793, 0xA795, 0xA797, 0xA797, + 0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F, + 0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7, + 0xA7A9, 0xA7A9, 0xA7AF, 0xA7AF, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, + 0xA7B9, 0xA7B9, 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF, + 0xA7C1, 0xA7C1, 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA, + 0xA7D1, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D5, 0xA7D7, 0xA7D7, + 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6, 0xA7FA, 0xA7FA, 0xAB30, 0xAB5A, + 0xAB60, 0xAB68, 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, + 0xFF41, 0xFF5A, 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1, + 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10CC0, 0x10CF2, + 0x118C0, 0x118DF, 0x16E60, 0x16E7F, 0x1D41A, 0x1D433, 0x1D44E, 0x1D454, + 0x1D456, 0x1D467, 0x1D482, 0x1D49B, 0x1D4B6, 0x1D4B9, 0x1D4BB, 0x1D4BB, + 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D4CF, 0x1D4EA, 0x1D503, 0x1D51E, 0x1D537, + 0x1D552, 0x1D56B, 0x1D586, 0x1D59F, 0x1D5BA, 0x1D5D3, 0x1D5EE, 0x1D607, + 0x1D622, 0x1D63B, 0x1D656, 0x1D66F, 0x1D68A, 0x1D6A5, 0x1D6C2, 0x1D6DA, + 0x1D6DC, 0x1D6E1, 0x1D6FC, 0x1D714, 0x1D716, 0x1D71B, 0x1D736, 0x1D74E, + 0x1D750, 0x1D755, 0x1D770, 0x1D788, 0x1D78A, 0x1D78F, 0x1D7AA, 0x1D7C2, + 0x1D7C4, 0x1D7C9, 0x1D7CB, 0x1D7CB, 0x1DF00, 0x1DF09, 0x1DF0B, 0x1DF1E, + 0x1E922, 0x1E943, + // #10 (1382+10): gc=Titlecase_Letter:Lt + 0x01C5, 0x01C5, 0x01C8, 0x01C8, 0x01CB, 0x01CB, 0x01F2, 0x01F2, + 0x1F88, 0x1F8F, 0x1F98, 0x1F9F, 0x1FA8, 0x1FAF, 0x1FBC, 0x1FBC, + 0x1FCC, 0x1FCC, 0x1FFC, 0x1FFC, + // #11 (1392+646): gc=Uppercase_Letter:Lu + 0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100, + 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108, + 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110, + 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118, + 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120, + 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128, + 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130, + 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139, + 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141, + 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A, + 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152, + 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A, + 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162, + 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A, + 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172, + 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B, + 0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, + 0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198, + 0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4, + 0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF, + 0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC, + 0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CD, 0x01CD, + 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5, + 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE, + 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6, + 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE, + 0x01F1, 0x01F1, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA, + 0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202, + 0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A, + 0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212, + 0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A, + 0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222, + 0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A, + 0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232, + 0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246, + 0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E, + 0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F, + 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F, + 0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D2, 0x03D4, + 0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE, + 0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, + 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE, + 0x03F4, 0x03F4, 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, + 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, + 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, + 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, + 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, + 0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, + 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, + 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, + 0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, + 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, + 0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, + 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, + 0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, + 0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, + 0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, + 0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, + 0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, + 0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, + 0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, + 0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, + 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, + 0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, + 0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, + 0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, + 0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, + 0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x13A0, 0x13F5, + 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02, + 0x1E04, 0x1E04, 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A, + 0x1E0C, 0x1E0C, 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12, + 0x1E14, 0x1E14, 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A, + 0x1E1C, 0x1E1C, 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22, + 0x1E24, 0x1E24, 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A, + 0x1E2C, 0x1E2C, 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32, + 0x1E34, 0x1E34, 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A, + 0x1E3C, 0x1E3C, 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42, + 0x1E44, 0x1E44, 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A, + 0x1E4C, 0x1E4C, 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52, + 0x1E54, 0x1E54, 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A, + 0x1E5C, 0x1E5C, 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62, + 0x1E64, 0x1E64, 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A, + 0x1E6C, 0x1E6C, 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72, + 0x1E74, 0x1E74, 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A, + 0x1E7C, 0x1E7C, 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82, + 0x1E84, 0x1E84, 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A, + 0x1E8C, 0x1E8C, 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92, + 0x1E94, 0x1E94, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2, + 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA, + 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2, + 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA, + 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2, + 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA, + 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2, + 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA, + 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2, + 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA, + 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2, + 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA, + 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D, + 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59, + 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F, + 0x1FB8, 0x1FBB, 0x1FC8, 0x1FCB, 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, + 0x1FF8, 0x1FFB, 0x2102, 0x2102, 0x2107, 0x2107, 0x210B, 0x210D, + 0x2110, 0x2112, 0x2115, 0x2115, 0x2119, 0x211D, 0x2124, 0x2124, + 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D, 0x2130, 0x2133, + 0x213E, 0x213F, 0x2145, 0x2145, 0x2183, 0x2183, 0x2C00, 0x2C2F, + 0x2C60, 0x2C60, 0x2C62, 0x2C64, 0x2C67, 0x2C67, 0x2C69, 0x2C69, + 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70, 0x2C72, 0x2C72, 0x2C75, 0x2C75, + 0x2C7E, 0x2C80, 0x2C82, 0x2C82, 0x2C84, 0x2C84, 0x2C86, 0x2C86, + 0x2C88, 0x2C88, 0x2C8A, 0x2C8A, 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, + 0x2C90, 0x2C90, 0x2C92, 0x2C92, 0x2C94, 0x2C94, 0x2C96, 0x2C96, + 0x2C98, 0x2C98, 0x2C9A, 0x2C9A, 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, + 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2, 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, + 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA, 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, + 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2, 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, + 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA, 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, + 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2, 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, + 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA, 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, + 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2, 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, + 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA, 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, + 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2, 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, + 0x2CF2, 0x2CF2, 0xA640, 0xA640, 0xA642, 0xA642, 0xA644, 0xA644, + 0xA646, 0xA646, 0xA648, 0xA648, 0xA64A, 0xA64A, 0xA64C, 0xA64C, + 0xA64E, 0xA64E, 0xA650, 0xA650, 0xA652, 0xA652, 0xA654, 0xA654, + 0xA656, 0xA656, 0xA658, 0xA658, 0xA65A, 0xA65A, 0xA65C, 0xA65C, + 0xA65E, 0xA65E, 0xA660, 0xA660, 0xA662, 0xA662, 0xA664, 0xA664, + 0xA666, 0xA666, 0xA668, 0xA668, 0xA66A, 0xA66A, 0xA66C, 0xA66C, + 0xA680, 0xA680, 0xA682, 0xA682, 0xA684, 0xA684, 0xA686, 0xA686, + 0xA688, 0xA688, 0xA68A, 0xA68A, 0xA68C, 0xA68C, 0xA68E, 0xA68E, + 0xA690, 0xA690, 0xA692, 0xA692, 0xA694, 0xA694, 0xA696, 0xA696, + 0xA698, 0xA698, 0xA69A, 0xA69A, 0xA722, 0xA722, 0xA724, 0xA724, + 0xA726, 0xA726, 0xA728, 0xA728, 0xA72A, 0xA72A, 0xA72C, 0xA72C, + 0xA72E, 0xA72E, 0xA732, 0xA732, 0xA734, 0xA734, 0xA736, 0xA736, + 0xA738, 0xA738, 0xA73A, 0xA73A, 0xA73C, 0xA73C, 0xA73E, 0xA73E, + 0xA740, 0xA740, 0xA742, 0xA742, 0xA744, 0xA744, 0xA746, 0xA746, + 0xA748, 0xA748, 0xA74A, 0xA74A, 0xA74C, 0xA74C, 0xA74E, 0xA74E, + 0xA750, 0xA750, 0xA752, 0xA752, 0xA754, 0xA754, 0xA756, 0xA756, + 0xA758, 0xA758, 0xA75A, 0xA75A, 0xA75C, 0xA75C, 0xA75E, 0xA75E, + 0xA760, 0xA760, 0xA762, 0xA762, 0xA764, 0xA764, 0xA766, 0xA766, + 0xA768, 0xA768, 0xA76A, 0xA76A, 0xA76C, 0xA76C, 0xA76E, 0xA76E, + 0xA779, 0xA779, 0xA77B, 0xA77B, 0xA77D, 0xA77E, 0xA780, 0xA780, + 0xA782, 0xA782, 0xA784, 0xA784, 0xA786, 0xA786, 0xA78B, 0xA78B, + 0xA78D, 0xA78D, 0xA790, 0xA790, 0xA792, 0xA792, 0xA796, 0xA796, + 0xA798, 0xA798, 0xA79A, 0xA79A, 0xA79C, 0xA79C, 0xA79E, 0xA79E, + 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6, + 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6, + 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE, + 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9, + 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5, + 0xFF21, 0xFF3A, 0x10400, 0x10427, 0x104B0, 0x104D3, 0x10570, 0x1057A, + 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, 0x10C80, 0x10CB2, + 0x118A0, 0x118BF, 0x16E40, 0x16E5F, 0x1D400, 0x1D419, 0x1D434, 0x1D44D, + 0x1D468, 0x1D481, 0x1D49C, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, + 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B5, 0x1D4D0, 0x1D4E9, + 0x1D504, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, + 0x1D538, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546, + 0x1D54A, 0x1D550, 0x1D56C, 0x1D585, 0x1D5A0, 0x1D5B9, 0x1D5D4, 0x1D5ED, + 0x1D608, 0x1D621, 0x1D63C, 0x1D655, 0x1D670, 0x1D689, 0x1D6A8, 0x1D6C0, + 0x1D6E2, 0x1D6FA, 0x1D71C, 0x1D734, 0x1D756, 0x1D76E, 0x1D790, 0x1D7A8, + 0x1D7CA, 0x1D7CA, 0x1E900, 0x1E921, + // #12 (2038+69): gc=Modifier_Letter:Lm + 0x02B0, 0x02C1, 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, + 0x02EE, 0x02EE, 0x0374, 0x0374, 0x037A, 0x037A, 0x0559, 0x0559, + 0x0640, 0x0640, 0x06E5, 0x06E6, 0x07F4, 0x07F5, 0x07FA, 0x07FA, + 0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x08C9, 0x08C9, + 0x0971, 0x0971, 0x0E46, 0x0E46, 0x0EC6, 0x0EC6, 0x10FC, 0x10FC, + 0x17D7, 0x17D7, 0x1843, 0x1843, 0x1AA7, 0x1AA7, 0x1C78, 0x1C7D, + 0x1D2C, 0x1D6A, 0x1D78, 0x1D78, 0x1D9B, 0x1DBF, 0x2071, 0x2071, + 0x207F, 0x207F, 0x2090, 0x209C, 0x2C7C, 0x2C7D, 0x2D6F, 0x2D6F, + 0x2E2F, 0x2E2F, 0x3005, 0x3005, 0x3031, 0x3035, 0x303B, 0x303B, + 0x309D, 0x309E, 0x30FC, 0x30FE, 0xA015, 0xA015, 0xA4F8, 0xA4FD, + 0xA60C, 0xA60C, 0xA67F, 0xA67F, 0xA69C, 0xA69D, 0xA717, 0xA71F, + 0xA770, 0xA770, 0xA788, 0xA788, 0xA7F2, 0xA7F4, 0xA7F8, 0xA7F9, + 0xA9CF, 0xA9CF, 0xA9E6, 0xA9E6, 0xAA70, 0xAA70, 0xAADD, 0xAADD, + 0xAAF3, 0xAAF4, 0xAB5C, 0xAB5F, 0xAB69, 0xAB69, 0xFF70, 0xFF70, + 0xFF9E, 0xFF9F, 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, + 0x16B40, 0x16B43, 0x16F93, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, + 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1E137, 0x1E13D, + 0x1E94B, 0x1E94B, + // #13 (2107+501): gc=Other_Letter:Lo + 0x00AA, 0x00AA, 0x00BA, 0x00BA, 0x01BB, 0x01BB, 0x01C0, 0x01C3, + 0x0294, 0x0294, 0x05D0, 0x05EA, 0x05EF, 0x05F2, 0x0620, 0x063F, + 0x0641, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5, + 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x0710, + 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1, 0x07CA, 0x07EA, + 0x0800, 0x0815, 0x0840, 0x0858, 0x0860, 0x086A, 0x0870, 0x0887, + 0x0889, 0x088E, 0x08A0, 0x08C8, 0x0904, 0x0939, 0x093D, 0x093D, + 0x0950, 0x0950, 0x0958, 0x0961, 0x0972, 0x0980, 0x0985, 0x098C, + 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2, + 0x09B6, 0x09B9, 0x09BD, 0x09BD, 0x09CE, 0x09CE, 0x09DC, 0x09DD, + 0x09DF, 0x09E1, 0x09F0, 0x09F1, 0x09FC, 0x09FC, 0x0A05, 0x0A0A, + 0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, + 0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, + 0x0A72, 0x0A74, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, + 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD, + 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1, 0x0AF9, 0x0AF9, 0x0B05, 0x0B0C, + 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, + 0x0B35, 0x0B39, 0x0B3D, 0x0B3D, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, + 0x0B71, 0x0B71, 0x0B83, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, + 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, + 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0, + 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39, + 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C61, + 0x0C80, 0x0C80, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, + 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE, + 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2, 0x0D04, 0x0D0C, 0x0D0E, 0x0D10, + 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, 0x0D4E, 0x0D4E, 0x0D54, 0x0D56, + 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, + 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0E01, 0x0E30, + 0x0E32, 0x0E33, 0x0E40, 0x0E45, 0x0E81, 0x0E82, 0x0E84, 0x0E84, + 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0, + 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EDC, 0x0EDF, + 0x0F00, 0x0F00, 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C, + 0x1000, 0x102A, 0x103F, 0x103F, 0x1050, 0x1055, 0x105A, 0x105D, + 0x1061, 0x1061, 0x1065, 0x1066, 0x106E, 0x1070, 0x1075, 0x1081, + 0x108E, 0x108E, 0x1100, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, + 0x1258, 0x1258, 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, + 0x1290, 0x12B0, 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, + 0x12C2, 0x12C5, 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, + 0x1318, 0x135A, 0x1380, 0x138F, 0x1401, 0x166C, 0x166F, 0x167F, + 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16F1, 0x16F8, 0x1700, 0x1711, + 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C, 0x176E, 0x1770, + 0x1780, 0x17B3, 0x17DC, 0x17DC, 0x1820, 0x1842, 0x1844, 0x1878, + 0x1880, 0x1884, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5, + 0x1900, 0x191E, 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, + 0x19B0, 0x19C9, 0x1A00, 0x1A16, 0x1A20, 0x1A54, 0x1B05, 0x1B33, + 0x1B45, 0x1B4C, 0x1B83, 0x1BA0, 0x1BAE, 0x1BAF, 0x1BBA, 0x1BE5, + 0x1C00, 0x1C23, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C77, 0x1CE9, 0x1CEC, + 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x2135, 0x2138, + 0x2D30, 0x2D67, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, + 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, + 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0x3006, 0x3006, 0x303C, 0x303C, + 0x3041, 0x3096, 0x309F, 0x309F, 0x30A1, 0x30FA, 0x30FF, 0x30FF, + 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF, + 0x3400, 0x4DBF, 0x4E00, 0xA014, 0xA016, 0xA48C, 0xA4D0, 0xA4F7, + 0xA500, 0xA60B, 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA66E, 0xA66E, + 0xA6A0, 0xA6E5, 0xA78F, 0xA78F, 0xA7F7, 0xA7F7, 0xA7FB, 0xA801, + 0xA803, 0xA805, 0xA807, 0xA80A, 0xA80C, 0xA822, 0xA840, 0xA873, + 0xA882, 0xA8B3, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FE, + 0xA90A, 0xA925, 0xA930, 0xA946, 0xA960, 0xA97C, 0xA984, 0xA9B2, + 0xA9E0, 0xA9E4, 0xA9E7, 0xA9EF, 0xA9FA, 0xA9FE, 0xAA00, 0xAA28, + 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA6F, 0xAA71, 0xAA76, + 0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6, + 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADC, + 0xAAE0, 0xAAEA, 0xAAF2, 0xAAF2, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, + 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xABC0, 0xABE2, + 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, + 0xFA70, 0xFAD9, 0xFB1D, 0xFB1D, 0xFB1F, 0xFB28, 0xFB2A, 0xFB36, + 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44, + 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F, 0xFD92, 0xFDC7, + 0xFDF0, 0xFDFB, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0xFF66, 0xFF6F, + 0xFF71, 0xFF9D, 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, + 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0x10000, 0x1000B, 0x1000D, 0x10026, + 0x10028, 0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D, + 0x10080, 0x100FA, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x10300, 0x1031F, + 0x1032D, 0x10340, 0x10342, 0x10349, 0x10350, 0x10375, 0x10380, 0x1039D, + 0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x10450, 0x1049D, 0x10500, 0x10527, + 0x10530, 0x10563, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, + 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, + 0x1083C, 0x1083C, 0x1083F, 0x10855, 0x10860, 0x10876, 0x10880, 0x1089E, + 0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x10900, 0x10915, 0x10920, 0x10939, + 0x10980, 0x109B7, 0x109BE, 0x109BF, 0x10A00, 0x10A00, 0x10A10, 0x10A13, + 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A60, 0x10A7C, 0x10A80, 0x10A9C, + 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4, 0x10B00, 0x10B35, 0x10B40, 0x10B55, + 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48, 0x10D00, 0x10D23, + 0x10E80, 0x10EA9, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27, + 0x10F30, 0x10F45, 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, + 0x11003, 0x11037, 0x11071, 0x11072, 0x11075, 0x11075, 0x11083, 0x110AF, + 0x110D0, 0x110E8, 0x11103, 0x11126, 0x11144, 0x11144, 0x11147, 0x11147, + 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111B2, 0x111C1, 0x111C4, + 0x111DA, 0x111DA, 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x1122B, + 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, + 0x1129F, 0x112A8, 0x112B0, 0x112DE, 0x11305, 0x1130C, 0x1130F, 0x11310, + 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, + 0x1133D, 0x1133D, 0x11350, 0x11350, 0x1135D, 0x11361, 0x11400, 0x11434, + 0x11447, 0x1144A, 0x1145F, 0x11461, 0x11480, 0x114AF, 0x114C4, 0x114C5, + 0x114C7, 0x114C7, 0x11580, 0x115AE, 0x115D8, 0x115DB, 0x11600, 0x1162F, + 0x11644, 0x11644, 0x11680, 0x116AA, 0x116B8, 0x116B8, 0x11700, 0x1171A, + 0x11740, 0x11746, 0x11800, 0x1182B, 0x118FF, 0x11906, 0x11909, 0x11909, + 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x1192F, 0x1193F, 0x1193F, + 0x11941, 0x11941, 0x119A0, 0x119A7, 0x119AA, 0x119D0, 0x119E1, 0x119E1, + 0x119E3, 0x119E3, 0x11A00, 0x11A00, 0x11A0B, 0x11A32, 0x11A3A, 0x11A3A, + 0x11A50, 0x11A50, 0x11A5C, 0x11A89, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, + 0x11C00, 0x11C08, 0x11C0A, 0x11C2E, 0x11C40, 0x11C40, 0x11C72, 0x11C8F, + 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D30, 0x11D46, 0x11D46, + 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D89, 0x11D98, 0x11D98, + 0x11EE0, 0x11EF2, 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12480, 0x12543, + 0x12F90, 0x12FF0, 0x13000, 0x1342E, 0x14400, 0x14646, 0x16800, 0x16A38, + 0x16A40, 0x16A5E, 0x16A70, 0x16ABE, 0x16AD0, 0x16AED, 0x16B00, 0x16B2F, + 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16F00, 0x16F4A, 0x16F50, 0x16F50, + 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1B000, 0x1B122, + 0x1B150, 0x1B152, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, + 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1DF0A, 0x1DF0A, + 0x1E100, 0x1E12C, 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, + 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, + 0x1E800, 0x1E8C4, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, + 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, + 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, + 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, + 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, + 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, + 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, + 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, + 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, + 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, + 0x30000, 0x3134A, + // #14 (2608+518): gc=Mark:M:Combining_Mark + // Mc:177 + Me:5 + Mn:336 + // #15 (2608+177): gc=Spacing_Mark:Mc + 0x0903, 0x0903, 0x093B, 0x093B, 0x093E, 0x0940, 0x0949, 0x094C, + 0x094E, 0x094F, 0x0982, 0x0983, 0x09BE, 0x09C0, 0x09C7, 0x09C8, + 0x09CB, 0x09CC, 0x09D7, 0x09D7, 0x0A03, 0x0A03, 0x0A3E, 0x0A40, + 0x0A83, 0x0A83, 0x0ABE, 0x0AC0, 0x0AC9, 0x0AC9, 0x0ACB, 0x0ACC, + 0x0B02, 0x0B03, 0x0B3E, 0x0B3E, 0x0B40, 0x0B40, 0x0B47, 0x0B48, + 0x0B4B, 0x0B4C, 0x0B57, 0x0B57, 0x0BBE, 0x0BBF, 0x0BC1, 0x0BC2, + 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC, 0x0BD7, 0x0BD7, 0x0C01, 0x0C03, + 0x0C41, 0x0C44, 0x0C82, 0x0C83, 0x0CBE, 0x0CBE, 0x0CC0, 0x0CC4, + 0x0CC7, 0x0CC8, 0x0CCA, 0x0CCB, 0x0CD5, 0x0CD6, 0x0D02, 0x0D03, + 0x0D3E, 0x0D40, 0x0D46, 0x0D48, 0x0D4A, 0x0D4C, 0x0D57, 0x0D57, + 0x0D82, 0x0D83, 0x0DCF, 0x0DD1, 0x0DD8, 0x0DDF, 0x0DF2, 0x0DF3, + 0x0F3E, 0x0F3F, 0x0F7F, 0x0F7F, 0x102B, 0x102C, 0x1031, 0x1031, + 0x1038, 0x1038, 0x103B, 0x103C, 0x1056, 0x1057, 0x1062, 0x1064, + 0x1067, 0x106D, 0x1083, 0x1084, 0x1087, 0x108C, 0x108F, 0x108F, + 0x109A, 0x109C, 0x1715, 0x1715, 0x1734, 0x1734, 0x17B6, 0x17B6, + 0x17BE, 0x17C5, 0x17C7, 0x17C8, 0x1923, 0x1926, 0x1929, 0x192B, + 0x1930, 0x1931, 0x1933, 0x1938, 0x1A19, 0x1A1A, 0x1A55, 0x1A55, + 0x1A57, 0x1A57, 0x1A61, 0x1A61, 0x1A63, 0x1A64, 0x1A6D, 0x1A72, + 0x1B04, 0x1B04, 0x1B35, 0x1B35, 0x1B3B, 0x1B3B, 0x1B3D, 0x1B41, + 0x1B43, 0x1B44, 0x1B82, 0x1B82, 0x1BA1, 0x1BA1, 0x1BA6, 0x1BA7, + 0x1BAA, 0x1BAA, 0x1BE7, 0x1BE7, 0x1BEA, 0x1BEC, 0x1BEE, 0x1BEE, + 0x1BF2, 0x1BF3, 0x1C24, 0x1C2B, 0x1C34, 0x1C35, 0x1CE1, 0x1CE1, + 0x1CF7, 0x1CF7, 0x302E, 0x302F, 0xA823, 0xA824, 0xA827, 0xA827, + 0xA880, 0xA881, 0xA8B4, 0xA8C3, 0xA952, 0xA953, 0xA983, 0xA983, + 0xA9B4, 0xA9B5, 0xA9BA, 0xA9BB, 0xA9BE, 0xA9C0, 0xAA2F, 0xAA30, + 0xAA33, 0xAA34, 0xAA4D, 0xAA4D, 0xAA7B, 0xAA7B, 0xAA7D, 0xAA7D, + 0xAAEB, 0xAAEB, 0xAAEE, 0xAAEF, 0xAAF5, 0xAAF5, 0xABE3, 0xABE4, + 0xABE6, 0xABE7, 0xABE9, 0xABEA, 0xABEC, 0xABEC, 0x11000, 0x11000, + 0x11002, 0x11002, 0x11082, 0x11082, 0x110B0, 0x110B2, 0x110B7, 0x110B8, + 0x1112C, 0x1112C, 0x11145, 0x11146, 0x11182, 0x11182, 0x111B3, 0x111B5, + 0x111BF, 0x111C0, 0x111CE, 0x111CE, 0x1122C, 0x1122E, 0x11232, 0x11233, + 0x11235, 0x11235, 0x112E0, 0x112E2, 0x11302, 0x11303, 0x1133E, 0x1133F, + 0x11341, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D, 0x11357, 0x11357, + 0x11362, 0x11363, 0x11435, 0x11437, 0x11440, 0x11441, 0x11445, 0x11445, + 0x114B0, 0x114B2, 0x114B9, 0x114B9, 0x114BB, 0x114BE, 0x114C1, 0x114C1, + 0x115AF, 0x115B1, 0x115B8, 0x115BB, 0x115BE, 0x115BE, 0x11630, 0x11632, + 0x1163B, 0x1163C, 0x1163E, 0x1163E, 0x116AC, 0x116AC, 0x116AE, 0x116AF, + 0x116B6, 0x116B6, 0x11720, 0x11721, 0x11726, 0x11726, 0x1182C, 0x1182E, + 0x11838, 0x11838, 0x11930, 0x11935, 0x11937, 0x11938, 0x1193D, 0x1193D, + 0x11940, 0x11940, 0x11942, 0x11942, 0x119D1, 0x119D3, 0x119DC, 0x119DF, + 0x119E4, 0x119E4, 0x11A39, 0x11A39, 0x11A57, 0x11A58, 0x11A97, 0x11A97, + 0x11C2F, 0x11C2F, 0x11C3E, 0x11C3E, 0x11CA9, 0x11CA9, 0x11CB1, 0x11CB1, + 0x11CB4, 0x11CB4, 0x11D8A, 0x11D8E, 0x11D93, 0x11D94, 0x11D96, 0x11D96, + 0x11EF5, 0x11EF6, 0x16F51, 0x16F87, 0x16FF0, 0x16FF1, 0x1D165, 0x1D166, + 0x1D16D, 0x1D172, + // #16 (2785+5): gc=Enclosing_Mark:Me + 0x0488, 0x0489, 0x1ABE, 0x1ABE, 0x20DD, 0x20E0, 0x20E2, 0x20E4, + 0xA670, 0xA672, + // #17 (2790+336): gc=Nonspacing_Mark:Mn + 0x0300, 0x036F, 0x0483, 0x0487, 0x0591, 0x05BD, 0x05BF, 0x05BF, + 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x0610, 0x061A, + 0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DC, 0x06DF, 0x06E4, + 0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0711, 0x0711, 0x0730, 0x074A, + 0x07A6, 0x07B0, 0x07EB, 0x07F3, 0x07FD, 0x07FD, 0x0816, 0x0819, + 0x081B, 0x0823, 0x0825, 0x0827, 0x0829, 0x082D, 0x0859, 0x085B, + 0x0898, 0x089F, 0x08CA, 0x08E1, 0x08E3, 0x0902, 0x093A, 0x093A, + 0x093C, 0x093C, 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957, + 0x0962, 0x0963, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09C1, 0x09C4, + 0x09CD, 0x09CD, 0x09E2, 0x09E3, 0x09FE, 0x09FE, 0x0A01, 0x0A02, + 0x0A3C, 0x0A3C, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, + 0x0A51, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A75, 0x0A81, 0x0A82, + 0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5, 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD, + 0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF, 0x0B01, 0x0B01, 0x0B3C, 0x0B3C, + 0x0B3F, 0x0B3F, 0x0B41, 0x0B44, 0x0B4D, 0x0B4D, 0x0B55, 0x0B56, + 0x0B62, 0x0B63, 0x0B82, 0x0B82, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD, + 0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40, + 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63, + 0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC6, 0x0CC6, + 0x0CCC, 0x0CCD, 0x0CE2, 0x0CE3, 0x0D00, 0x0D01, 0x0D3B, 0x0D3C, + 0x0D41, 0x0D44, 0x0D4D, 0x0D4D, 0x0D62, 0x0D63, 0x0D81, 0x0D81, + 0x0DCA, 0x0DCA, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6, 0x0E31, 0x0E31, + 0x0E34, 0x0E3A, 0x0E47, 0x0E4E, 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC, + 0x0EC8, 0x0ECD, 0x0F18, 0x0F19, 0x0F35, 0x0F35, 0x0F37, 0x0F37, + 0x0F39, 0x0F39, 0x0F71, 0x0F7E, 0x0F80, 0x0F84, 0x0F86, 0x0F87, + 0x0F8D, 0x0F97, 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x102D, 0x1030, + 0x1032, 0x1037, 0x1039, 0x103A, 0x103D, 0x103E, 0x1058, 0x1059, + 0x105E, 0x1060, 0x1071, 0x1074, 0x1082, 0x1082, 0x1085, 0x1086, + 0x108D, 0x108D, 0x109D, 0x109D, 0x135D, 0x135F, 0x1712, 0x1714, + 0x1732, 0x1733, 0x1752, 0x1753, 0x1772, 0x1773, 0x17B4, 0x17B5, + 0x17B7, 0x17BD, 0x17C6, 0x17C6, 0x17C9, 0x17D3, 0x17DD, 0x17DD, + 0x180B, 0x180D, 0x180F, 0x180F, 0x1885, 0x1886, 0x18A9, 0x18A9, + 0x1920, 0x1922, 0x1927, 0x1928, 0x1932, 0x1932, 0x1939, 0x193B, + 0x1A17, 0x1A18, 0x1A1B, 0x1A1B, 0x1A56, 0x1A56, 0x1A58, 0x1A5E, + 0x1A60, 0x1A60, 0x1A62, 0x1A62, 0x1A65, 0x1A6C, 0x1A73, 0x1A7C, + 0x1A7F, 0x1A7F, 0x1AB0, 0x1ABD, 0x1ABF, 0x1ACE, 0x1B00, 0x1B03, + 0x1B34, 0x1B34, 0x1B36, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42, + 0x1B6B, 0x1B73, 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9, + 0x1BAB, 0x1BAD, 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED, + 0x1BEF, 0x1BF1, 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1CD0, 0x1CD2, + 0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, + 0x1CF8, 0x1CF9, 0x1DC0, 0x1DFF, 0x20D0, 0x20DC, 0x20E1, 0x20E1, + 0x20E5, 0x20F0, 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, + 0x302A, 0x302D, 0x3099, 0x309A, 0xA66F, 0xA66F, 0xA674, 0xA67D, + 0xA69E, 0xA69F, 0xA6F0, 0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806, + 0xA80B, 0xA80B, 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5, + 0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA951, + 0xA980, 0xA982, 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD, + 0xA9E5, 0xA9E5, 0xAA29, 0xAA2E, 0xAA31, 0xAA32, 0xAA35, 0xAA36, + 0xAA43, 0xAA43, 0xAA4C, 0xAA4C, 0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0, + 0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8, 0xAABE, 0xAABF, 0xAAC1, 0xAAC1, + 0xAAEC, 0xAAED, 0xAAF6, 0xAAF6, 0xABE5, 0xABE5, 0xABE8, 0xABE8, + 0xABED, 0xABED, 0xFB1E, 0xFB1E, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, + 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10A01, 0x10A03, + 0x10A05, 0x10A06, 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, + 0x10AE5, 0x10AE6, 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10F46, 0x10F50, + 0x10F82, 0x10F85, 0x11001, 0x11001, 0x11038, 0x11046, 0x11070, 0x11070, + 0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA, + 0x110C2, 0x110C2, 0x11100, 0x11102, 0x11127, 0x1112B, 0x1112D, 0x11134, + 0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE, 0x111C9, 0x111CC, + 0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237, + 0x1123E, 0x1123E, 0x112DF, 0x112DF, 0x112E3, 0x112EA, 0x11300, 0x11301, + 0x1133B, 0x1133C, 0x11340, 0x11340, 0x11366, 0x1136C, 0x11370, 0x11374, + 0x11438, 0x1143F, 0x11442, 0x11444, 0x11446, 0x11446, 0x1145E, 0x1145E, + 0x114B3, 0x114B8, 0x114BA, 0x114BA, 0x114BF, 0x114C0, 0x114C2, 0x114C3, + 0x115B2, 0x115B5, 0x115BC, 0x115BD, 0x115BF, 0x115C0, 0x115DC, 0x115DD, + 0x11633, 0x1163A, 0x1163D, 0x1163D, 0x1163F, 0x11640, 0x116AB, 0x116AB, + 0x116AD, 0x116AD, 0x116B0, 0x116B5, 0x116B7, 0x116B7, 0x1171D, 0x1171F, + 0x11722, 0x11725, 0x11727, 0x1172B, 0x1182F, 0x11837, 0x11839, 0x1183A, + 0x1193B, 0x1193C, 0x1193E, 0x1193E, 0x11943, 0x11943, 0x119D4, 0x119D7, + 0x119DA, 0x119DB, 0x119E0, 0x119E0, 0x11A01, 0x11A0A, 0x11A33, 0x11A38, + 0x11A3B, 0x11A3E, 0x11A47, 0x11A47, 0x11A51, 0x11A56, 0x11A59, 0x11A5B, + 0x11A8A, 0x11A96, 0x11A98, 0x11A99, 0x11C30, 0x11C36, 0x11C38, 0x11C3D, + 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7, 0x11CAA, 0x11CB0, 0x11CB2, 0x11CB3, + 0x11CB5, 0x11CB6, 0x11D31, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, + 0x11D3F, 0x11D45, 0x11D47, 0x11D47, 0x11D90, 0x11D91, 0x11D95, 0x11D95, + 0x11D97, 0x11D97, 0x11EF3, 0x11EF4, 0x16AF0, 0x16AF4, 0x16B30, 0x16B36, + 0x16F4F, 0x16F4F, 0x16F8F, 0x16F92, 0x16FE4, 0x16FE4, 0x1BC9D, 0x1BC9E, + 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169, 0x1D17B, 0x1D182, + 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1DA00, 0x1DA36, + 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F, + 0x1DAA1, 0x1DAAF, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, + 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E130, 0x1E136, 0x1E2AE, 0x1E2AE, + 0x1E2EC, 0x1E2EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E94A, 0xE0100, 0xE01EF, + // #18 (3126+145): gc=Number:N + // Nd:62 + Nl:12 + No:71 + // #19 (3126+62): gc=Decimal_Number:Nd:digit + 0x0030, 0x0039, 0x0660, 0x0669, 0x06F0, 0x06F9, 0x07C0, 0x07C9, + 0x0966, 0x096F, 0x09E6, 0x09EF, 0x0A66, 0x0A6F, 0x0AE6, 0x0AEF, + 0x0B66, 0x0B6F, 0x0BE6, 0x0BEF, 0x0C66, 0x0C6F, 0x0CE6, 0x0CEF, + 0x0D66, 0x0D6F, 0x0DE6, 0x0DEF, 0x0E50, 0x0E59, 0x0ED0, 0x0ED9, + 0x0F20, 0x0F29, 0x1040, 0x1049, 0x1090, 0x1099, 0x17E0, 0x17E9, + 0x1810, 0x1819, 0x1946, 0x194F, 0x19D0, 0x19D9, 0x1A80, 0x1A89, + 0x1A90, 0x1A99, 0x1B50, 0x1B59, 0x1BB0, 0x1BB9, 0x1C40, 0x1C49, + 0x1C50, 0x1C59, 0xA620, 0xA629, 0xA8D0, 0xA8D9, 0xA900, 0xA909, + 0xA9D0, 0xA9D9, 0xA9F0, 0xA9F9, 0xAA50, 0xAA59, 0xABF0, 0xABF9, + 0xFF10, 0xFF19, 0x104A0, 0x104A9, 0x10D30, 0x10D39, 0x11066, 0x1106F, + 0x110F0, 0x110F9, 0x11136, 0x1113F, 0x111D0, 0x111D9, 0x112F0, 0x112F9, + 0x11450, 0x11459, 0x114D0, 0x114D9, 0x11650, 0x11659, 0x116C0, 0x116C9, + 0x11730, 0x11739, 0x118E0, 0x118E9, 0x11950, 0x11959, 0x11C50, 0x11C59, + 0x11D50, 0x11D59, 0x11DA0, 0x11DA9, 0x16A60, 0x16A69, 0x16AC0, 0x16AC9, + 0x16B50, 0x16B59, 0x1D7CE, 0x1D7FF, 0x1E140, 0x1E149, 0x1E2F0, 0x1E2F9, + 0x1E950, 0x1E959, 0x1FBF0, 0x1FBF9, + // #20 (3188+12): gc=Letter_Number:Nl + 0x16EE, 0x16F0, 0x2160, 0x2182, 0x2185, 0x2188, 0x3007, 0x3007, + 0x3021, 0x3029, 0x3038, 0x303A, 0xA6E6, 0xA6EF, 0x10140, 0x10174, + 0x10341, 0x10341, 0x1034A, 0x1034A, 0x103D1, 0x103D5, 0x12400, 0x1246E, + // #21 (3200+71): gc=Other_Number:No + 0x00B2, 0x00B3, 0x00B9, 0x00B9, 0x00BC, 0x00BE, 0x09F4, 0x09F9, + 0x0B72, 0x0B77, 0x0BF0, 0x0BF2, 0x0C78, 0x0C7E, 0x0D58, 0x0D5E, + 0x0D70, 0x0D78, 0x0F2A, 0x0F33, 0x1369, 0x137C, 0x17F0, 0x17F9, + 0x19DA, 0x19DA, 0x2070, 0x2070, 0x2074, 0x2079, 0x2080, 0x2089, + 0x2150, 0x215F, 0x2189, 0x2189, 0x2460, 0x249B, 0x24EA, 0x24FF, + 0x2776, 0x2793, 0x2CFD, 0x2CFD, 0x3192, 0x3195, 0x3220, 0x3229, + 0x3248, 0x324F, 0x3251, 0x325F, 0x3280, 0x3289, 0x32B1, 0x32BF, + 0xA830, 0xA835, 0x10107, 0x10133, 0x10175, 0x10178, 0x1018A, 0x1018B, + 0x102E1, 0x102FB, 0x10320, 0x10323, 0x10858, 0x1085F, 0x10879, 0x1087F, + 0x108A7, 0x108AF, 0x108FB, 0x108FF, 0x10916, 0x1091B, 0x109BC, 0x109BD, + 0x109C0, 0x109CF, 0x109D2, 0x109FF, 0x10A40, 0x10A48, 0x10A7D, 0x10A7E, + 0x10A9D, 0x10A9F, 0x10AEB, 0x10AEF, 0x10B58, 0x10B5F, 0x10B78, 0x10B7F, + 0x10BA9, 0x10BAF, 0x10CFA, 0x10CFF, 0x10E60, 0x10E7E, 0x10F1D, 0x10F26, + 0x10F51, 0x10F54, 0x10FC5, 0x10FCB, 0x11052, 0x11065, 0x111E1, 0x111F4, + 0x1173A, 0x1173B, 0x118EA, 0x118F2, 0x11C5A, 0x11C6C, 0x11FC0, 0x11FD4, + 0x16B5B, 0x16B61, 0x16E80, 0x16E96, 0x1D2E0, 0x1D2F3, 0x1D360, 0x1D378, + 0x1E8C7, 0x1E8CF, 0x1EC71, 0x1ECAB, 0x1ECAD, 0x1ECAF, 0x1ECB1, 0x1ECB4, + 0x1ED01, 0x1ED2D, 0x1ED2F, 0x1ED3D, 0x1F100, 0x1F10C, + // #22 (3271+386): gc=Punctuation:P:punct + // Pc:6 + Pd:19 + Pe:76 + Pf:10 + Pi:11 + Po:185 + Ps:79 + // #23 (3271+6): gc=Connector_Punctuation:Pc + 0x005F, 0x005F, 0x203F, 0x2040, 0x2054, 0x2054, 0xFE33, 0xFE34, + 0xFE4D, 0xFE4F, 0xFF3F, 0xFF3F, + // #24 (3277+19): gc=Dash_Punctuation:Pd + 0x002D, 0x002D, 0x058A, 0x058A, 0x05BE, 0x05BE, 0x1400, 0x1400, + 0x1806, 0x1806, 0x2010, 0x2015, 0x2E17, 0x2E17, 0x2E1A, 0x2E1A, + 0x2E3A, 0x2E3B, 0x2E40, 0x2E40, 0x2E5D, 0x2E5D, 0x301C, 0x301C, + 0x3030, 0x3030, 0x30A0, 0x30A0, 0xFE31, 0xFE32, 0xFE58, 0xFE58, + 0xFE63, 0xFE63, 0xFF0D, 0xFF0D, 0x10EAD, 0x10EAD, + // #25 (3296+76): gc=Close_Punctuation:Pe + 0x0029, 0x0029, 0x005D, 0x005D, 0x007D, 0x007D, 0x0F3B, 0x0F3B, + 0x0F3D, 0x0F3D, 0x169C, 0x169C, 0x2046, 0x2046, 0x207E, 0x207E, + 0x208E, 0x208E, 0x2309, 0x2309, 0x230B, 0x230B, 0x232A, 0x232A, + 0x2769, 0x2769, 0x276B, 0x276B, 0x276D, 0x276D, 0x276F, 0x276F, + 0x2771, 0x2771, 0x2773, 0x2773, 0x2775, 0x2775, 0x27C6, 0x27C6, + 0x27E7, 0x27E7, 0x27E9, 0x27E9, 0x27EB, 0x27EB, 0x27ED, 0x27ED, + 0x27EF, 0x27EF, 0x2984, 0x2984, 0x2986, 0x2986, 0x2988, 0x2988, + 0x298A, 0x298A, 0x298C, 0x298C, 0x298E, 0x298E, 0x2990, 0x2990, + 0x2992, 0x2992, 0x2994, 0x2994, 0x2996, 0x2996, 0x2998, 0x2998, + 0x29D9, 0x29D9, 0x29DB, 0x29DB, 0x29FD, 0x29FD, 0x2E23, 0x2E23, + 0x2E25, 0x2E25, 0x2E27, 0x2E27, 0x2E29, 0x2E29, 0x2E56, 0x2E56, + 0x2E58, 0x2E58, 0x2E5A, 0x2E5A, 0x2E5C, 0x2E5C, 0x3009, 0x3009, + 0x300B, 0x300B, 0x300D, 0x300D, 0x300F, 0x300F, 0x3011, 0x3011, + 0x3015, 0x3015, 0x3017, 0x3017, 0x3019, 0x3019, 0x301B, 0x301B, + 0x301E, 0x301F, 0xFD3E, 0xFD3E, 0xFE18, 0xFE18, 0xFE36, 0xFE36, + 0xFE38, 0xFE38, 0xFE3A, 0xFE3A, 0xFE3C, 0xFE3C, 0xFE3E, 0xFE3E, + 0xFE40, 0xFE40, 0xFE42, 0xFE42, 0xFE44, 0xFE44, 0xFE48, 0xFE48, + 0xFE5A, 0xFE5A, 0xFE5C, 0xFE5C, 0xFE5E, 0xFE5E, 0xFF09, 0xFF09, + 0xFF3D, 0xFF3D, 0xFF5D, 0xFF5D, 0xFF60, 0xFF60, 0xFF63, 0xFF63, + // #26 (3372+10): gc=Final_Punctuation:Pf + 0x00BB, 0x00BB, 0x2019, 0x2019, 0x201D, 0x201D, 0x203A, 0x203A, + 0x2E03, 0x2E03, 0x2E05, 0x2E05, 0x2E0A, 0x2E0A, 0x2E0D, 0x2E0D, + 0x2E1D, 0x2E1D, 0x2E21, 0x2E21, + // #27 (3382+11): gc=Initial_Punctuation:Pi + 0x00AB, 0x00AB, 0x2018, 0x2018, 0x201B, 0x201C, 0x201F, 0x201F, + 0x2039, 0x2039, 0x2E02, 0x2E02, 0x2E04, 0x2E04, 0x2E09, 0x2E09, + 0x2E0C, 0x2E0C, 0x2E1C, 0x2E1C, 0x2E20, 0x2E20, + // #28 (3393+185): gc=Other_Punctuation:Po + 0x0021, 0x0023, 0x0025, 0x0027, 0x002A, 0x002A, 0x002C, 0x002C, + 0x002E, 0x002F, 0x003A, 0x003B, 0x003F, 0x0040, 0x005C, 0x005C, + 0x00A1, 0x00A1, 0x00A7, 0x00A7, 0x00B6, 0x00B7, 0x00BF, 0x00BF, + 0x037E, 0x037E, 0x0387, 0x0387, 0x055A, 0x055F, 0x0589, 0x0589, + 0x05C0, 0x05C0, 0x05C3, 0x05C3, 0x05C6, 0x05C6, 0x05F3, 0x05F4, + 0x0609, 0x060A, 0x060C, 0x060D, 0x061B, 0x061B, 0x061D, 0x061F, + 0x066A, 0x066D, 0x06D4, 0x06D4, 0x0700, 0x070D, 0x07F7, 0x07F9, + 0x0830, 0x083E, 0x085E, 0x085E, 0x0964, 0x0965, 0x0970, 0x0970, + 0x09FD, 0x09FD, 0x0A76, 0x0A76, 0x0AF0, 0x0AF0, 0x0C77, 0x0C77, + 0x0C84, 0x0C84, 0x0DF4, 0x0DF4, 0x0E4F, 0x0E4F, 0x0E5A, 0x0E5B, + 0x0F04, 0x0F12, 0x0F14, 0x0F14, 0x0F85, 0x0F85, 0x0FD0, 0x0FD4, + 0x0FD9, 0x0FDA, 0x104A, 0x104F, 0x10FB, 0x10FB, 0x1360, 0x1368, + 0x166E, 0x166E, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x17D4, 0x17D6, + 0x17D8, 0x17DA, 0x1800, 0x1805, 0x1807, 0x180A, 0x1944, 0x1945, + 0x1A1E, 0x1A1F, 0x1AA0, 0x1AA6, 0x1AA8, 0x1AAD, 0x1B5A, 0x1B60, + 0x1B7D, 0x1B7E, 0x1BFC, 0x1BFF, 0x1C3B, 0x1C3F, 0x1C7E, 0x1C7F, + 0x1CC0, 0x1CC7, 0x1CD3, 0x1CD3, 0x2016, 0x2017, 0x2020, 0x2027, + 0x2030, 0x2038, 0x203B, 0x203E, 0x2041, 0x2043, 0x2047, 0x2051, + 0x2053, 0x2053, 0x2055, 0x205E, 0x2CF9, 0x2CFC, 0x2CFE, 0x2CFF, + 0x2D70, 0x2D70, 0x2E00, 0x2E01, 0x2E06, 0x2E08, 0x2E0B, 0x2E0B, + 0x2E0E, 0x2E16, 0x2E18, 0x2E19, 0x2E1B, 0x2E1B, 0x2E1E, 0x2E1F, + 0x2E2A, 0x2E2E, 0x2E30, 0x2E39, 0x2E3C, 0x2E3F, 0x2E41, 0x2E41, + 0x2E43, 0x2E4F, 0x2E52, 0x2E54, 0x3001, 0x3003, 0x303D, 0x303D, + 0x30FB, 0x30FB, 0xA4FE, 0xA4FF, 0xA60D, 0xA60F, 0xA673, 0xA673, + 0xA67E, 0xA67E, 0xA6F2, 0xA6F7, 0xA874, 0xA877, 0xA8CE, 0xA8CF, + 0xA8F8, 0xA8FA, 0xA8FC, 0xA8FC, 0xA92E, 0xA92F, 0xA95F, 0xA95F, + 0xA9C1, 0xA9CD, 0xA9DE, 0xA9DF, 0xAA5C, 0xAA5F, 0xAADE, 0xAADF, + 0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE10, 0xFE16, 0xFE19, 0xFE19, + 0xFE30, 0xFE30, 0xFE45, 0xFE46, 0xFE49, 0xFE4C, 0xFE50, 0xFE52, + 0xFE54, 0xFE57, 0xFE5F, 0xFE61, 0xFE68, 0xFE68, 0xFE6A, 0xFE6B, + 0xFF01, 0xFF03, 0xFF05, 0xFF07, 0xFF0A, 0xFF0A, 0xFF0C, 0xFF0C, + 0xFF0E, 0xFF0F, 0xFF1A, 0xFF1B, 0xFF1F, 0xFF20, 0xFF3C, 0xFF3C, + 0xFF61, 0xFF61, 0xFF64, 0xFF65, 0x10100, 0x10102, 0x1039F, 0x1039F, + 0x103D0, 0x103D0, 0x1056F, 0x1056F, 0x10857, 0x10857, 0x1091F, 0x1091F, + 0x1093F, 0x1093F, 0x10A50, 0x10A58, 0x10A7F, 0x10A7F, 0x10AF0, 0x10AF6, + 0x10B39, 0x10B3F, 0x10B99, 0x10B9C, 0x10F55, 0x10F59, 0x10F86, 0x10F89, + 0x11047, 0x1104D, 0x110BB, 0x110BC, 0x110BE, 0x110C1, 0x11140, 0x11143, + 0x11174, 0x11175, 0x111C5, 0x111C8, 0x111CD, 0x111CD, 0x111DB, 0x111DB, + 0x111DD, 0x111DF, 0x11238, 0x1123D, 0x112A9, 0x112A9, 0x1144B, 0x1144F, + 0x1145A, 0x1145B, 0x1145D, 0x1145D, 0x114C6, 0x114C6, 0x115C1, 0x115D7, + 0x11641, 0x11643, 0x11660, 0x1166C, 0x116B9, 0x116B9, 0x1173C, 0x1173E, + 0x1183B, 0x1183B, 0x11944, 0x11946, 0x119E2, 0x119E2, 0x11A3F, 0x11A46, + 0x11A9A, 0x11A9C, 0x11A9E, 0x11AA2, 0x11C41, 0x11C45, 0x11C70, 0x11C71, + 0x11EF7, 0x11EF8, 0x11FFF, 0x11FFF, 0x12470, 0x12474, 0x12FF1, 0x12FF2, + 0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5, 0x16B37, 0x16B3B, 0x16B44, 0x16B44, + 0x16E97, 0x16E9A, 0x16FE2, 0x16FE2, 0x1BC9F, 0x1BC9F, 0x1DA87, 0x1DA8B, + 0x1E95E, 0x1E95F, + // #29 (3578+79): gc=Open_Punctuation:Ps + 0x0028, 0x0028, 0x005B, 0x005B, 0x007B, 0x007B, 0x0F3A, 0x0F3A, + 0x0F3C, 0x0F3C, 0x169B, 0x169B, 0x201A, 0x201A, 0x201E, 0x201E, + 0x2045, 0x2045, 0x207D, 0x207D, 0x208D, 0x208D, 0x2308, 0x2308, + 0x230A, 0x230A, 0x2329, 0x2329, 0x2768, 0x2768, 0x276A, 0x276A, + 0x276C, 0x276C, 0x276E, 0x276E, 0x2770, 0x2770, 0x2772, 0x2772, + 0x2774, 0x2774, 0x27C5, 0x27C5, 0x27E6, 0x27E6, 0x27E8, 0x27E8, + 0x27EA, 0x27EA, 0x27EC, 0x27EC, 0x27EE, 0x27EE, 0x2983, 0x2983, + 0x2985, 0x2985, 0x2987, 0x2987, 0x2989, 0x2989, 0x298B, 0x298B, + 0x298D, 0x298D, 0x298F, 0x298F, 0x2991, 0x2991, 0x2993, 0x2993, + 0x2995, 0x2995, 0x2997, 0x2997, 0x29D8, 0x29D8, 0x29DA, 0x29DA, + 0x29FC, 0x29FC, 0x2E22, 0x2E22, 0x2E24, 0x2E24, 0x2E26, 0x2E26, + 0x2E28, 0x2E28, 0x2E42, 0x2E42, 0x2E55, 0x2E55, 0x2E57, 0x2E57, + 0x2E59, 0x2E59, 0x2E5B, 0x2E5B, 0x3008, 0x3008, 0x300A, 0x300A, + 0x300C, 0x300C, 0x300E, 0x300E, 0x3010, 0x3010, 0x3014, 0x3014, + 0x3016, 0x3016, 0x3018, 0x3018, 0x301A, 0x301A, 0x301D, 0x301D, + 0xFD3F, 0xFD3F, 0xFE17, 0xFE17, 0xFE35, 0xFE35, 0xFE37, 0xFE37, + 0xFE39, 0xFE39, 0xFE3B, 0xFE3B, 0xFE3D, 0xFE3D, 0xFE3F, 0xFE3F, + 0xFE41, 0xFE41, 0xFE43, 0xFE43, 0xFE47, 0xFE47, 0xFE59, 0xFE59, + 0xFE5B, 0xFE5B, 0xFE5D, 0xFE5D, 0xFF08, 0xFF08, 0xFF3B, 0xFF3B, + 0xFF5B, 0xFF5B, 0xFF5F, 0xFF5F, 0xFF62, 0xFF62, + // #30 (3657+302): gc=Symbol:S + // Sc:21 + Sk:31 + Sm:64 + So:186 + // #31 (3657+21): gc=Currency_Symbol:Sc + 0x0024, 0x0024, 0x00A2, 0x00A5, 0x058F, 0x058F, 0x060B, 0x060B, + 0x07FE, 0x07FF, 0x09F2, 0x09F3, 0x09FB, 0x09FB, 0x0AF1, 0x0AF1, + 0x0BF9, 0x0BF9, 0x0E3F, 0x0E3F, 0x17DB, 0x17DB, 0x20A0, 0x20C0, + 0xA838, 0xA838, 0xFDFC, 0xFDFC, 0xFE69, 0xFE69, 0xFF04, 0xFF04, + 0xFFE0, 0xFFE1, 0xFFE5, 0xFFE6, 0x11FDD, 0x11FE0, 0x1E2FF, 0x1E2FF, + 0x1ECB0, 0x1ECB0, + // #32 (3678+31): gc=Modifier_Symbol:Sk + 0x005E, 0x005E, 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AF, 0x00AF, + 0x00B4, 0x00B4, 0x00B8, 0x00B8, 0x02C2, 0x02C5, 0x02D2, 0x02DF, + 0x02E5, 0x02EB, 0x02ED, 0x02ED, 0x02EF, 0x02FF, 0x0375, 0x0375, + 0x0384, 0x0385, 0x0888, 0x0888, 0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1, + 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF, 0x1FED, 0x1FEF, 0x1FFD, 0x1FFE, + 0x309B, 0x309C, 0xA700, 0xA716, 0xA720, 0xA721, 0xA789, 0xA78A, + 0xAB5B, 0xAB5B, 0xAB6A, 0xAB6B, 0xFBB2, 0xFBC2, 0xFF3E, 0xFF3E, + 0xFF40, 0xFF40, 0xFFE3, 0xFFE3, 0x1F3FB, 0x1F3FF, + // #33 (3709+64): gc=Math_Symbol:Sm + 0x002B, 0x002B, 0x003C, 0x003E, 0x007C, 0x007C, 0x007E, 0x007E, + 0x00AC, 0x00AC, 0x00B1, 0x00B1, 0x00D7, 0x00D7, 0x00F7, 0x00F7, + 0x03F6, 0x03F6, 0x0606, 0x0608, 0x2044, 0x2044, 0x2052, 0x2052, + 0x207A, 0x207C, 0x208A, 0x208C, 0x2118, 0x2118, 0x2140, 0x2144, + 0x214B, 0x214B, 0x2190, 0x2194, 0x219A, 0x219B, 0x21A0, 0x21A0, + 0x21A3, 0x21A3, 0x21A6, 0x21A6, 0x21AE, 0x21AE, 0x21CE, 0x21CF, + 0x21D2, 0x21D2, 0x21D4, 0x21D4, 0x21F4, 0x22FF, 0x2320, 0x2321, + 0x237C, 0x237C, 0x239B, 0x23B3, 0x23DC, 0x23E1, 0x25B7, 0x25B7, + 0x25C1, 0x25C1, 0x25F8, 0x25FF, 0x266F, 0x266F, 0x27C0, 0x27C4, + 0x27C7, 0x27E5, 0x27F0, 0x27FF, 0x2900, 0x2982, 0x2999, 0x29D7, + 0x29DC, 0x29FB, 0x29FE, 0x2AFF, 0x2B30, 0x2B44, 0x2B47, 0x2B4C, + 0xFB29, 0xFB29, 0xFE62, 0xFE62, 0xFE64, 0xFE66, 0xFF0B, 0xFF0B, + 0xFF1C, 0xFF1E, 0xFF5C, 0xFF5C, 0xFF5E, 0xFF5E, 0xFFE2, 0xFFE2, + 0xFFE9, 0xFFEC, 0x1D6C1, 0x1D6C1, 0x1D6DB, 0x1D6DB, 0x1D6FB, 0x1D6FB, + 0x1D715, 0x1D715, 0x1D735, 0x1D735, 0x1D74F, 0x1D74F, 0x1D76F, 0x1D76F, + 0x1D789, 0x1D789, 0x1D7A9, 0x1D7A9, 0x1D7C3, 0x1D7C3, 0x1EEF0, 0x1EEF1, + // #34 (3773+186): gc=Other_Symbol:So + 0x00A6, 0x00A6, 0x00A9, 0x00A9, 0x00AE, 0x00AE, 0x00B0, 0x00B0, + 0x0482, 0x0482, 0x058D, 0x058E, 0x060E, 0x060F, 0x06DE, 0x06DE, + 0x06E9, 0x06E9, 0x06FD, 0x06FE, 0x07F6, 0x07F6, 0x09FA, 0x09FA, + 0x0B70, 0x0B70, 0x0BF3, 0x0BF8, 0x0BFA, 0x0BFA, 0x0C7F, 0x0C7F, + 0x0D4F, 0x0D4F, 0x0D79, 0x0D79, 0x0F01, 0x0F03, 0x0F13, 0x0F13, + 0x0F15, 0x0F17, 0x0F1A, 0x0F1F, 0x0F34, 0x0F34, 0x0F36, 0x0F36, + 0x0F38, 0x0F38, 0x0FBE, 0x0FC5, 0x0FC7, 0x0FCC, 0x0FCE, 0x0FCF, + 0x0FD5, 0x0FD8, 0x109E, 0x109F, 0x1390, 0x1399, 0x166D, 0x166D, + 0x1940, 0x1940, 0x19DE, 0x19FF, 0x1B61, 0x1B6A, 0x1B74, 0x1B7C, + 0x2100, 0x2101, 0x2103, 0x2106, 0x2108, 0x2109, 0x2114, 0x2114, + 0x2116, 0x2117, 0x211E, 0x2123, 0x2125, 0x2125, 0x2127, 0x2127, + 0x2129, 0x2129, 0x212E, 0x212E, 0x213A, 0x213B, 0x214A, 0x214A, + 0x214C, 0x214D, 0x214F, 0x214F, 0x218A, 0x218B, 0x2195, 0x2199, + 0x219C, 0x219F, 0x21A1, 0x21A2, 0x21A4, 0x21A5, 0x21A7, 0x21AD, + 0x21AF, 0x21CD, 0x21D0, 0x21D1, 0x21D3, 0x21D3, 0x21D5, 0x21F3, + 0x2300, 0x2307, 0x230C, 0x231F, 0x2322, 0x2328, 0x232B, 0x237B, + 0x237D, 0x239A, 0x23B4, 0x23DB, 0x23E2, 0x2426, 0x2440, 0x244A, + 0x249C, 0x24E9, 0x2500, 0x25B6, 0x25B8, 0x25C0, 0x25C2, 0x25F7, + 0x2600, 0x266E, 0x2670, 0x2767, 0x2794, 0x27BF, 0x2800, 0x28FF, + 0x2B00, 0x2B2F, 0x2B45, 0x2B46, 0x2B4D, 0x2B73, 0x2B76, 0x2B95, + 0x2B97, 0x2BFF, 0x2CE5, 0x2CEA, 0x2E50, 0x2E51, 0x2E80, 0x2E99, + 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x2FF0, 0x2FFB, 0x3004, 0x3004, + 0x3012, 0x3013, 0x3020, 0x3020, 0x3036, 0x3037, 0x303E, 0x303F, + 0x3190, 0x3191, 0x3196, 0x319F, 0x31C0, 0x31E3, 0x3200, 0x321E, + 0x322A, 0x3247, 0x3250, 0x3250, 0x3260, 0x327F, 0x328A, 0x32B0, + 0x32C0, 0x33FF, 0x4DC0, 0x4DFF, 0xA490, 0xA4C6, 0xA828, 0xA82B, + 0xA836, 0xA837, 0xA839, 0xA839, 0xAA77, 0xAA79, 0xFD40, 0xFD4F, + 0xFDCF, 0xFDCF, 0xFDFD, 0xFDFF, 0xFFE4, 0xFFE4, 0xFFE8, 0xFFE8, + 0xFFED, 0xFFEE, 0xFFFC, 0xFFFD, 0x10137, 0x1013F, 0x10179, 0x10189, + 0x1018C, 0x1018E, 0x10190, 0x1019C, 0x101A0, 0x101A0, 0x101D0, 0x101FC, + 0x10877, 0x10878, 0x10AC8, 0x10AC8, 0x1173F, 0x1173F, 0x11FD5, 0x11FDC, + 0x11FE1, 0x11FF1, 0x16B3C, 0x16B3F, 0x16B45, 0x16B45, 0x1BC9C, 0x1BC9C, + 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, 0x1D100, 0x1D126, 0x1D129, 0x1D164, + 0x1D16A, 0x1D16C, 0x1D183, 0x1D184, 0x1D18C, 0x1D1A9, 0x1D1AE, 0x1D1EA, + 0x1D200, 0x1D241, 0x1D245, 0x1D245, 0x1D300, 0x1D356, 0x1D800, 0x1D9FF, + 0x1DA37, 0x1DA3A, 0x1DA6D, 0x1DA74, 0x1DA76, 0x1DA83, 0x1DA85, 0x1DA86, + 0x1E14F, 0x1E14F, 0x1ECAC, 0x1ECAC, 0x1ED2E, 0x1ED2E, 0x1F000, 0x1F02B, + 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF, 0x1F0C1, 0x1F0CF, + 0x1F0D1, 0x1F0F5, 0x1F10D, 0x1F1AD, 0x1F1E6, 0x1F202, 0x1F210, 0x1F23B, + 0x1F240, 0x1F248, 0x1F250, 0x1F251, 0x1F260, 0x1F265, 0x1F300, 0x1F3FA, + 0x1F400, 0x1F6D7, 0x1F6DD, 0x1F6EC, 0x1F6F0, 0x1F6FC, 0x1F700, 0x1F773, + 0x1F780, 0x1F7D8, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, 0x1F800, 0x1F80B, + 0x1F810, 0x1F847, 0x1F850, 0x1F859, 0x1F860, 0x1F887, 0x1F890, 0x1F8AD, + 0x1F8B0, 0x1F8B1, 0x1F900, 0x1FA53, 0x1FA60, 0x1FA6D, 0x1FA70, 0x1FA74, + 0x1FA78, 0x1FA7C, 0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC, 0x1FAB0, 0x1FABA, + 0x1FAC0, 0x1FAC5, 0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7, 0x1FAF0, 0x1FAF6, + 0x1FB00, 0x1FB92, 0x1FB94, 0x1FBCA, + // #35 (3959+9): gc=Separator:Z + // Zl:1 + Zp:1 + Zs:7 + // #36 (3959+1): gc=Line_Separator:Zl + 0x2028, 0x2028, + // #37 (3960+1): gc=Paragraph_Separator:Zp + 0x2029, 0x2029, + // #38 (3961+7): gc=Space_Separator:Zs + 0x0020, 0x0020, 0x00A0, 0x00A0, 0x1680, 0x1680, 0x2000, 0x200A, + 0x202F, 0x202F, 0x205F, 0x205F, 0x3000, 0x3000, + // #39 (3968+1): bp=ASCII + 0x0000, 0x007F, + // #40 (3969+3): bp=ASCII_Hex_Digit:AHex + 0x0030, 0x0039, 0x0041, 0x0046, 0x0061, 0x0066, + // #41 (3972+722): bp=Alphabetic:Alpha + 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5, + 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, + 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, + 0x0345, 0x0345, 0x0370, 0x0374, 0x0376, 0x0377, 0x037A, 0x037D, + 0x037F, 0x037F, 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, + 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F, + 0x0531, 0x0556, 0x0559, 0x0559, 0x0560, 0x0588, 0x05B0, 0x05BD, + 0x05BF, 0x05BF, 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, + 0x05D0, 0x05EA, 0x05EF, 0x05F2, 0x0610, 0x061A, 0x0620, 0x0657, + 0x0659, 0x065F, 0x066E, 0x06D3, 0x06D5, 0x06DC, 0x06E1, 0x06E8, + 0x06ED, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x073F, + 0x074D, 0x07B1, 0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA, + 0x0800, 0x0817, 0x081A, 0x082C, 0x0840, 0x0858, 0x0860, 0x086A, + 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9, 0x08D4, 0x08DF, + 0x08E3, 0x08E9, 0x08F0, 0x093B, 0x093D, 0x094C, 0x094E, 0x0950, + 0x0955, 0x0963, 0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, + 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, + 0x09BD, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CC, 0x09CE, 0x09CE, + 0x09D7, 0x09D7, 0x09DC, 0x09DD, 0x09DF, 0x09E3, 0x09F0, 0x09F1, + 0x09FC, 0x09FC, 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, + 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, + 0x0A38, 0x0A39, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4C, + 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A70, 0x0A75, + 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, + 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC5, + 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACC, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3, + 0x0AF9, 0x0AFC, 0x0B01, 0x0B03, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, + 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, + 0x0B3D, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4C, 0x0B56, 0x0B57, + 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B71, 0x0B71, 0x0B82, 0x0B83, + 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, + 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, + 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC, + 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, 0x0C00, 0x0C03, 0x0C05, 0x0C0C, + 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C44, + 0x0C46, 0x0C48, 0x0C4A, 0x0C4C, 0x0C55, 0x0C56, 0x0C58, 0x0C5A, + 0x0C5D, 0x0C5D, 0x0C60, 0x0C63, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, + 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, + 0x0CBD, 0x0CC4, 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCC, 0x0CD5, 0x0CD6, + 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE3, 0x0CF1, 0x0CF2, 0x0D00, 0x0D0C, + 0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D44, 0x0D46, 0x0D48, + 0x0D4A, 0x0D4C, 0x0D4E, 0x0D4E, 0x0D54, 0x0D57, 0x0D5F, 0x0D63, + 0x0D7A, 0x0D7F, 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, + 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCF, 0x0DD4, + 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DF2, 0x0DF3, 0x0E01, 0x0E3A, + 0x0E40, 0x0E46, 0x0E4D, 0x0E4D, 0x0E81, 0x0E82, 0x0E84, 0x0E84, + 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB9, + 0x0EBB, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0ECD, 0x0ECD, + 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F40, 0x0F47, 0x0F49, 0x0F6C, + 0x0F71, 0x0F81, 0x0F88, 0x0F97, 0x0F99, 0x0FBC, 0x1000, 0x1036, + 0x1038, 0x1038, 0x103B, 0x103F, 0x1050, 0x108F, 0x109A, 0x109D, + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, + 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, + 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, + 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5, + 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A, + 0x1380, 0x138F, 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1401, 0x166C, + 0x166F, 0x167F, 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16EE, 0x16F8, + 0x1700, 0x1713, 0x171F, 0x1733, 0x1740, 0x1753, 0x1760, 0x176C, + 0x176E, 0x1770, 0x1772, 0x1773, 0x1780, 0x17B3, 0x17B6, 0x17C8, + 0x17D7, 0x17D7, 0x17DC, 0x17DC, 0x1820, 0x1878, 0x1880, 0x18AA, + 0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x1938, + 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9, + 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A61, 0x1A74, 0x1AA7, 0x1AA7, + 0x1ABF, 0x1AC0, 0x1ACC, 0x1ACE, 0x1B00, 0x1B33, 0x1B35, 0x1B43, + 0x1B45, 0x1B4C, 0x1B80, 0x1BA9, 0x1BAC, 0x1BAF, 0x1BBA, 0x1BE5, + 0x1BE7, 0x1BF1, 0x1C00, 0x1C36, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C7D, + 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC, + 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF, + 0x1DE7, 0x1DF4, 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, + 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, + 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, + 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, + 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, + 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C, 0x2102, 0x2102, + 0x2107, 0x2107, 0x210A, 0x2113, 0x2115, 0x2115, 0x2119, 0x211D, + 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D, + 0x212F, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149, 0x214E, 0x214E, + 0x2160, 0x2188, 0x24B6, 0x24E9, 0x2C00, 0x2CE4, 0x2CEB, 0x2CEE, + 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, + 0x2D30, 0x2D67, 0x2D6F, 0x2D6F, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6, + 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, + 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, + 0x2E2F, 0x2E2F, 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, + 0x3038, 0x303C, 0x3041, 0x3096, 0x309D, 0x309F, 0x30A1, 0x30FA, + 0x30FC, 0x30FF, 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, + 0x31F0, 0x31FF, 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, + 0xA500, 0xA60C, 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, + 0xA674, 0xA67B, 0xA67F, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, + 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, + 0xA7F2, 0xA805, 0xA807, 0xA827, 0xA840, 0xA873, 0xA880, 0xA8C3, + 0xA8C5, 0xA8C5, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FF, + 0xA90A, 0xA92A, 0xA930, 0xA952, 0xA960, 0xA97C, 0xA980, 0xA9B2, + 0xA9B4, 0xA9BF, 0xA9CF, 0xA9CF, 0xA9E0, 0xA9EF, 0xA9FA, 0xA9FE, + 0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA60, 0xAA76, 0xAA7A, 0xAABE, + 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD, 0xAAE0, 0xAAEF, + 0xAAF2, 0xAAF5, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16, + 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, 0xAB5C, 0xAB69, + 0xAB70, 0xABEA, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, + 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, + 0xFB1D, 0xFB28, 0xFB2A, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, + 0xFB40, 0xFB41, 0xFB43, 0xFB44, 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, + 0xFD50, 0xFD8F, 0xFD92, 0xFDC7, 0xFDF0, 0xFDFB, 0xFE70, 0xFE74, + 0xFE76, 0xFEFC, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0xFF66, 0xFFBE, + 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, + 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D, + 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10140, 0x10174, + 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x10300, 0x1031F, 0x1032D, 0x1034A, + 0x10350, 0x1037A, 0x10380, 0x1039D, 0x103A0, 0x103C3, 0x103C8, 0x103CF, + 0x103D1, 0x103D5, 0x10400, 0x1049D, 0x104B0, 0x104D3, 0x104D8, 0x104FB, + 0x10500, 0x10527, 0x10530, 0x10563, 0x10570, 0x1057A, 0x1057C, 0x1058A, + 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1, + 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10600, 0x10736, 0x10740, 0x10755, + 0x10760, 0x10767, 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, + 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, + 0x1083C, 0x1083C, 0x1083F, 0x10855, 0x10860, 0x10876, 0x10880, 0x1089E, + 0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x10900, 0x10915, 0x10920, 0x10939, + 0x10980, 0x109B7, 0x109BE, 0x109BF, 0x10A00, 0x10A03, 0x10A05, 0x10A06, + 0x10A0C, 0x10A13, 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A60, 0x10A7C, + 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4, 0x10B00, 0x10B35, + 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48, + 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D27, 0x10E80, 0x10EA9, + 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27, + 0x10F30, 0x10F45, 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, + 0x11000, 0x11045, 0x11071, 0x11075, 0x11082, 0x110B8, 0x110C2, 0x110C2, + 0x110D0, 0x110E8, 0x11100, 0x11132, 0x11144, 0x11147, 0x11150, 0x11172, + 0x11176, 0x11176, 0x11180, 0x111BF, 0x111C1, 0x111C4, 0x111CE, 0x111CF, + 0x111DA, 0x111DA, 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x11234, + 0x11237, 0x11237, 0x1123E, 0x1123E, 0x11280, 0x11286, 0x11288, 0x11288, + 0x1128A, 0x1128D, 0x1128F, 0x1129D, 0x1129F, 0x112A8, 0x112B0, 0x112E8, + 0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, + 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133D, 0x11344, + 0x11347, 0x11348, 0x1134B, 0x1134C, 0x11350, 0x11350, 0x11357, 0x11357, + 0x1135D, 0x11363, 0x11400, 0x11441, 0x11443, 0x11445, 0x11447, 0x1144A, + 0x1145F, 0x11461, 0x11480, 0x114C1, 0x114C4, 0x114C5, 0x114C7, 0x114C7, + 0x11580, 0x115B5, 0x115B8, 0x115BE, 0x115D8, 0x115DD, 0x11600, 0x1163E, + 0x11640, 0x11640, 0x11644, 0x11644, 0x11680, 0x116B5, 0x116B8, 0x116B8, + 0x11700, 0x1171A, 0x1171D, 0x1172A, 0x11740, 0x11746, 0x11800, 0x11838, + 0x118A0, 0x118DF, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, + 0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x1193C, + 0x1193F, 0x11942, 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119DF, + 0x119E1, 0x119E1, 0x119E3, 0x119E4, 0x11A00, 0x11A32, 0x11A35, 0x11A3E, + 0x11A50, 0x11A97, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, + 0x11C0A, 0x11C36, 0x11C38, 0x11C3E, 0x11C40, 0x11C40, 0x11C72, 0x11C8F, + 0x11C92, 0x11CA7, 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09, + 0x11D0B, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D41, + 0x11D43, 0x11D43, 0x11D46, 0x11D47, 0x11D60, 0x11D65, 0x11D67, 0x11D68, + 0x11D6A, 0x11D8E, 0x11D90, 0x11D91, 0x11D93, 0x11D96, 0x11D98, 0x11D98, + 0x11EE0, 0x11EF6, 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12400, 0x1246E, + 0x12480, 0x12543, 0x12F90, 0x12FF0, 0x13000, 0x1342E, 0x14400, 0x14646, + 0x16800, 0x16A38, 0x16A40, 0x16A5E, 0x16A70, 0x16ABE, 0x16AD0, 0x16AED, + 0x16B00, 0x16B2F, 0x16B40, 0x16B43, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, + 0x16E40, 0x16E7F, 0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, + 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, 0x16FF0, 0x16FF1, 0x17000, 0x187F7, + 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, + 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, 0x1B150, 0x1B152, 0x1B164, 0x1B167, + 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, + 0x1BC90, 0x1BC99, 0x1BC9E, 0x1BC9E, 0x1D400, 0x1D454, 0x1D456, 0x1D49C, + 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, + 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, + 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, + 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, + 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6FA, + 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, 0x1D736, 0x1D74E, 0x1D750, 0x1D76E, + 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7CB, + 0x1DF00, 0x1DF1E, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, + 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E100, 0x1E12C, 0x1E137, 0x1E13D, + 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, 0x1E7E0, 0x1E7E6, + 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, + 0x1E900, 0x1E943, 0x1E947, 0x1E947, 0x1E94B, 0x1E94B, 0x1EE00, 0x1EE03, + 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, + 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, + 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, + 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, + 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, + 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, + 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, + 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, + 0x1F130, 0x1F149, 0x1F150, 0x1F169, 0x1F170, 0x1F189, 0x20000, 0x2A6DF, + 0x2A700, 0x2B738, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, + 0x2F800, 0x2FA1D, 0x30000, 0x3134A, + // #42 (4694+1): bp=Any + 0x0000, 0x10FFFF, + // #43 (4695+0): bp=Assigned + + // #44 (4695+4): bp=Bidi_Control:Bidi_C + 0x061C, 0x061C, 0x200E, 0x200F, 0x202A, 0x202E, 0x2066, 0x2069, + // #45 (4699+114): bp=Bidi_Mirrored:Bidi_M + 0x0028, 0x0029, 0x003C, 0x003C, 0x003E, 0x003E, 0x005B, 0x005B, + 0x005D, 0x005D, 0x007B, 0x007B, 0x007D, 0x007D, 0x00AB, 0x00AB, + 0x00BB, 0x00BB, 0x0F3A, 0x0F3D, 0x169B, 0x169C, 0x2039, 0x203A, + 0x2045, 0x2046, 0x207D, 0x207E, 0x208D, 0x208E, 0x2140, 0x2140, + 0x2201, 0x2204, 0x2208, 0x220D, 0x2211, 0x2211, 0x2215, 0x2216, + 0x221A, 0x221D, 0x221F, 0x2222, 0x2224, 0x2224, 0x2226, 0x2226, + 0x222B, 0x2233, 0x2239, 0x2239, 0x223B, 0x224C, 0x2252, 0x2255, + 0x225F, 0x2260, 0x2262, 0x2262, 0x2264, 0x226B, 0x226E, 0x228C, + 0x228F, 0x2292, 0x2298, 0x2298, 0x22A2, 0x22A3, 0x22A6, 0x22B8, + 0x22BE, 0x22BF, 0x22C9, 0x22CD, 0x22D0, 0x22D1, 0x22D6, 0x22ED, + 0x22F0, 0x22FF, 0x2308, 0x230B, 0x2320, 0x2321, 0x2329, 0x232A, + 0x2768, 0x2775, 0x27C0, 0x27C0, 0x27C3, 0x27C6, 0x27C8, 0x27C9, + 0x27CB, 0x27CD, 0x27D3, 0x27D6, 0x27DC, 0x27DE, 0x27E2, 0x27EF, + 0x2983, 0x2998, 0x299B, 0x29A0, 0x29A2, 0x29AF, 0x29B8, 0x29B8, + 0x29C0, 0x29C5, 0x29C9, 0x29C9, 0x29CE, 0x29D2, 0x29D4, 0x29D5, + 0x29D8, 0x29DC, 0x29E1, 0x29E1, 0x29E3, 0x29E5, 0x29E8, 0x29E9, + 0x29F4, 0x29F9, 0x29FC, 0x29FD, 0x2A0A, 0x2A1C, 0x2A1E, 0x2A21, + 0x2A24, 0x2A24, 0x2A26, 0x2A26, 0x2A29, 0x2A29, 0x2A2B, 0x2A2E, + 0x2A34, 0x2A35, 0x2A3C, 0x2A3E, 0x2A57, 0x2A58, 0x2A64, 0x2A65, + 0x2A6A, 0x2A6D, 0x2A6F, 0x2A70, 0x2A73, 0x2A74, 0x2A79, 0x2AA3, + 0x2AA6, 0x2AAD, 0x2AAF, 0x2AD6, 0x2ADC, 0x2ADC, 0x2ADE, 0x2ADE, + 0x2AE2, 0x2AE6, 0x2AEC, 0x2AEE, 0x2AF3, 0x2AF3, 0x2AF7, 0x2AFB, + 0x2AFD, 0x2AFD, 0x2BFE, 0x2BFE, 0x2E02, 0x2E05, 0x2E09, 0x2E0A, + 0x2E0C, 0x2E0D, 0x2E1C, 0x2E1D, 0x2E20, 0x2E29, 0x2E55, 0x2E5C, + 0x3008, 0x3011, 0x3014, 0x301B, 0xFE59, 0xFE5E, 0xFE64, 0xFE65, + 0xFF08, 0xFF09, 0xFF1C, 0xFF1C, 0xFF1E, 0xFF1E, 0xFF3B, 0xFF3B, + 0xFF3D, 0xFF3D, 0xFF5B, 0xFF5B, 0xFF5D, 0xFF5D, 0xFF5F, 0xFF60, + 0xFF62, 0xFF63, 0x1D6DB, 0x1D6DB, 0x1D715, 0x1D715, 0x1D74F, 0x1D74F, + 0x1D789, 0x1D789, 0x1D7C3, 0x1D7C3, + // #46 (4813+427): bp=Case_Ignorable:CI + 0x0027, 0x0027, 0x002E, 0x002E, 0x003A, 0x003A, 0x005E, 0x005E, + 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AD, 0x00AD, 0x00AF, 0x00AF, + 0x00B4, 0x00B4, 0x00B7, 0x00B8, 0x02B0, 0x036F, 0x0374, 0x0375, + 0x037A, 0x037A, 0x0384, 0x0385, 0x0387, 0x0387, 0x0483, 0x0489, + 0x0559, 0x0559, 0x055F, 0x055F, 0x0591, 0x05BD, 0x05BF, 0x05BF, + 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05F4, 0x05F4, + 0x0600, 0x0605, 0x0610, 0x061A, 0x061C, 0x061C, 0x0640, 0x0640, + 0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DD, 0x06DF, 0x06E8, + 0x06EA, 0x06ED, 0x070F, 0x070F, 0x0711, 0x0711, 0x0730, 0x074A, + 0x07A6, 0x07B0, 0x07EB, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD, + 0x0816, 0x082D, 0x0859, 0x085B, 0x0888, 0x0888, 0x0890, 0x0891, + 0x0898, 0x089F, 0x08C9, 0x0902, 0x093A, 0x093A, 0x093C, 0x093C, + 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957, 0x0962, 0x0963, + 0x0971, 0x0971, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09C1, 0x09C4, + 0x09CD, 0x09CD, 0x09E2, 0x09E3, 0x09FE, 0x09FE, 0x0A01, 0x0A02, + 0x0A3C, 0x0A3C, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, + 0x0A51, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A75, 0x0A81, 0x0A82, + 0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5, 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD, + 0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF, 0x0B01, 0x0B01, 0x0B3C, 0x0B3C, + 0x0B3F, 0x0B3F, 0x0B41, 0x0B44, 0x0B4D, 0x0B4D, 0x0B55, 0x0B56, + 0x0B62, 0x0B63, 0x0B82, 0x0B82, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD, + 0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40, + 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63, + 0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC6, 0x0CC6, + 0x0CCC, 0x0CCD, 0x0CE2, 0x0CE3, 0x0D00, 0x0D01, 0x0D3B, 0x0D3C, + 0x0D41, 0x0D44, 0x0D4D, 0x0D4D, 0x0D62, 0x0D63, 0x0D81, 0x0D81, + 0x0DCA, 0x0DCA, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6, 0x0E31, 0x0E31, + 0x0E34, 0x0E3A, 0x0E46, 0x0E4E, 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC, + 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECD, 0x0F18, 0x0F19, 0x0F35, 0x0F35, + 0x0F37, 0x0F37, 0x0F39, 0x0F39, 0x0F71, 0x0F7E, 0x0F80, 0x0F84, + 0x0F86, 0x0F87, 0x0F8D, 0x0F97, 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, + 0x102D, 0x1030, 0x1032, 0x1037, 0x1039, 0x103A, 0x103D, 0x103E, + 0x1058, 0x1059, 0x105E, 0x1060, 0x1071, 0x1074, 0x1082, 0x1082, + 0x1085, 0x1086, 0x108D, 0x108D, 0x109D, 0x109D, 0x10FC, 0x10FC, + 0x135D, 0x135F, 0x1712, 0x1714, 0x1732, 0x1733, 0x1752, 0x1753, + 0x1772, 0x1773, 0x17B4, 0x17B5, 0x17B7, 0x17BD, 0x17C6, 0x17C6, + 0x17C9, 0x17D3, 0x17D7, 0x17D7, 0x17DD, 0x17DD, 0x180B, 0x180F, + 0x1843, 0x1843, 0x1885, 0x1886, 0x18A9, 0x18A9, 0x1920, 0x1922, + 0x1927, 0x1928, 0x1932, 0x1932, 0x1939, 0x193B, 0x1A17, 0x1A18, + 0x1A1B, 0x1A1B, 0x1A56, 0x1A56, 0x1A58, 0x1A5E, 0x1A60, 0x1A60, + 0x1A62, 0x1A62, 0x1A65, 0x1A6C, 0x1A73, 0x1A7C, 0x1A7F, 0x1A7F, + 0x1AA7, 0x1AA7, 0x1AB0, 0x1ACE, 0x1B00, 0x1B03, 0x1B34, 0x1B34, + 0x1B36, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42, 0x1B6B, 0x1B73, + 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9, 0x1BAB, 0x1BAD, + 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED, 0x1BEF, 0x1BF1, + 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1C78, 0x1C7D, 0x1CD0, 0x1CD2, + 0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, + 0x1CF8, 0x1CF9, 0x1D2C, 0x1D6A, 0x1D78, 0x1D78, 0x1D9B, 0x1DFF, + 0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1, 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF, + 0x1FED, 0x1FEF, 0x1FFD, 0x1FFE, 0x200B, 0x200F, 0x2018, 0x2019, + 0x2024, 0x2024, 0x2027, 0x2027, 0x202A, 0x202E, 0x2060, 0x2064, + 0x2066, 0x206F, 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C, + 0x20D0, 0x20F0, 0x2C7C, 0x2C7D, 0x2CEF, 0x2CF1, 0x2D6F, 0x2D6F, + 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x2E2F, 0x2E2F, 0x3005, 0x3005, + 0x302A, 0x302D, 0x3031, 0x3035, 0x303B, 0x303B, 0x3099, 0x309E, + 0x30FC, 0x30FE, 0xA015, 0xA015, 0xA4F8, 0xA4FD, 0xA60C, 0xA60C, + 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA67F, 0xA67F, 0xA69C, 0xA69F, + 0xA6F0, 0xA6F1, 0xA700, 0xA721, 0xA770, 0xA770, 0xA788, 0xA78A, + 0xA7F2, 0xA7F4, 0xA7F8, 0xA7F9, 0xA802, 0xA802, 0xA806, 0xA806, + 0xA80B, 0xA80B, 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5, + 0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA951, + 0xA980, 0xA982, 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD, + 0xA9CF, 0xA9CF, 0xA9E5, 0xA9E6, 0xAA29, 0xAA2E, 0xAA31, 0xAA32, + 0xAA35, 0xAA36, 0xAA43, 0xAA43, 0xAA4C, 0xAA4C, 0xAA70, 0xAA70, + 0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0, 0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8, + 0xAABE, 0xAABF, 0xAAC1, 0xAAC1, 0xAADD, 0xAADD, 0xAAEC, 0xAAED, + 0xAAF3, 0xAAF4, 0xAAF6, 0xAAF6, 0xAB5B, 0xAB5F, 0xAB69, 0xAB6B, + 0xABE5, 0xABE5, 0xABE8, 0xABE8, 0xABED, 0xABED, 0xFB1E, 0xFB1E, + 0xFBB2, 0xFBC2, 0xFE00, 0xFE0F, 0xFE13, 0xFE13, 0xFE20, 0xFE2F, + 0xFE52, 0xFE52, 0xFE55, 0xFE55, 0xFEFF, 0xFEFF, 0xFF07, 0xFF07, + 0xFF0E, 0xFF0E, 0xFF1A, 0xFF1A, 0xFF3E, 0xFF3E, 0xFF40, 0xFF40, + 0xFF70, 0xFF70, 0xFF9E, 0xFF9F, 0xFFE3, 0xFFE3, 0xFFF9, 0xFFFB, + 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10780, 0x10785, + 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10A01, 0x10A03, 0x10A05, 0x10A06, + 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, 0x10AE5, 0x10AE6, + 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10F46, 0x10F50, 0x10F82, 0x10F85, + 0x11001, 0x11001, 0x11038, 0x11046, 0x11070, 0x11070, 0x11073, 0x11074, + 0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA, 0x110BD, 0x110BD, + 0x110C2, 0x110C2, 0x110CD, 0x110CD, 0x11100, 0x11102, 0x11127, 0x1112B, + 0x1112D, 0x11134, 0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE, + 0x111C9, 0x111CC, 0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234, + 0x11236, 0x11237, 0x1123E, 0x1123E, 0x112DF, 0x112DF, 0x112E3, 0x112EA, + 0x11300, 0x11301, 0x1133B, 0x1133C, 0x11340, 0x11340, 0x11366, 0x1136C, + 0x11370, 0x11374, 0x11438, 0x1143F, 0x11442, 0x11444, 0x11446, 0x11446, + 0x1145E, 0x1145E, 0x114B3, 0x114B8, 0x114BA, 0x114BA, 0x114BF, 0x114C0, + 0x114C2, 0x114C3, 0x115B2, 0x115B5, 0x115BC, 0x115BD, 0x115BF, 0x115C0, + 0x115DC, 0x115DD, 0x11633, 0x1163A, 0x1163D, 0x1163D, 0x1163F, 0x11640, + 0x116AB, 0x116AB, 0x116AD, 0x116AD, 0x116B0, 0x116B5, 0x116B7, 0x116B7, + 0x1171D, 0x1171F, 0x11722, 0x11725, 0x11727, 0x1172B, 0x1182F, 0x11837, + 0x11839, 0x1183A, 0x1193B, 0x1193C, 0x1193E, 0x1193E, 0x11943, 0x11943, + 0x119D4, 0x119D7, 0x119DA, 0x119DB, 0x119E0, 0x119E0, 0x11A01, 0x11A0A, + 0x11A33, 0x11A38, 0x11A3B, 0x11A3E, 0x11A47, 0x11A47, 0x11A51, 0x11A56, + 0x11A59, 0x11A5B, 0x11A8A, 0x11A96, 0x11A98, 0x11A99, 0x11C30, 0x11C36, + 0x11C38, 0x11C3D, 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7, 0x11CAA, 0x11CB0, + 0x11CB2, 0x11CB3, 0x11CB5, 0x11CB6, 0x11D31, 0x11D36, 0x11D3A, 0x11D3A, + 0x11D3C, 0x11D3D, 0x11D3F, 0x11D45, 0x11D47, 0x11D47, 0x11D90, 0x11D91, + 0x11D95, 0x11D95, 0x11D97, 0x11D97, 0x11EF3, 0x11EF4, 0x13430, 0x13438, + 0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16B40, 0x16B43, 0x16F4F, 0x16F4F, + 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE4, 0x1AFF0, 0x1AFF3, + 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1BC9D, 0x1BC9E, 0x1BCA0, 0x1BCA3, + 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169, 0x1D173, 0x1D182, + 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1DA00, 0x1DA36, + 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F, + 0x1DAA1, 0x1DAAF, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, + 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E130, 0x1E13D, 0x1E2AE, 0x1E2AE, + 0x1E2EC, 0x1E2EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E94B, 0x1F3FB, 0x1F3FF, + 0xE0001, 0xE0001, 0xE0020, 0xE007F, 0xE0100, 0xE01EF, + // #47 (5240+155): bp=Cased + 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5, + 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x01BA, + 0x01BC, 0x01BF, 0x01C4, 0x0293, 0x0295, 0x02B8, 0x02C0, 0x02C1, + 0x02E0, 0x02E4, 0x0345, 0x0345, 0x0370, 0x0373, 0x0376, 0x0377, + 0x037A, 0x037D, 0x037F, 0x037F, 0x0386, 0x0386, 0x0388, 0x038A, + 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481, + 0x048A, 0x052F, 0x0531, 0x0556, 0x0560, 0x0588, 0x10A0, 0x10C5, + 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, 0x10FD, 0x10FF, + 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA, + 0x1CBD, 0x1CBF, 0x1D00, 0x1DBF, 0x1E00, 0x1F15, 0x1F18, 0x1F1D, + 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, + 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, + 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, + 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, + 0x1FF6, 0x1FFC, 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C, + 0x2102, 0x2102, 0x2107, 0x2107, 0x210A, 0x2113, 0x2115, 0x2115, + 0x2119, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, + 0x212A, 0x212D, 0x212F, 0x2134, 0x2139, 0x2139, 0x213C, 0x213F, + 0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x217F, 0x2183, 0x2184, + 0x24B6, 0x24E9, 0x2C00, 0x2CE4, 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, + 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0xA640, 0xA66D, + 0xA680, 0xA69D, 0xA722, 0xA787, 0xA78B, 0xA78E, 0xA790, 0xA7CA, + 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F5, 0xA7F6, + 0xA7F8, 0xA7FA, 0xAB30, 0xAB5A, 0xAB5C, 0xAB68, 0xAB70, 0xABBF, + 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, + 0x10400, 0x1044F, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10570, 0x1057A, + 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1, + 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10780, 0x10780, + 0x10783, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10C80, 0x10CB2, + 0x10CC0, 0x10CF2, 0x118A0, 0x118DF, 0x16E40, 0x16E7F, 0x1D400, 0x1D454, + 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, + 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, + 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, + 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546, + 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA, + 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, 0x1D736, 0x1D74E, + 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2, + 0x1D7C4, 0x1D7CB, 0x1DF00, 0x1DF09, 0x1DF0B, 0x1DF1E, 0x1E900, 0x1E943, + 0x1F130, 0x1F149, 0x1F150, 0x1F169, 0x1F170, 0x1F189, + // #48 (5395+622): bp=Changes_When_Casefolded:CWCF + 0x0041, 0x005A, 0x00B5, 0x00B5, 0x00C0, 0x00D6, 0x00D8, 0x00DF, + 0x0100, 0x0100, 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, + 0x0108, 0x0108, 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, + 0x0110, 0x0110, 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, + 0x0118, 0x0118, 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, + 0x0120, 0x0120, 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, + 0x0128, 0x0128, 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, + 0x0130, 0x0130, 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, + 0x0139, 0x0139, 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, + 0x0141, 0x0141, 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, + 0x0149, 0x014A, 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, + 0x0152, 0x0152, 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, + 0x015A, 0x015A, 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, + 0x0162, 0x0162, 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, + 0x016A, 0x016A, 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, + 0x0172, 0x0172, 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, + 0x017B, 0x017B, 0x017D, 0x017D, 0x017F, 0x017F, 0x0181, 0x0182, + 0x0184, 0x0184, 0x0186, 0x0187, 0x0189, 0x018B, 0x018E, 0x0191, + 0x0193, 0x0194, 0x0196, 0x0198, 0x019C, 0x019D, 0x019F, 0x01A0, + 0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7, 0x01A9, 0x01A9, + 0x01AC, 0x01AC, 0x01AE, 0x01AF, 0x01B1, 0x01B3, 0x01B5, 0x01B5, + 0x01B7, 0x01B8, 0x01BC, 0x01BC, 0x01C4, 0x01C5, 0x01C7, 0x01C8, + 0x01CA, 0x01CB, 0x01CD, 0x01CD, 0x01CF, 0x01CF, 0x01D1, 0x01D1, + 0x01D3, 0x01D3, 0x01D5, 0x01D5, 0x01D7, 0x01D7, 0x01D9, 0x01D9, + 0x01DB, 0x01DB, 0x01DE, 0x01DE, 0x01E0, 0x01E0, 0x01E2, 0x01E2, + 0x01E4, 0x01E4, 0x01E6, 0x01E6, 0x01E8, 0x01E8, 0x01EA, 0x01EA, + 0x01EC, 0x01EC, 0x01EE, 0x01EE, 0x01F1, 0x01F2, 0x01F4, 0x01F4, + 0x01F6, 0x01F8, 0x01FA, 0x01FA, 0x01FC, 0x01FC, 0x01FE, 0x01FE, + 0x0200, 0x0200, 0x0202, 0x0202, 0x0204, 0x0204, 0x0206, 0x0206, + 0x0208, 0x0208, 0x020A, 0x020A, 0x020C, 0x020C, 0x020E, 0x020E, + 0x0210, 0x0210, 0x0212, 0x0212, 0x0214, 0x0214, 0x0216, 0x0216, + 0x0218, 0x0218, 0x021A, 0x021A, 0x021C, 0x021C, 0x021E, 0x021E, + 0x0220, 0x0220, 0x0222, 0x0222, 0x0224, 0x0224, 0x0226, 0x0226, + 0x0228, 0x0228, 0x022A, 0x022A, 0x022C, 0x022C, 0x022E, 0x022E, + 0x0230, 0x0230, 0x0232, 0x0232, 0x023A, 0x023B, 0x023D, 0x023E, + 0x0241, 0x0241, 0x0243, 0x0246, 0x0248, 0x0248, 0x024A, 0x024A, + 0x024C, 0x024C, 0x024E, 0x024E, 0x0345, 0x0345, 0x0370, 0x0370, + 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F, 0x0386, 0x0386, + 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F, 0x0391, 0x03A1, + 0x03A3, 0x03AB, 0x03C2, 0x03C2, 0x03CF, 0x03D1, 0x03D5, 0x03D6, + 0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE, + 0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, + 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE, + 0x03F0, 0x03F1, 0x03F4, 0x03F5, 0x03F7, 0x03F7, 0x03F9, 0x03FA, + 0x03FD, 0x042F, 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, + 0x0466, 0x0466, 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, + 0x046E, 0x046E, 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, + 0x0476, 0x0476, 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, + 0x047E, 0x047E, 0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C, + 0x048E, 0x048E, 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, + 0x0496, 0x0496, 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, + 0x049E, 0x049E, 0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, + 0x04A6, 0x04A6, 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, + 0x04AE, 0x04AE, 0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, + 0x04B6, 0x04B6, 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, + 0x04BE, 0x04BE, 0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5, + 0x04C7, 0x04C7, 0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD, + 0x04D0, 0x04D0, 0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6, + 0x04D8, 0x04D8, 0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE, + 0x04E0, 0x04E0, 0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6, + 0x04E8, 0x04E8, 0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE, + 0x04F0, 0x04F0, 0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6, + 0x04F8, 0x04F8, 0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE, + 0x0500, 0x0500, 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, + 0x0508, 0x0508, 0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E, + 0x0510, 0x0510, 0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516, + 0x0518, 0x0518, 0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E, + 0x0520, 0x0520, 0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526, + 0x0528, 0x0528, 0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E, + 0x0531, 0x0556, 0x0587, 0x0587, 0x10A0, 0x10C5, 0x10C7, 0x10C7, + 0x10CD, 0x10CD, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA, + 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02, 0x1E04, 0x1E04, + 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A, 0x1E0C, 0x1E0C, + 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12, 0x1E14, 0x1E14, + 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A, 0x1E1C, 0x1E1C, + 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22, 0x1E24, 0x1E24, + 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A, 0x1E2C, 0x1E2C, + 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32, 0x1E34, 0x1E34, + 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A, 0x1E3C, 0x1E3C, + 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42, 0x1E44, 0x1E44, + 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A, 0x1E4C, 0x1E4C, + 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52, 0x1E54, 0x1E54, + 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A, 0x1E5C, 0x1E5C, + 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62, 0x1E64, 0x1E64, + 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A, 0x1E6C, 0x1E6C, + 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72, 0x1E74, 0x1E74, + 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A, 0x1E7C, 0x1E7C, + 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82, 0x1E84, 0x1E84, + 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A, 0x1E8C, 0x1E8C, + 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92, 0x1E94, 0x1E94, + 0x1E9A, 0x1E9B, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2, + 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA, + 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2, + 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA, + 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2, + 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA, + 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2, + 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA, + 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2, + 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA, + 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2, + 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA, + 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D, + 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59, + 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F, + 0x1F80, 0x1FAF, 0x1FB2, 0x1FB4, 0x1FB7, 0x1FBC, 0x1FC2, 0x1FC4, + 0x1FC7, 0x1FCC, 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, 0x1FF2, 0x1FF4, + 0x1FF7, 0x1FFC, 0x2126, 0x2126, 0x212A, 0x212B, 0x2132, 0x2132, + 0x2160, 0x216F, 0x2183, 0x2183, 0x24B6, 0x24CF, 0x2C00, 0x2C2F, + 0x2C60, 0x2C60, 0x2C62, 0x2C64, 0x2C67, 0x2C67, 0x2C69, 0x2C69, + 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70, 0x2C72, 0x2C72, 0x2C75, 0x2C75, + 0x2C7E, 0x2C80, 0x2C82, 0x2C82, 0x2C84, 0x2C84, 0x2C86, 0x2C86, + 0x2C88, 0x2C88, 0x2C8A, 0x2C8A, 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, + 0x2C90, 0x2C90, 0x2C92, 0x2C92, 0x2C94, 0x2C94, 0x2C96, 0x2C96, + 0x2C98, 0x2C98, 0x2C9A, 0x2C9A, 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, + 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2, 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, + 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA, 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, + 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2, 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, + 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA, 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, + 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2, 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, + 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA, 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, + 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2, 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, + 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA, 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, + 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2, 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, + 0x2CF2, 0x2CF2, 0xA640, 0xA640, 0xA642, 0xA642, 0xA644, 0xA644, + 0xA646, 0xA646, 0xA648, 0xA648, 0xA64A, 0xA64A, 0xA64C, 0xA64C, + 0xA64E, 0xA64E, 0xA650, 0xA650, 0xA652, 0xA652, 0xA654, 0xA654, + 0xA656, 0xA656, 0xA658, 0xA658, 0xA65A, 0xA65A, 0xA65C, 0xA65C, + 0xA65E, 0xA65E, 0xA660, 0xA660, 0xA662, 0xA662, 0xA664, 0xA664, + 0xA666, 0xA666, 0xA668, 0xA668, 0xA66A, 0xA66A, 0xA66C, 0xA66C, + 0xA680, 0xA680, 0xA682, 0xA682, 0xA684, 0xA684, 0xA686, 0xA686, + 0xA688, 0xA688, 0xA68A, 0xA68A, 0xA68C, 0xA68C, 0xA68E, 0xA68E, + 0xA690, 0xA690, 0xA692, 0xA692, 0xA694, 0xA694, 0xA696, 0xA696, + 0xA698, 0xA698, 0xA69A, 0xA69A, 0xA722, 0xA722, 0xA724, 0xA724, + 0xA726, 0xA726, 0xA728, 0xA728, 0xA72A, 0xA72A, 0xA72C, 0xA72C, + 0xA72E, 0xA72E, 0xA732, 0xA732, 0xA734, 0xA734, 0xA736, 0xA736, + 0xA738, 0xA738, 0xA73A, 0xA73A, 0xA73C, 0xA73C, 0xA73E, 0xA73E, + 0xA740, 0xA740, 0xA742, 0xA742, 0xA744, 0xA744, 0xA746, 0xA746, + 0xA748, 0xA748, 0xA74A, 0xA74A, 0xA74C, 0xA74C, 0xA74E, 0xA74E, + 0xA750, 0xA750, 0xA752, 0xA752, 0xA754, 0xA754, 0xA756, 0xA756, + 0xA758, 0xA758, 0xA75A, 0xA75A, 0xA75C, 0xA75C, 0xA75E, 0xA75E, + 0xA760, 0xA760, 0xA762, 0xA762, 0xA764, 0xA764, 0xA766, 0xA766, + 0xA768, 0xA768, 0xA76A, 0xA76A, 0xA76C, 0xA76C, 0xA76E, 0xA76E, + 0xA779, 0xA779, 0xA77B, 0xA77B, 0xA77D, 0xA77E, 0xA780, 0xA780, + 0xA782, 0xA782, 0xA784, 0xA784, 0xA786, 0xA786, 0xA78B, 0xA78B, + 0xA78D, 0xA78D, 0xA790, 0xA790, 0xA792, 0xA792, 0xA796, 0xA796, + 0xA798, 0xA798, 0xA79A, 0xA79A, 0xA79C, 0xA79C, 0xA79E, 0xA79E, + 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6, + 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6, + 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE, + 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9, + 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5, + 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF21, 0xFF3A, + 0x10400, 0x10427, 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, + 0x1058C, 0x10592, 0x10594, 0x10595, 0x10C80, 0x10CB2, 0x118A0, 0x118BF, + 0x16E40, 0x16E5F, 0x1E900, 0x1E921, + // #49 (6017+131): bp=Changes_When_Casemapped:CWCM + 0x0041, 0x005A, 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00C0, 0x00D6, + 0x00D8, 0x00F6, 0x00F8, 0x0137, 0x0139, 0x018C, 0x018E, 0x019A, + 0x019C, 0x01A9, 0x01AC, 0x01B9, 0x01BC, 0x01BD, 0x01BF, 0x01BF, + 0x01C4, 0x0220, 0x0222, 0x0233, 0x023A, 0x0254, 0x0256, 0x0257, + 0x0259, 0x0259, 0x025B, 0x025C, 0x0260, 0x0261, 0x0263, 0x0263, + 0x0265, 0x0266, 0x0268, 0x026C, 0x026F, 0x026F, 0x0271, 0x0272, + 0x0275, 0x0275, 0x027D, 0x027D, 0x0280, 0x0280, 0x0282, 0x0283, + 0x0287, 0x028C, 0x0292, 0x0292, 0x029D, 0x029E, 0x0345, 0x0345, + 0x0370, 0x0373, 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F, + 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1, + 0x03A3, 0x03D1, 0x03D5, 0x03F5, 0x03F7, 0x03FB, 0x03FD, 0x0481, + 0x048A, 0x052F, 0x0531, 0x0556, 0x0561, 0x0587, 0x10A0, 0x10C5, + 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, 0x10FD, 0x10FF, + 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA, + 0x1CBD, 0x1CBF, 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E, + 0x1E00, 0x1E9B, 0x1E9E, 0x1E9E, 0x1EA0, 0x1F15, 0x1F18, 0x1F1D, + 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, + 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, + 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, + 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, + 0x1FF6, 0x1FFC, 0x2126, 0x2126, 0x212A, 0x212B, 0x2132, 0x2132, + 0x214E, 0x214E, 0x2160, 0x217F, 0x2183, 0x2184, 0x24B6, 0x24E9, + 0x2C00, 0x2C70, 0x2C72, 0x2C73, 0x2C75, 0x2C76, 0x2C7E, 0x2CE3, + 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, + 0x2D2D, 0x2D2D, 0xA640, 0xA66D, 0xA680, 0xA69B, 0xA722, 0xA72F, + 0xA732, 0xA76F, 0xA779, 0xA787, 0xA78B, 0xA78D, 0xA790, 0xA794, + 0xA796, 0xA7AE, 0xA7B0, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D6, 0xA7D9, + 0xA7F5, 0xA7F6, 0xAB53, 0xAB53, 0xAB70, 0xABBF, 0xFB00, 0xFB06, + 0xFB13, 0xFB17, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10400, 0x1044F, + 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10570, 0x1057A, 0x1057C, 0x1058A, + 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1, + 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, + 0x118A0, 0x118DF, 0x16E40, 0x16E7F, 0x1E900, 0x1E943, + // #50 (6148+609): bp=Changes_When_Lowercased:CWL + 0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100, + 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108, + 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110, + 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118, + 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120, + 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128, + 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130, + 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139, + 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141, + 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A, + 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152, + 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A, + 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162, + 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A, + 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172, + 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B, + 0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, + 0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198, + 0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4, + 0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF, + 0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC, + 0x01C4, 0x01C5, 0x01C7, 0x01C8, 0x01CA, 0x01CB, 0x01CD, 0x01CD, + 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5, + 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE, + 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6, + 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE, + 0x01F1, 0x01F2, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA, + 0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202, + 0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A, + 0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212, + 0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A, + 0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222, + 0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A, + 0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232, + 0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246, + 0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E, + 0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F, + 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F, + 0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D8, 0x03D8, + 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE, 0x03E0, 0x03E0, + 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8, + 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE, 0x03F4, 0x03F4, + 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, 0x0460, 0x0460, + 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, 0x0468, 0x0468, + 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, 0x0470, 0x0470, + 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, 0x0478, 0x0478, + 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, 0x0480, 0x0480, + 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, 0x0490, 0x0490, + 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, 0x0498, 0x0498, + 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, 0x04A0, 0x04A0, + 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, 0x04A8, 0x04A8, + 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, 0x04B0, 0x04B0, + 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, 0x04B8, 0x04B8, + 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, 0x04C0, 0x04C1, + 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, 0x04C9, 0x04C9, + 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, 0x04D2, 0x04D2, + 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, 0x04DA, 0x04DA, + 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, 0x04E2, 0x04E2, + 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, 0x04EA, 0x04EA, + 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, 0x04F2, 0x04F2, + 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, 0x04FA, 0x04FA, + 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, 0x0502, 0x0502, + 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, 0x050A, 0x050A, + 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, 0x0512, 0x0512, + 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, 0x051A, 0x051A, + 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, 0x0522, 0x0522, + 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, 0x052A, 0x052A, + 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, 0x10A0, 0x10C5, + 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x13A0, 0x13F5, 0x1C90, 0x1CBA, + 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02, 0x1E04, 0x1E04, + 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A, 0x1E0C, 0x1E0C, + 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12, 0x1E14, 0x1E14, + 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A, 0x1E1C, 0x1E1C, + 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22, 0x1E24, 0x1E24, + 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A, 0x1E2C, 0x1E2C, + 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32, 0x1E34, 0x1E34, + 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A, 0x1E3C, 0x1E3C, + 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42, 0x1E44, 0x1E44, + 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A, 0x1E4C, 0x1E4C, + 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52, 0x1E54, 0x1E54, + 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A, 0x1E5C, 0x1E5C, + 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62, 0x1E64, 0x1E64, + 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A, 0x1E6C, 0x1E6C, + 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72, 0x1E74, 0x1E74, + 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A, 0x1E7C, 0x1E7C, + 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82, 0x1E84, 0x1E84, + 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A, 0x1E8C, 0x1E8C, + 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92, 0x1E94, 0x1E94, + 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2, 0x1EA4, 0x1EA4, + 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA, 0x1EAC, 0x1EAC, + 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2, 0x1EB4, 0x1EB4, + 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA, 0x1EBC, 0x1EBC, + 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2, 0x1EC4, 0x1EC4, + 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA, 0x1ECC, 0x1ECC, + 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2, 0x1ED4, 0x1ED4, + 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA, 0x1EDC, 0x1EDC, + 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2, 0x1EE4, 0x1EE4, + 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA, 0x1EEC, 0x1EEC, + 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2, 0x1EF4, 0x1EF4, + 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA, 0x1EFC, 0x1EFC, + 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D, 0x1F28, 0x1F2F, + 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, + 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F, 0x1F88, 0x1F8F, + 0x1F98, 0x1F9F, 0x1FA8, 0x1FAF, 0x1FB8, 0x1FBC, 0x1FC8, 0x1FCC, + 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, 0x1FF8, 0x1FFC, 0x2126, 0x2126, + 0x212A, 0x212B, 0x2132, 0x2132, 0x2160, 0x216F, 0x2183, 0x2183, + 0x24B6, 0x24CF, 0x2C00, 0x2C2F, 0x2C60, 0x2C60, 0x2C62, 0x2C64, + 0x2C67, 0x2C67, 0x2C69, 0x2C69, 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70, + 0x2C72, 0x2C72, 0x2C75, 0x2C75, 0x2C7E, 0x2C80, 0x2C82, 0x2C82, + 0x2C84, 0x2C84, 0x2C86, 0x2C86, 0x2C88, 0x2C88, 0x2C8A, 0x2C8A, + 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, 0x2C90, 0x2C90, 0x2C92, 0x2C92, + 0x2C94, 0x2C94, 0x2C96, 0x2C96, 0x2C98, 0x2C98, 0x2C9A, 0x2C9A, + 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2, + 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA, + 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2, + 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA, + 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2, + 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA, + 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2, + 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA, + 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2, + 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, 0x2CF2, 0x2CF2, 0xA640, 0xA640, + 0xA642, 0xA642, 0xA644, 0xA644, 0xA646, 0xA646, 0xA648, 0xA648, + 0xA64A, 0xA64A, 0xA64C, 0xA64C, 0xA64E, 0xA64E, 0xA650, 0xA650, + 0xA652, 0xA652, 0xA654, 0xA654, 0xA656, 0xA656, 0xA658, 0xA658, + 0xA65A, 0xA65A, 0xA65C, 0xA65C, 0xA65E, 0xA65E, 0xA660, 0xA660, + 0xA662, 0xA662, 0xA664, 0xA664, 0xA666, 0xA666, 0xA668, 0xA668, + 0xA66A, 0xA66A, 0xA66C, 0xA66C, 0xA680, 0xA680, 0xA682, 0xA682, + 0xA684, 0xA684, 0xA686, 0xA686, 0xA688, 0xA688, 0xA68A, 0xA68A, + 0xA68C, 0xA68C, 0xA68E, 0xA68E, 0xA690, 0xA690, 0xA692, 0xA692, + 0xA694, 0xA694, 0xA696, 0xA696, 0xA698, 0xA698, 0xA69A, 0xA69A, + 0xA722, 0xA722, 0xA724, 0xA724, 0xA726, 0xA726, 0xA728, 0xA728, + 0xA72A, 0xA72A, 0xA72C, 0xA72C, 0xA72E, 0xA72E, 0xA732, 0xA732, + 0xA734, 0xA734, 0xA736, 0xA736, 0xA738, 0xA738, 0xA73A, 0xA73A, + 0xA73C, 0xA73C, 0xA73E, 0xA73E, 0xA740, 0xA740, 0xA742, 0xA742, + 0xA744, 0xA744, 0xA746, 0xA746, 0xA748, 0xA748, 0xA74A, 0xA74A, + 0xA74C, 0xA74C, 0xA74E, 0xA74E, 0xA750, 0xA750, 0xA752, 0xA752, + 0xA754, 0xA754, 0xA756, 0xA756, 0xA758, 0xA758, 0xA75A, 0xA75A, + 0xA75C, 0xA75C, 0xA75E, 0xA75E, 0xA760, 0xA760, 0xA762, 0xA762, + 0xA764, 0xA764, 0xA766, 0xA766, 0xA768, 0xA768, 0xA76A, 0xA76A, + 0xA76C, 0xA76C, 0xA76E, 0xA76E, 0xA779, 0xA779, 0xA77B, 0xA77B, + 0xA77D, 0xA77E, 0xA780, 0xA780, 0xA782, 0xA782, 0xA784, 0xA784, + 0xA786, 0xA786, 0xA78B, 0xA78B, 0xA78D, 0xA78D, 0xA790, 0xA790, + 0xA792, 0xA792, 0xA796, 0xA796, 0xA798, 0xA798, 0xA79A, 0xA79A, + 0xA79C, 0xA79C, 0xA79E, 0xA79E, 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, + 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6, 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, + 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6, 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, + 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE, 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, + 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9, 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, + 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5, 0xFF21, 0xFF3A, 0x10400, 0x10427, + 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, + 0x10594, 0x10595, 0x10C80, 0x10CB2, 0x118A0, 0x118BF, 0x16E40, 0x16E5F, + 0x1E900, 0x1E921, + // #51 (6757+838): bp=Changes_When_NFKC_Casefolded:CWKCF + 0x0041, 0x005A, 0x00A0, 0x00A0, 0x00A8, 0x00A8, 0x00AA, 0x00AA, + 0x00AD, 0x00AD, 0x00AF, 0x00AF, 0x00B2, 0x00B5, 0x00B8, 0x00BA, + 0x00BC, 0x00BE, 0x00C0, 0x00D6, 0x00D8, 0x00DF, 0x0100, 0x0100, + 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108, + 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110, + 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118, + 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120, + 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128, + 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130, + 0x0132, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139, 0x013B, 0x013B, + 0x013D, 0x013D, 0x013F, 0x0141, 0x0143, 0x0143, 0x0145, 0x0145, + 0x0147, 0x0147, 0x0149, 0x014A, 0x014C, 0x014C, 0x014E, 0x014E, + 0x0150, 0x0150, 0x0152, 0x0152, 0x0154, 0x0154, 0x0156, 0x0156, + 0x0158, 0x0158, 0x015A, 0x015A, 0x015C, 0x015C, 0x015E, 0x015E, + 0x0160, 0x0160, 0x0162, 0x0162, 0x0164, 0x0164, 0x0166, 0x0166, + 0x0168, 0x0168, 0x016A, 0x016A, 0x016C, 0x016C, 0x016E, 0x016E, + 0x0170, 0x0170, 0x0172, 0x0172, 0x0174, 0x0174, 0x0176, 0x0176, + 0x0178, 0x0179, 0x017B, 0x017B, 0x017D, 0x017D, 0x017F, 0x017F, + 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, 0x0189, 0x018B, + 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198, 0x019C, 0x019D, + 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7, + 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF, 0x01B1, 0x01B3, + 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC, 0x01C4, 0x01CD, + 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5, + 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE, + 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6, + 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE, + 0x01F1, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA, 0x01FC, 0x01FC, + 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202, 0x0204, 0x0204, + 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A, 0x020C, 0x020C, + 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212, 0x0214, 0x0214, + 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A, 0x021C, 0x021C, + 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222, 0x0224, 0x0224, + 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A, 0x022C, 0x022C, + 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232, 0x023A, 0x023B, + 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246, 0x0248, 0x0248, + 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E, 0x02B0, 0x02B8, + 0x02D8, 0x02DD, 0x02E0, 0x02E4, 0x0340, 0x0341, 0x0343, 0x0345, + 0x034F, 0x034F, 0x0370, 0x0370, 0x0372, 0x0372, 0x0374, 0x0374, + 0x0376, 0x0376, 0x037A, 0x037A, 0x037E, 0x037F, 0x0384, 0x038A, + 0x038C, 0x038C, 0x038E, 0x038F, 0x0391, 0x03A1, 0x03A3, 0x03AB, + 0x03C2, 0x03C2, 0x03CF, 0x03D6, 0x03D8, 0x03D8, 0x03DA, 0x03DA, + 0x03DC, 0x03DC, 0x03DE, 0x03DE, 0x03E0, 0x03E0, 0x03E2, 0x03E2, + 0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8, 0x03EA, 0x03EA, + 0x03EC, 0x03EC, 0x03EE, 0x03EE, 0x03F0, 0x03F2, 0x03F4, 0x03F5, + 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, 0x0460, 0x0460, + 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, 0x0468, 0x0468, + 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, 0x0470, 0x0470, + 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, 0x0478, 0x0478, + 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, 0x0480, 0x0480, + 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, 0x0490, 0x0490, + 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, 0x0498, 0x0498, + 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, 0x04A0, 0x04A0, + 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, 0x04A8, 0x04A8, + 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, 0x04B0, 0x04B0, + 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, 0x04B8, 0x04B8, + 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, 0x04C0, 0x04C1, + 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, 0x04C9, 0x04C9, + 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, 0x04D2, 0x04D2, + 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, 0x04DA, 0x04DA, + 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, 0x04E2, 0x04E2, + 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, 0x04EA, 0x04EA, + 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, 0x04F2, 0x04F2, + 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, 0x04FA, 0x04FA, + 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, 0x0502, 0x0502, + 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, 0x050A, 0x050A, + 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, 0x0512, 0x0512, + 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, 0x051A, 0x051A, + 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, 0x0522, 0x0522, + 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, 0x052A, 0x052A, + 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, 0x0587, 0x0587, + 0x061C, 0x061C, 0x0675, 0x0678, 0x0958, 0x095F, 0x09DC, 0x09DD, + 0x09DF, 0x09DF, 0x0A33, 0x0A33, 0x0A36, 0x0A36, 0x0A59, 0x0A5B, + 0x0A5E, 0x0A5E, 0x0B5C, 0x0B5D, 0x0E33, 0x0E33, 0x0EB3, 0x0EB3, + 0x0EDC, 0x0EDD, 0x0F0C, 0x0F0C, 0x0F43, 0x0F43, 0x0F4D, 0x0F4D, + 0x0F52, 0x0F52, 0x0F57, 0x0F57, 0x0F5C, 0x0F5C, 0x0F69, 0x0F69, + 0x0F73, 0x0F73, 0x0F75, 0x0F79, 0x0F81, 0x0F81, 0x0F93, 0x0F93, + 0x0F9D, 0x0F9D, 0x0FA2, 0x0FA2, 0x0FA7, 0x0FA7, 0x0FAC, 0x0FAC, + 0x0FB9, 0x0FB9, 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, + 0x10FC, 0x10FC, 0x115F, 0x1160, 0x13F8, 0x13FD, 0x17B4, 0x17B5, + 0x180B, 0x180F, 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, + 0x1D2C, 0x1D2E, 0x1D30, 0x1D3A, 0x1D3C, 0x1D4D, 0x1D4F, 0x1D6A, + 0x1D78, 0x1D78, 0x1D9B, 0x1DBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02, + 0x1E04, 0x1E04, 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A, + 0x1E0C, 0x1E0C, 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12, + 0x1E14, 0x1E14, 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A, + 0x1E1C, 0x1E1C, 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22, + 0x1E24, 0x1E24, 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A, + 0x1E2C, 0x1E2C, 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32, + 0x1E34, 0x1E34, 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A, + 0x1E3C, 0x1E3C, 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42, + 0x1E44, 0x1E44, 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A, + 0x1E4C, 0x1E4C, 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52, + 0x1E54, 0x1E54, 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A, + 0x1E5C, 0x1E5C, 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62, + 0x1E64, 0x1E64, 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A, + 0x1E6C, 0x1E6C, 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72, + 0x1E74, 0x1E74, 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A, + 0x1E7C, 0x1E7C, 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82, + 0x1E84, 0x1E84, 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A, + 0x1E8C, 0x1E8C, 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92, + 0x1E94, 0x1E94, 0x1E9A, 0x1E9B, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, + 0x1EA2, 0x1EA2, 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, + 0x1EAA, 0x1EAA, 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, + 0x1EB2, 0x1EB2, 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, + 0x1EBA, 0x1EBA, 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, + 0x1EC2, 0x1EC2, 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, + 0x1ECA, 0x1ECA, 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, + 0x1ED2, 0x1ED2, 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, + 0x1EDA, 0x1EDA, 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, + 0x1EE2, 0x1EE2, 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, + 0x1EEA, 0x1EEA, 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, + 0x1EF2, 0x1EF2, 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, + 0x1EFA, 0x1EFA, 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, + 0x1F18, 0x1F1D, 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, + 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, + 0x1F68, 0x1F6F, 0x1F71, 0x1F71, 0x1F73, 0x1F73, 0x1F75, 0x1F75, + 0x1F77, 0x1F77, 0x1F79, 0x1F79, 0x1F7B, 0x1F7B, 0x1F7D, 0x1F7D, + 0x1F80, 0x1FAF, 0x1FB2, 0x1FB4, 0x1FB7, 0x1FC4, 0x1FC7, 0x1FCF, + 0x1FD3, 0x1FD3, 0x1FD8, 0x1FDB, 0x1FDD, 0x1FDF, 0x1FE3, 0x1FE3, + 0x1FE8, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF7, 0x1FFE, 0x2000, 0x200F, + 0x2011, 0x2011, 0x2017, 0x2017, 0x2024, 0x2026, 0x202A, 0x202F, + 0x2033, 0x2034, 0x2036, 0x2037, 0x203C, 0x203C, 0x203E, 0x203E, + 0x2047, 0x2049, 0x2057, 0x2057, 0x205F, 0x2071, 0x2074, 0x208E, + 0x2090, 0x209C, 0x20A8, 0x20A8, 0x2100, 0x2103, 0x2105, 0x2107, + 0x2109, 0x2113, 0x2115, 0x2116, 0x2119, 0x211D, 0x2120, 0x2122, + 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D, + 0x212F, 0x2139, 0x213B, 0x2140, 0x2145, 0x2149, 0x2150, 0x217F, + 0x2183, 0x2183, 0x2189, 0x2189, 0x222C, 0x222D, 0x222F, 0x2230, + 0x2329, 0x232A, 0x2460, 0x24EA, 0x2A0C, 0x2A0C, 0x2A74, 0x2A76, + 0x2ADC, 0x2ADC, 0x2C00, 0x2C2F, 0x2C60, 0x2C60, 0x2C62, 0x2C64, + 0x2C67, 0x2C67, 0x2C69, 0x2C69, 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70, + 0x2C72, 0x2C72, 0x2C75, 0x2C75, 0x2C7C, 0x2C80, 0x2C82, 0x2C82, + 0x2C84, 0x2C84, 0x2C86, 0x2C86, 0x2C88, 0x2C88, 0x2C8A, 0x2C8A, + 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, 0x2C90, 0x2C90, 0x2C92, 0x2C92, + 0x2C94, 0x2C94, 0x2C96, 0x2C96, 0x2C98, 0x2C98, 0x2C9A, 0x2C9A, + 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2, + 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA, + 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2, + 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA, + 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2, + 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA, + 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2, + 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA, + 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2, + 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, 0x2CF2, 0x2CF2, 0x2D6F, 0x2D6F, + 0x2E9F, 0x2E9F, 0x2EF3, 0x2EF3, 0x2F00, 0x2FD5, 0x3000, 0x3000, + 0x3036, 0x3036, 0x3038, 0x303A, 0x309B, 0x309C, 0x309F, 0x309F, + 0x30FF, 0x30FF, 0x3131, 0x318E, 0x3192, 0x319F, 0x3200, 0x321E, + 0x3220, 0x3247, 0x3250, 0x327E, 0x3280, 0x33FF, 0xA640, 0xA640, + 0xA642, 0xA642, 0xA644, 0xA644, 0xA646, 0xA646, 0xA648, 0xA648, + 0xA64A, 0xA64A, 0xA64C, 0xA64C, 0xA64E, 0xA64E, 0xA650, 0xA650, + 0xA652, 0xA652, 0xA654, 0xA654, 0xA656, 0xA656, 0xA658, 0xA658, + 0xA65A, 0xA65A, 0xA65C, 0xA65C, 0xA65E, 0xA65E, 0xA660, 0xA660, + 0xA662, 0xA662, 0xA664, 0xA664, 0xA666, 0xA666, 0xA668, 0xA668, + 0xA66A, 0xA66A, 0xA66C, 0xA66C, 0xA680, 0xA680, 0xA682, 0xA682, + 0xA684, 0xA684, 0xA686, 0xA686, 0xA688, 0xA688, 0xA68A, 0xA68A, + 0xA68C, 0xA68C, 0xA68E, 0xA68E, 0xA690, 0xA690, 0xA692, 0xA692, + 0xA694, 0xA694, 0xA696, 0xA696, 0xA698, 0xA698, 0xA69A, 0xA69A, + 0xA69C, 0xA69D, 0xA722, 0xA722, 0xA724, 0xA724, 0xA726, 0xA726, + 0xA728, 0xA728, 0xA72A, 0xA72A, 0xA72C, 0xA72C, 0xA72E, 0xA72E, + 0xA732, 0xA732, 0xA734, 0xA734, 0xA736, 0xA736, 0xA738, 0xA738, + 0xA73A, 0xA73A, 0xA73C, 0xA73C, 0xA73E, 0xA73E, 0xA740, 0xA740, + 0xA742, 0xA742, 0xA744, 0xA744, 0xA746, 0xA746, 0xA748, 0xA748, + 0xA74A, 0xA74A, 0xA74C, 0xA74C, 0xA74E, 0xA74E, 0xA750, 0xA750, + 0xA752, 0xA752, 0xA754, 0xA754, 0xA756, 0xA756, 0xA758, 0xA758, + 0xA75A, 0xA75A, 0xA75C, 0xA75C, 0xA75E, 0xA75E, 0xA760, 0xA760, + 0xA762, 0xA762, 0xA764, 0xA764, 0xA766, 0xA766, 0xA768, 0xA768, + 0xA76A, 0xA76A, 0xA76C, 0xA76C, 0xA76E, 0xA76E, 0xA770, 0xA770, + 0xA779, 0xA779, 0xA77B, 0xA77B, 0xA77D, 0xA77E, 0xA780, 0xA780, + 0xA782, 0xA782, 0xA784, 0xA784, 0xA786, 0xA786, 0xA78B, 0xA78B, + 0xA78D, 0xA78D, 0xA790, 0xA790, 0xA792, 0xA792, 0xA796, 0xA796, + 0xA798, 0xA798, 0xA79A, 0xA79A, 0xA79C, 0xA79C, 0xA79E, 0xA79E, + 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6, + 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6, + 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE, + 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9, + 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, 0xA7D8, 0xA7D8, 0xA7F2, 0xA7F5, + 0xA7F8, 0xA7F9, 0xAB5C, 0xAB5F, 0xAB69, 0xAB69, 0xAB70, 0xABBF, + 0xF900, 0xFA0D, 0xFA10, 0xFA10, 0xFA12, 0xFA12, 0xFA15, 0xFA1E, + 0xFA20, 0xFA20, 0xFA22, 0xFA22, 0xFA25, 0xFA26, 0xFA2A, 0xFA6D, + 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB1D, + 0xFB1F, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, + 0xFB43, 0xFB44, 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F, + 0xFD92, 0xFDC7, 0xFDF0, 0xFDFC, 0xFE00, 0xFE19, 0xFE30, 0xFE44, + 0xFE47, 0xFE52, 0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFE70, 0xFE72, + 0xFE74, 0xFE74, 0xFE76, 0xFEFC, 0xFEFF, 0xFEFF, 0xFF01, 0xFFBE, + 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, + 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF0, 0xFFF8, 0x10400, 0x10427, + 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, + 0x10594, 0x10595, 0x10781, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, + 0x10C80, 0x10CB2, 0x118A0, 0x118BF, 0x16E40, 0x16E5F, 0x1BCA0, 0x1BCA3, + 0x1D15E, 0x1D164, 0x1D173, 0x1D17A, 0x1D1BB, 0x1D1C0, 0x1D400, 0x1D454, + 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, + 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, + 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, + 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546, + 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D7FF, + 0x1E900, 0x1E921, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, + 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, + 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, + 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, + 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, + 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, + 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, + 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, + 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1F100, 0x1F10A, 0x1F110, 0x1F12E, + 0x1F130, 0x1F14F, 0x1F16A, 0x1F16C, 0x1F190, 0x1F190, 0x1F200, 0x1F202, + 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F250, 0x1F251, 0x1FBF0, 0x1FBF9, + 0x2F800, 0x2FA1D, 0xE0000, 0xE0FFF, + // #52 (7595+626): bp=Changes_When_Titlecased:CWT + 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF, + 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107, + 0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F, + 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117, + 0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F, + 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127, + 0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F, + 0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137, + 0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140, + 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149, + 0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151, + 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159, + 0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161, + 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169, + 0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171, + 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A, + 0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185, + 0x0188, 0x0188, 0x018C, 0x018C, 0x0192, 0x0192, 0x0195, 0x0195, + 0x0199, 0x019A, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3, + 0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AD, 0x01AD, 0x01B0, 0x01B0, + 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01B9, 0x01BD, 0x01BD, + 0x01BF, 0x01BF, 0x01C4, 0x01C4, 0x01C6, 0x01C7, 0x01C9, 0x01CA, + 0x01CC, 0x01CC, 0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2, + 0x01D4, 0x01D4, 0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA, + 0x01DC, 0x01DD, 0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3, + 0x01E5, 0x01E5, 0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB, + 0x01ED, 0x01ED, 0x01EF, 0x01F1, 0x01F3, 0x01F3, 0x01F5, 0x01F5, + 0x01F9, 0x01F9, 0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF, + 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, + 0x0209, 0x0209, 0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F, + 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, + 0x0219, 0x0219, 0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F, + 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229, + 0x022B, 0x022B, 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231, + 0x0233, 0x0233, 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242, + 0x0247, 0x0247, 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D, + 0x024F, 0x0254, 0x0256, 0x0257, 0x0259, 0x0259, 0x025B, 0x025C, + 0x0260, 0x0261, 0x0263, 0x0263, 0x0265, 0x0266, 0x0268, 0x026C, + 0x026F, 0x026F, 0x0271, 0x0272, 0x0275, 0x0275, 0x027D, 0x027D, + 0x0280, 0x0280, 0x0282, 0x0283, 0x0287, 0x028C, 0x0292, 0x0292, + 0x029D, 0x029E, 0x0345, 0x0345, 0x0371, 0x0371, 0x0373, 0x0373, + 0x0377, 0x0377, 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE, + 0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB, + 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3, + 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB, + 0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8, + 0x03FB, 0x03FB, 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463, + 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B, + 0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473, + 0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B, + 0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B, + 0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493, + 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B, + 0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3, + 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB, + 0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3, + 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB, + 0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4, + 0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC, + 0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5, + 0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD, + 0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5, + 0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED, + 0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5, + 0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD, + 0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, + 0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D, + 0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515, + 0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D, + 0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525, + 0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D, + 0x052F, 0x052F, 0x0561, 0x0587, 0x13F8, 0x13FD, 0x1C80, 0x1C88, + 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E, 0x1E01, 0x1E01, + 0x1E03, 0x1E03, 0x1E05, 0x1E05, 0x1E07, 0x1E07, 0x1E09, 0x1E09, + 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, 0x1E0F, 0x1E0F, 0x1E11, 0x1E11, + 0x1E13, 0x1E13, 0x1E15, 0x1E15, 0x1E17, 0x1E17, 0x1E19, 0x1E19, + 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D, 0x1E1F, 0x1E1F, 0x1E21, 0x1E21, + 0x1E23, 0x1E23, 0x1E25, 0x1E25, 0x1E27, 0x1E27, 0x1E29, 0x1E29, + 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, 0x1E2F, 0x1E2F, 0x1E31, 0x1E31, + 0x1E33, 0x1E33, 0x1E35, 0x1E35, 0x1E37, 0x1E37, 0x1E39, 0x1E39, + 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, 0x1E3F, 0x1E3F, 0x1E41, 0x1E41, + 0x1E43, 0x1E43, 0x1E45, 0x1E45, 0x1E47, 0x1E47, 0x1E49, 0x1E49, + 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D, 0x1E4F, 0x1E4F, 0x1E51, 0x1E51, + 0x1E53, 0x1E53, 0x1E55, 0x1E55, 0x1E57, 0x1E57, 0x1E59, 0x1E59, + 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, 0x1E5F, 0x1E5F, 0x1E61, 0x1E61, + 0x1E63, 0x1E63, 0x1E65, 0x1E65, 0x1E67, 0x1E67, 0x1E69, 0x1E69, + 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D, 0x1E6F, 0x1E6F, 0x1E71, 0x1E71, + 0x1E73, 0x1E73, 0x1E75, 0x1E75, 0x1E77, 0x1E77, 0x1E79, 0x1E79, + 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, 0x1E7F, 0x1E7F, 0x1E81, 0x1E81, + 0x1E83, 0x1E83, 0x1E85, 0x1E85, 0x1E87, 0x1E87, 0x1E89, 0x1E89, + 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, 0x1E8F, 0x1E8F, 0x1E91, 0x1E91, + 0x1E93, 0x1E93, 0x1E95, 0x1E9B, 0x1EA1, 0x1EA1, 0x1EA3, 0x1EA3, + 0x1EA5, 0x1EA5, 0x1EA7, 0x1EA7, 0x1EA9, 0x1EA9, 0x1EAB, 0x1EAB, + 0x1EAD, 0x1EAD, 0x1EAF, 0x1EAF, 0x1EB1, 0x1EB1, 0x1EB3, 0x1EB3, + 0x1EB5, 0x1EB5, 0x1EB7, 0x1EB7, 0x1EB9, 0x1EB9, 0x1EBB, 0x1EBB, + 0x1EBD, 0x1EBD, 0x1EBF, 0x1EBF, 0x1EC1, 0x1EC1, 0x1EC3, 0x1EC3, + 0x1EC5, 0x1EC5, 0x1EC7, 0x1EC7, 0x1EC9, 0x1EC9, 0x1ECB, 0x1ECB, + 0x1ECD, 0x1ECD, 0x1ECF, 0x1ECF, 0x1ED1, 0x1ED1, 0x1ED3, 0x1ED3, + 0x1ED5, 0x1ED5, 0x1ED7, 0x1ED7, 0x1ED9, 0x1ED9, 0x1EDB, 0x1EDB, + 0x1EDD, 0x1EDD, 0x1EDF, 0x1EDF, 0x1EE1, 0x1EE1, 0x1EE3, 0x1EE3, + 0x1EE5, 0x1EE5, 0x1EE7, 0x1EE7, 0x1EE9, 0x1EE9, 0x1EEB, 0x1EEB, + 0x1EED, 0x1EED, 0x1EEF, 0x1EEF, 0x1EF1, 0x1EF1, 0x1EF3, 0x1EF3, + 0x1EF5, 0x1EF5, 0x1EF7, 0x1EF7, 0x1EF9, 0x1EF9, 0x1EFB, 0x1EFB, + 0x1EFD, 0x1EFD, 0x1EFF, 0x1F07, 0x1F10, 0x1F15, 0x1F20, 0x1F27, + 0x1F30, 0x1F37, 0x1F40, 0x1F45, 0x1F50, 0x1F57, 0x1F60, 0x1F67, + 0x1F70, 0x1F7D, 0x1F80, 0x1F87, 0x1F90, 0x1F97, 0x1FA0, 0x1FA7, + 0x1FB0, 0x1FB4, 0x1FB6, 0x1FB7, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, + 0x1FC6, 0x1FC7, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7, + 0x1FF2, 0x1FF4, 0x1FF6, 0x1FF7, 0x214E, 0x214E, 0x2170, 0x217F, + 0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F, 0x2C61, 0x2C61, + 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A, 0x2C6C, 0x2C6C, + 0x2C73, 0x2C73, 0x2C76, 0x2C76, 0x2C81, 0x2C81, 0x2C83, 0x2C83, + 0x2C85, 0x2C85, 0x2C87, 0x2C87, 0x2C89, 0x2C89, 0x2C8B, 0x2C8B, + 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F, 0x2C91, 0x2C91, 0x2C93, 0x2C93, + 0x2C95, 0x2C95, 0x2C97, 0x2C97, 0x2C99, 0x2C99, 0x2C9B, 0x2C9B, + 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F, 0x2CA1, 0x2CA1, 0x2CA3, 0x2CA3, + 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7, 0x2CA9, 0x2CA9, 0x2CAB, 0x2CAB, + 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF, 0x2CB1, 0x2CB1, 0x2CB3, 0x2CB3, + 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7, 0x2CB9, 0x2CB9, 0x2CBB, 0x2CBB, + 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF, 0x2CC1, 0x2CC1, 0x2CC3, 0x2CC3, + 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7, 0x2CC9, 0x2CC9, 0x2CCB, 0x2CCB, + 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF, 0x2CD1, 0x2CD1, 0x2CD3, 0x2CD3, + 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7, 0x2CD9, 0x2CD9, 0x2CDB, 0x2CDB, + 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF, 0x2CE1, 0x2CE1, 0x2CE3, 0x2CE3, + 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE, 0x2CF3, 0x2CF3, 0x2D00, 0x2D25, + 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0xA641, 0xA641, 0xA643, 0xA643, + 0xA645, 0xA645, 0xA647, 0xA647, 0xA649, 0xA649, 0xA64B, 0xA64B, + 0xA64D, 0xA64D, 0xA64F, 0xA64F, 0xA651, 0xA651, 0xA653, 0xA653, + 0xA655, 0xA655, 0xA657, 0xA657, 0xA659, 0xA659, 0xA65B, 0xA65B, + 0xA65D, 0xA65D, 0xA65F, 0xA65F, 0xA661, 0xA661, 0xA663, 0xA663, + 0xA665, 0xA665, 0xA667, 0xA667, 0xA669, 0xA669, 0xA66B, 0xA66B, + 0xA66D, 0xA66D, 0xA681, 0xA681, 0xA683, 0xA683, 0xA685, 0xA685, + 0xA687, 0xA687, 0xA689, 0xA689, 0xA68B, 0xA68B, 0xA68D, 0xA68D, + 0xA68F, 0xA68F, 0xA691, 0xA691, 0xA693, 0xA693, 0xA695, 0xA695, + 0xA697, 0xA697, 0xA699, 0xA699, 0xA69B, 0xA69B, 0xA723, 0xA723, + 0xA725, 0xA725, 0xA727, 0xA727, 0xA729, 0xA729, 0xA72B, 0xA72B, + 0xA72D, 0xA72D, 0xA72F, 0xA72F, 0xA733, 0xA733, 0xA735, 0xA735, + 0xA737, 0xA737, 0xA739, 0xA739, 0xA73B, 0xA73B, 0xA73D, 0xA73D, + 0xA73F, 0xA73F, 0xA741, 0xA741, 0xA743, 0xA743, 0xA745, 0xA745, + 0xA747, 0xA747, 0xA749, 0xA749, 0xA74B, 0xA74B, 0xA74D, 0xA74D, + 0xA74F, 0xA74F, 0xA751, 0xA751, 0xA753, 0xA753, 0xA755, 0xA755, + 0xA757, 0xA757, 0xA759, 0xA759, 0xA75B, 0xA75B, 0xA75D, 0xA75D, + 0xA75F, 0xA75F, 0xA761, 0xA761, 0xA763, 0xA763, 0xA765, 0xA765, + 0xA767, 0xA767, 0xA769, 0xA769, 0xA76B, 0xA76B, 0xA76D, 0xA76D, + 0xA76F, 0xA76F, 0xA77A, 0xA77A, 0xA77C, 0xA77C, 0xA77F, 0xA77F, + 0xA781, 0xA781, 0xA783, 0xA783, 0xA785, 0xA785, 0xA787, 0xA787, + 0xA78C, 0xA78C, 0xA791, 0xA791, 0xA793, 0xA794, 0xA797, 0xA797, + 0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F, + 0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7, + 0xA7A9, 0xA7A9, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, 0xA7B9, 0xA7B9, + 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF, 0xA7C1, 0xA7C1, + 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA, 0xA7D1, 0xA7D1, + 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6, 0xAB53, 0xAB53, + 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF41, 0xFF5A, + 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1, 0x105A3, 0x105B1, + 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10CC0, 0x10CF2, 0x118C0, 0x118DF, + 0x16E60, 0x16E7F, 0x1E922, 0x1E943, + // #53 (8221+627): bp=Changes_When_Uppercased:CWU + 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF, + 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107, + 0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F, + 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117, + 0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F, + 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127, + 0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F, + 0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137, + 0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140, + 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149, + 0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151, + 0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159, + 0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161, + 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169, + 0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171, + 0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A, + 0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185, + 0x0188, 0x0188, 0x018C, 0x018C, 0x0192, 0x0192, 0x0195, 0x0195, + 0x0199, 0x019A, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3, + 0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AD, 0x01AD, 0x01B0, 0x01B0, + 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01B9, 0x01BD, 0x01BD, + 0x01BF, 0x01BF, 0x01C5, 0x01C6, 0x01C8, 0x01C9, 0x01CB, 0x01CC, + 0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2, 0x01D4, 0x01D4, + 0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA, 0x01DC, 0x01DD, + 0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3, 0x01E5, 0x01E5, + 0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB, 0x01ED, 0x01ED, + 0x01EF, 0x01F0, 0x01F2, 0x01F3, 0x01F5, 0x01F5, 0x01F9, 0x01F9, + 0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF, 0x0201, 0x0201, + 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, 0x0209, 0x0209, + 0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F, 0x0211, 0x0211, + 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, 0x0219, 0x0219, + 0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F, 0x0223, 0x0223, + 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229, 0x022B, 0x022B, + 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231, 0x0233, 0x0233, + 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242, 0x0247, 0x0247, + 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D, 0x024F, 0x0254, + 0x0256, 0x0257, 0x0259, 0x0259, 0x025B, 0x025C, 0x0260, 0x0261, + 0x0263, 0x0263, 0x0265, 0x0266, 0x0268, 0x026C, 0x026F, 0x026F, + 0x0271, 0x0272, 0x0275, 0x0275, 0x027D, 0x027D, 0x0280, 0x0280, + 0x0282, 0x0283, 0x0287, 0x028C, 0x0292, 0x0292, 0x029D, 0x029E, + 0x0345, 0x0345, 0x0371, 0x0371, 0x0373, 0x0373, 0x0377, 0x0377, + 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE, 0x03D0, 0x03D1, + 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB, 0x03DD, 0x03DD, + 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3, 0x03E5, 0x03E5, + 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB, 0x03ED, 0x03ED, + 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8, 0x03FB, 0x03FB, + 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465, + 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B, 0x046D, 0x046D, + 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473, 0x0475, 0x0475, + 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B, 0x047D, 0x047D, + 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B, 0x048D, 0x048D, + 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493, 0x0495, 0x0495, + 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B, 0x049D, 0x049D, + 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3, 0x04A5, 0x04A5, + 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB, 0x04AD, 0x04AD, + 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3, 0x04B5, 0x04B5, + 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB, 0x04BD, 0x04BD, + 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4, 0x04C6, 0x04C6, + 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC, 0x04CE, 0x04CF, + 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5, 0x04D7, 0x04D7, + 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD, 0x04DF, 0x04DF, + 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5, 0x04E7, 0x04E7, + 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED, 0x04EF, 0x04EF, + 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5, 0x04F7, 0x04F7, + 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD, 0x04FF, 0x04FF, + 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, 0x0507, 0x0507, + 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D, 0x050F, 0x050F, + 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515, 0x0517, 0x0517, + 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D, 0x051F, 0x051F, + 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525, 0x0527, 0x0527, + 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D, 0x052F, 0x052F, + 0x0561, 0x0587, 0x10D0, 0x10FA, 0x10FD, 0x10FF, 0x13F8, 0x13FD, + 0x1C80, 0x1C88, 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E, + 0x1E01, 0x1E01, 0x1E03, 0x1E03, 0x1E05, 0x1E05, 0x1E07, 0x1E07, + 0x1E09, 0x1E09, 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, 0x1E0F, 0x1E0F, + 0x1E11, 0x1E11, 0x1E13, 0x1E13, 0x1E15, 0x1E15, 0x1E17, 0x1E17, + 0x1E19, 0x1E19, 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D, 0x1E1F, 0x1E1F, + 0x1E21, 0x1E21, 0x1E23, 0x1E23, 0x1E25, 0x1E25, 0x1E27, 0x1E27, + 0x1E29, 0x1E29, 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, 0x1E2F, 0x1E2F, + 0x1E31, 0x1E31, 0x1E33, 0x1E33, 0x1E35, 0x1E35, 0x1E37, 0x1E37, + 0x1E39, 0x1E39, 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, 0x1E3F, 0x1E3F, + 0x1E41, 0x1E41, 0x1E43, 0x1E43, 0x1E45, 0x1E45, 0x1E47, 0x1E47, + 0x1E49, 0x1E49, 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D, 0x1E4F, 0x1E4F, + 0x1E51, 0x1E51, 0x1E53, 0x1E53, 0x1E55, 0x1E55, 0x1E57, 0x1E57, + 0x1E59, 0x1E59, 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, 0x1E5F, 0x1E5F, + 0x1E61, 0x1E61, 0x1E63, 0x1E63, 0x1E65, 0x1E65, 0x1E67, 0x1E67, + 0x1E69, 0x1E69, 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D, 0x1E6F, 0x1E6F, + 0x1E71, 0x1E71, 0x1E73, 0x1E73, 0x1E75, 0x1E75, 0x1E77, 0x1E77, + 0x1E79, 0x1E79, 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, 0x1E7F, 0x1E7F, + 0x1E81, 0x1E81, 0x1E83, 0x1E83, 0x1E85, 0x1E85, 0x1E87, 0x1E87, + 0x1E89, 0x1E89, 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, 0x1E8F, 0x1E8F, + 0x1E91, 0x1E91, 0x1E93, 0x1E93, 0x1E95, 0x1E9B, 0x1EA1, 0x1EA1, + 0x1EA3, 0x1EA3, 0x1EA5, 0x1EA5, 0x1EA7, 0x1EA7, 0x1EA9, 0x1EA9, + 0x1EAB, 0x1EAB, 0x1EAD, 0x1EAD, 0x1EAF, 0x1EAF, 0x1EB1, 0x1EB1, + 0x1EB3, 0x1EB3, 0x1EB5, 0x1EB5, 0x1EB7, 0x1EB7, 0x1EB9, 0x1EB9, + 0x1EBB, 0x1EBB, 0x1EBD, 0x1EBD, 0x1EBF, 0x1EBF, 0x1EC1, 0x1EC1, + 0x1EC3, 0x1EC3, 0x1EC5, 0x1EC5, 0x1EC7, 0x1EC7, 0x1EC9, 0x1EC9, + 0x1ECB, 0x1ECB, 0x1ECD, 0x1ECD, 0x1ECF, 0x1ECF, 0x1ED1, 0x1ED1, + 0x1ED3, 0x1ED3, 0x1ED5, 0x1ED5, 0x1ED7, 0x1ED7, 0x1ED9, 0x1ED9, + 0x1EDB, 0x1EDB, 0x1EDD, 0x1EDD, 0x1EDF, 0x1EDF, 0x1EE1, 0x1EE1, + 0x1EE3, 0x1EE3, 0x1EE5, 0x1EE5, 0x1EE7, 0x1EE7, 0x1EE9, 0x1EE9, + 0x1EEB, 0x1EEB, 0x1EED, 0x1EED, 0x1EEF, 0x1EEF, 0x1EF1, 0x1EF1, + 0x1EF3, 0x1EF3, 0x1EF5, 0x1EF5, 0x1EF7, 0x1EF7, 0x1EF9, 0x1EF9, + 0x1EFB, 0x1EFB, 0x1EFD, 0x1EFD, 0x1EFF, 0x1F07, 0x1F10, 0x1F15, + 0x1F20, 0x1F27, 0x1F30, 0x1F37, 0x1F40, 0x1F45, 0x1F50, 0x1F57, + 0x1F60, 0x1F67, 0x1F70, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FB7, + 0x1FBC, 0x1FBC, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC7, + 0x1FCC, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7, + 0x1FF2, 0x1FF4, 0x1FF6, 0x1FF7, 0x1FFC, 0x1FFC, 0x214E, 0x214E, + 0x2170, 0x217F, 0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F, + 0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A, + 0x2C6C, 0x2C6C, 0x2C73, 0x2C73, 0x2C76, 0x2C76, 0x2C81, 0x2C81, + 0x2C83, 0x2C83, 0x2C85, 0x2C85, 0x2C87, 0x2C87, 0x2C89, 0x2C89, + 0x2C8B, 0x2C8B, 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F, 0x2C91, 0x2C91, + 0x2C93, 0x2C93, 0x2C95, 0x2C95, 0x2C97, 0x2C97, 0x2C99, 0x2C99, + 0x2C9B, 0x2C9B, 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F, 0x2CA1, 0x2CA1, + 0x2CA3, 0x2CA3, 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7, 0x2CA9, 0x2CA9, + 0x2CAB, 0x2CAB, 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF, 0x2CB1, 0x2CB1, + 0x2CB3, 0x2CB3, 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7, 0x2CB9, 0x2CB9, + 0x2CBB, 0x2CBB, 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF, 0x2CC1, 0x2CC1, + 0x2CC3, 0x2CC3, 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7, 0x2CC9, 0x2CC9, + 0x2CCB, 0x2CCB, 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF, 0x2CD1, 0x2CD1, + 0x2CD3, 0x2CD3, 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7, 0x2CD9, 0x2CD9, + 0x2CDB, 0x2CDB, 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF, 0x2CE1, 0x2CE1, + 0x2CE3, 0x2CE3, 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE, 0x2CF3, 0x2CF3, + 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0xA641, 0xA641, + 0xA643, 0xA643, 0xA645, 0xA645, 0xA647, 0xA647, 0xA649, 0xA649, + 0xA64B, 0xA64B, 0xA64D, 0xA64D, 0xA64F, 0xA64F, 0xA651, 0xA651, + 0xA653, 0xA653, 0xA655, 0xA655, 0xA657, 0xA657, 0xA659, 0xA659, + 0xA65B, 0xA65B, 0xA65D, 0xA65D, 0xA65F, 0xA65F, 0xA661, 0xA661, + 0xA663, 0xA663, 0xA665, 0xA665, 0xA667, 0xA667, 0xA669, 0xA669, + 0xA66B, 0xA66B, 0xA66D, 0xA66D, 0xA681, 0xA681, 0xA683, 0xA683, + 0xA685, 0xA685, 0xA687, 0xA687, 0xA689, 0xA689, 0xA68B, 0xA68B, + 0xA68D, 0xA68D, 0xA68F, 0xA68F, 0xA691, 0xA691, 0xA693, 0xA693, + 0xA695, 0xA695, 0xA697, 0xA697, 0xA699, 0xA699, 0xA69B, 0xA69B, + 0xA723, 0xA723, 0xA725, 0xA725, 0xA727, 0xA727, 0xA729, 0xA729, + 0xA72B, 0xA72B, 0xA72D, 0xA72D, 0xA72F, 0xA72F, 0xA733, 0xA733, + 0xA735, 0xA735, 0xA737, 0xA737, 0xA739, 0xA739, 0xA73B, 0xA73B, + 0xA73D, 0xA73D, 0xA73F, 0xA73F, 0xA741, 0xA741, 0xA743, 0xA743, + 0xA745, 0xA745, 0xA747, 0xA747, 0xA749, 0xA749, 0xA74B, 0xA74B, + 0xA74D, 0xA74D, 0xA74F, 0xA74F, 0xA751, 0xA751, 0xA753, 0xA753, + 0xA755, 0xA755, 0xA757, 0xA757, 0xA759, 0xA759, 0xA75B, 0xA75B, + 0xA75D, 0xA75D, 0xA75F, 0xA75F, 0xA761, 0xA761, 0xA763, 0xA763, + 0xA765, 0xA765, 0xA767, 0xA767, 0xA769, 0xA769, 0xA76B, 0xA76B, + 0xA76D, 0xA76D, 0xA76F, 0xA76F, 0xA77A, 0xA77A, 0xA77C, 0xA77C, + 0xA77F, 0xA77F, 0xA781, 0xA781, 0xA783, 0xA783, 0xA785, 0xA785, + 0xA787, 0xA787, 0xA78C, 0xA78C, 0xA791, 0xA791, 0xA793, 0xA794, + 0xA797, 0xA797, 0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D, + 0xA79F, 0xA79F, 0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, + 0xA7A7, 0xA7A7, 0xA7A9, 0xA7A9, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, + 0xA7B9, 0xA7B9, 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF, + 0xA7C1, 0xA7C1, 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA, + 0xA7D1, 0xA7D1, 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6, + 0xAB53, 0xAB53, 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, + 0xFF41, 0xFF5A, 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1, + 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10CC0, 0x10CF2, + 0x118C0, 0x118DF, 0x16E60, 0x16E7F, 0x1E922, 0x1E943, + // #54 (8848+23): bp=Dash + 0x002D, 0x002D, 0x058A, 0x058A, 0x05BE, 0x05BE, 0x1400, 0x1400, + 0x1806, 0x1806, 0x2010, 0x2015, 0x2053, 0x2053, 0x207B, 0x207B, + 0x208B, 0x208B, 0x2212, 0x2212, 0x2E17, 0x2E17, 0x2E1A, 0x2E1A, + 0x2E3A, 0x2E3B, 0x2E40, 0x2E40, 0x2E5D, 0x2E5D, 0x301C, 0x301C, + 0x3030, 0x3030, 0x30A0, 0x30A0, 0xFE31, 0xFE32, 0xFE58, 0xFE58, + 0xFE63, 0xFE63, 0xFF0D, 0xFF0D, 0x10EAD, 0x10EAD, + // #55 (8871+17): bp=Default_Ignorable_Code_Point:DI + 0x00AD, 0x00AD, 0x034F, 0x034F, 0x061C, 0x061C, 0x115F, 0x1160, + 0x17B4, 0x17B5, 0x180B, 0x180F, 0x200B, 0x200F, 0x202A, 0x202E, + 0x2060, 0x206F, 0x3164, 0x3164, 0xFE00, 0xFE0F, 0xFEFF, 0xFEFF, + 0xFFA0, 0xFFA0, 0xFFF0, 0xFFF8, 0x1BCA0, 0x1BCA3, 0x1D173, 0x1D17A, + 0xE0000, 0xE0FFF, + // #56 (8888+8): bp=Deprecated:Dep + 0x0149, 0x0149, 0x0673, 0x0673, 0x0F77, 0x0F77, 0x0F79, 0x0F79, + 0x17A3, 0x17A4, 0x206A, 0x206F, 0x2329, 0x232A, 0xE0001, 0xE0001, + // #57 (8896+192): bp=Diacritic:Dia + 0x005E, 0x005E, 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AF, 0x00AF, + 0x00B4, 0x00B4, 0x00B7, 0x00B8, 0x02B0, 0x034E, 0x0350, 0x0357, + 0x035D, 0x0362, 0x0374, 0x0375, 0x037A, 0x037A, 0x0384, 0x0385, + 0x0483, 0x0487, 0x0559, 0x0559, 0x0591, 0x05A1, 0x05A3, 0x05BD, + 0x05BF, 0x05BF, 0x05C1, 0x05C2, 0x05C4, 0x05C4, 0x064B, 0x0652, + 0x0657, 0x0658, 0x06DF, 0x06E0, 0x06E5, 0x06E6, 0x06EA, 0x06EC, + 0x0730, 0x074A, 0x07A6, 0x07B0, 0x07EB, 0x07F5, 0x0818, 0x0819, + 0x0898, 0x089F, 0x08C9, 0x08D2, 0x08E3, 0x08FE, 0x093C, 0x093C, + 0x094D, 0x094D, 0x0951, 0x0954, 0x0971, 0x0971, 0x09BC, 0x09BC, + 0x09CD, 0x09CD, 0x0A3C, 0x0A3C, 0x0A4D, 0x0A4D, 0x0ABC, 0x0ABC, + 0x0ACD, 0x0ACD, 0x0AFD, 0x0AFF, 0x0B3C, 0x0B3C, 0x0B4D, 0x0B4D, + 0x0B55, 0x0B55, 0x0BCD, 0x0BCD, 0x0C3C, 0x0C3C, 0x0C4D, 0x0C4D, + 0x0CBC, 0x0CBC, 0x0CCD, 0x0CCD, 0x0D3B, 0x0D3C, 0x0D4D, 0x0D4D, + 0x0DCA, 0x0DCA, 0x0E47, 0x0E4C, 0x0E4E, 0x0E4E, 0x0EBA, 0x0EBA, + 0x0EC8, 0x0ECC, 0x0F18, 0x0F19, 0x0F35, 0x0F35, 0x0F37, 0x0F37, + 0x0F39, 0x0F39, 0x0F3E, 0x0F3F, 0x0F82, 0x0F84, 0x0F86, 0x0F87, + 0x0FC6, 0x0FC6, 0x1037, 0x1037, 0x1039, 0x103A, 0x1063, 0x1064, + 0x1069, 0x106D, 0x1087, 0x108D, 0x108F, 0x108F, 0x109A, 0x109B, + 0x135D, 0x135F, 0x1714, 0x1715, 0x17C9, 0x17D3, 0x17DD, 0x17DD, + 0x1939, 0x193B, 0x1A75, 0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ABE, + 0x1AC1, 0x1ACB, 0x1B34, 0x1B34, 0x1B44, 0x1B44, 0x1B6B, 0x1B73, + 0x1BAA, 0x1BAB, 0x1C36, 0x1C37, 0x1C78, 0x1C7D, 0x1CD0, 0x1CE8, + 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF7, 0x1CF9, 0x1D2C, 0x1D6A, + 0x1DC4, 0x1DCF, 0x1DF5, 0x1DFF, 0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1, + 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF, 0x1FED, 0x1FEF, 0x1FFD, 0x1FFE, + 0x2CEF, 0x2CF1, 0x2E2F, 0x2E2F, 0x302A, 0x302F, 0x3099, 0x309C, + 0x30FC, 0x30FC, 0xA66F, 0xA66F, 0xA67C, 0xA67D, 0xA67F, 0xA67F, + 0xA69C, 0xA69D, 0xA6F0, 0xA6F1, 0xA700, 0xA721, 0xA788, 0xA78A, + 0xA7F8, 0xA7F9, 0xA8C4, 0xA8C4, 0xA8E0, 0xA8F1, 0xA92B, 0xA92E, + 0xA953, 0xA953, 0xA9B3, 0xA9B3, 0xA9C0, 0xA9C0, 0xA9E5, 0xA9E5, + 0xAA7B, 0xAA7D, 0xAABF, 0xAAC2, 0xAAF6, 0xAAF6, 0xAB5B, 0xAB5F, + 0xAB69, 0xAB6B, 0xABEC, 0xABED, 0xFB1E, 0xFB1E, 0xFE20, 0xFE2F, + 0xFF3E, 0xFF3E, 0xFF40, 0xFF40, 0xFF70, 0xFF70, 0xFF9E, 0xFF9F, + 0xFFE3, 0xFFE3, 0x102E0, 0x102E0, 0x10780, 0x10785, 0x10787, 0x107B0, + 0x107B2, 0x107BA, 0x10AE5, 0x10AE6, 0x10D22, 0x10D27, 0x10F46, 0x10F50, + 0x10F82, 0x10F85, 0x11046, 0x11046, 0x11070, 0x11070, 0x110B9, 0x110BA, + 0x11133, 0x11134, 0x11173, 0x11173, 0x111C0, 0x111C0, 0x111CA, 0x111CC, + 0x11235, 0x11236, 0x112E9, 0x112EA, 0x1133C, 0x1133C, 0x1134D, 0x1134D, + 0x11366, 0x1136C, 0x11370, 0x11374, 0x11442, 0x11442, 0x11446, 0x11446, + 0x114C2, 0x114C3, 0x115BF, 0x115C0, 0x1163F, 0x1163F, 0x116B6, 0x116B7, + 0x1172B, 0x1172B, 0x11839, 0x1183A, 0x1193D, 0x1193E, 0x11943, 0x11943, + 0x119E0, 0x119E0, 0x11A34, 0x11A34, 0x11A47, 0x11A47, 0x11A99, 0x11A99, + 0x11C3F, 0x11C3F, 0x11D42, 0x11D42, 0x11D44, 0x11D45, 0x11D97, 0x11D97, + 0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16F8F, 0x16F9F, 0x16FF0, 0x16FF1, + 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1CF00, 0x1CF2D, + 0x1CF30, 0x1CF46, 0x1D167, 0x1D169, 0x1D16D, 0x1D172, 0x1D17B, 0x1D182, + 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1E130, 0x1E136, 0x1E2AE, 0x1E2AE, + 0x1E2EC, 0x1E2EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E946, 0x1E948, 0x1E94A, + // #58 (9088+153): bp=Emoji + 0x0023, 0x0023, 0x002A, 0x002A, 0x0030, 0x0039, 0x00A9, 0x00A9, + 0x00AE, 0x00AE, 0x203C, 0x203C, 0x2049, 0x2049, 0x2122, 0x2122, + 0x2139, 0x2139, 0x2194, 0x2199, 0x21A9, 0x21AA, 0x231A, 0x231B, + 0x2328, 0x2328, 0x23CF, 0x23CF, 0x23E9, 0x23F3, 0x23F8, 0x23FA, + 0x24C2, 0x24C2, 0x25AA, 0x25AB, 0x25B6, 0x25B6, 0x25C0, 0x25C0, + 0x25FB, 0x25FE, 0x2600, 0x2604, 0x260E, 0x260E, 0x2611, 0x2611, + 0x2614, 0x2615, 0x2618, 0x2618, 0x261D, 0x261D, 0x2620, 0x2620, + 0x2622, 0x2623, 0x2626, 0x2626, 0x262A, 0x262A, 0x262E, 0x262F, + 0x2638, 0x263A, 0x2640, 0x2640, 0x2642, 0x2642, 0x2648, 0x2653, + 0x265F, 0x2660, 0x2663, 0x2663, 0x2665, 0x2666, 0x2668, 0x2668, + 0x267B, 0x267B, 0x267E, 0x267F, 0x2692, 0x2697, 0x2699, 0x2699, + 0x269B, 0x269C, 0x26A0, 0x26A1, 0x26A7, 0x26A7, 0x26AA, 0x26AB, + 0x26B0, 0x26B1, 0x26BD, 0x26BE, 0x26C4, 0x26C5, 0x26C8, 0x26C8, + 0x26CE, 0x26CF, 0x26D1, 0x26D1, 0x26D3, 0x26D4, 0x26E9, 0x26EA, + 0x26F0, 0x26F5, 0x26F7, 0x26FA, 0x26FD, 0x26FD, 0x2702, 0x2702, + 0x2705, 0x2705, 0x2708, 0x270D, 0x270F, 0x270F, 0x2712, 0x2712, + 0x2714, 0x2714, 0x2716, 0x2716, 0x271D, 0x271D, 0x2721, 0x2721, + 0x2728, 0x2728, 0x2733, 0x2734, 0x2744, 0x2744, 0x2747, 0x2747, + 0x274C, 0x274C, 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757, + 0x2763, 0x2764, 0x2795, 0x2797, 0x27A1, 0x27A1, 0x27B0, 0x27B0, + 0x27BF, 0x27BF, 0x2934, 0x2935, 0x2B05, 0x2B07, 0x2B1B, 0x2B1C, + 0x2B50, 0x2B50, 0x2B55, 0x2B55, 0x3030, 0x3030, 0x303D, 0x303D, + 0x3297, 0x3297, 0x3299, 0x3299, 0x1F004, 0x1F004, 0x1F0CF, 0x1F0CF, + 0x1F170, 0x1F171, 0x1F17E, 0x1F17F, 0x1F18E, 0x1F18E, 0x1F191, 0x1F19A, + 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F202, 0x1F21A, 0x1F21A, 0x1F22F, 0x1F22F, + 0x1F232, 0x1F23A, 0x1F250, 0x1F251, 0x1F300, 0x1F321, 0x1F324, 0x1F393, + 0x1F396, 0x1F397, 0x1F399, 0x1F39B, 0x1F39E, 0x1F3F0, 0x1F3F3, 0x1F3F5, + 0x1F3F7, 0x1F4FD, 0x1F4FF, 0x1F53D, 0x1F549, 0x1F54E, 0x1F550, 0x1F567, + 0x1F56F, 0x1F570, 0x1F573, 0x1F57A, 0x1F587, 0x1F587, 0x1F58A, 0x1F58D, + 0x1F590, 0x1F590, 0x1F595, 0x1F596, 0x1F5A4, 0x1F5A5, 0x1F5A8, 0x1F5A8, + 0x1F5B1, 0x1F5B2, 0x1F5BC, 0x1F5BC, 0x1F5C2, 0x1F5C4, 0x1F5D1, 0x1F5D3, + 0x1F5DC, 0x1F5DE, 0x1F5E1, 0x1F5E1, 0x1F5E3, 0x1F5E3, 0x1F5E8, 0x1F5E8, + 0x1F5EF, 0x1F5EF, 0x1F5F3, 0x1F5F3, 0x1F5FA, 0x1F64F, 0x1F680, 0x1F6C5, + 0x1F6CB, 0x1F6D2, 0x1F6D5, 0x1F6D7, 0x1F6DD, 0x1F6E5, 0x1F6E9, 0x1F6E9, + 0x1F6EB, 0x1F6EC, 0x1F6F0, 0x1F6F0, 0x1F6F3, 0x1F6FC, 0x1F7E0, 0x1F7EB, + 0x1F7F0, 0x1F7F0, 0x1F90C, 0x1F93A, 0x1F93C, 0x1F945, 0x1F947, 0x1F9FF, + 0x1FA70, 0x1FA74, 0x1FA78, 0x1FA7C, 0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC, + 0x1FAB0, 0x1FABA, 0x1FAC0, 0x1FAC5, 0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7, + 0x1FAF0, 0x1FAF6, + // #59 (9241+10): bp=Emoji_Component:EComp + 0x0023, 0x0023, 0x002A, 0x002A, 0x0030, 0x0039, 0x200D, 0x200D, + 0x20E3, 0x20E3, 0xFE0F, 0xFE0F, 0x1F1E6, 0x1F1FF, 0x1F3FB, 0x1F3FF, + 0x1F9B0, 0x1F9B3, 0xE0020, 0xE007F, + // #60 (9251+1): bp=Emoji_Modifier:EMod + 0x1F3FB, 0x1F3FF, + // #61 (9252+40): bp=Emoji_Modifier_Base:EBase + 0x261D, 0x261D, 0x26F9, 0x26F9, 0x270A, 0x270D, 0x1F385, 0x1F385, + 0x1F3C2, 0x1F3C4, 0x1F3C7, 0x1F3C7, 0x1F3CA, 0x1F3CC, 0x1F442, 0x1F443, + 0x1F446, 0x1F450, 0x1F466, 0x1F478, 0x1F47C, 0x1F47C, 0x1F481, 0x1F483, + 0x1F485, 0x1F487, 0x1F48F, 0x1F48F, 0x1F491, 0x1F491, 0x1F4AA, 0x1F4AA, + 0x1F574, 0x1F575, 0x1F57A, 0x1F57A, 0x1F590, 0x1F590, 0x1F595, 0x1F596, + 0x1F645, 0x1F647, 0x1F64B, 0x1F64F, 0x1F6A3, 0x1F6A3, 0x1F6B4, 0x1F6B6, + 0x1F6C0, 0x1F6C0, 0x1F6CC, 0x1F6CC, 0x1F90C, 0x1F90C, 0x1F90F, 0x1F90F, + 0x1F918, 0x1F91F, 0x1F926, 0x1F926, 0x1F930, 0x1F939, 0x1F93C, 0x1F93E, + 0x1F977, 0x1F977, 0x1F9B5, 0x1F9B6, 0x1F9B8, 0x1F9B9, 0x1F9BB, 0x1F9BB, + 0x1F9CD, 0x1F9CF, 0x1F9D1, 0x1F9DD, 0x1FAC3, 0x1FAC5, 0x1FAF0, 0x1FAF6, + // #62 (9292+83): bp=Emoji_Presentation:EPres + 0x231A, 0x231B, 0x23E9, 0x23EC, 0x23F0, 0x23F0, 0x23F3, 0x23F3, + 0x25FD, 0x25FE, 0x2614, 0x2615, 0x2648, 0x2653, 0x267F, 0x267F, + 0x2693, 0x2693, 0x26A1, 0x26A1, 0x26AA, 0x26AB, 0x26BD, 0x26BE, + 0x26C4, 0x26C5, 0x26CE, 0x26CE, 0x26D4, 0x26D4, 0x26EA, 0x26EA, + 0x26F2, 0x26F3, 0x26F5, 0x26F5, 0x26FA, 0x26FA, 0x26FD, 0x26FD, + 0x2705, 0x2705, 0x270A, 0x270B, 0x2728, 0x2728, 0x274C, 0x274C, + 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757, 0x2795, 0x2797, + 0x27B0, 0x27B0, 0x27BF, 0x27BF, 0x2B1B, 0x2B1C, 0x2B50, 0x2B50, + 0x2B55, 0x2B55, 0x1F004, 0x1F004, 0x1F0CF, 0x1F0CF, 0x1F18E, 0x1F18E, + 0x1F191, 0x1F19A, 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F201, 0x1F21A, 0x1F21A, + 0x1F22F, 0x1F22F, 0x1F232, 0x1F236, 0x1F238, 0x1F23A, 0x1F250, 0x1F251, + 0x1F300, 0x1F320, 0x1F32D, 0x1F335, 0x1F337, 0x1F37C, 0x1F37E, 0x1F393, + 0x1F3A0, 0x1F3CA, 0x1F3CF, 0x1F3D3, 0x1F3E0, 0x1F3F0, 0x1F3F4, 0x1F3F4, + 0x1F3F8, 0x1F43E, 0x1F440, 0x1F440, 0x1F442, 0x1F4FC, 0x1F4FF, 0x1F53D, + 0x1F54B, 0x1F54E, 0x1F550, 0x1F567, 0x1F57A, 0x1F57A, 0x1F595, 0x1F596, + 0x1F5A4, 0x1F5A4, 0x1F5FB, 0x1F64F, 0x1F680, 0x1F6C5, 0x1F6CC, 0x1F6CC, + 0x1F6D0, 0x1F6D2, 0x1F6D5, 0x1F6D7, 0x1F6DD, 0x1F6DF, 0x1F6EB, 0x1F6EC, + 0x1F6F4, 0x1F6FC, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, 0x1F90C, 0x1F93A, + 0x1F93C, 0x1F945, 0x1F947, 0x1F9FF, 0x1FA70, 0x1FA74, 0x1FA78, 0x1FA7C, + 0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC, 0x1FAB0, 0x1FABA, 0x1FAC0, 0x1FAC5, + 0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7, 0x1FAF0, 0x1FAF6, + // #63 (9375+78): bp=Extended_Pictographic:ExtPict + 0x00A9, 0x00A9, 0x00AE, 0x00AE, 0x203C, 0x203C, 0x2049, 0x2049, + 0x2122, 0x2122, 0x2139, 0x2139, 0x2194, 0x2199, 0x21A9, 0x21AA, + 0x231A, 0x231B, 0x2328, 0x2328, 0x2388, 0x2388, 0x23CF, 0x23CF, + 0x23E9, 0x23F3, 0x23F8, 0x23FA, 0x24C2, 0x24C2, 0x25AA, 0x25AB, + 0x25B6, 0x25B6, 0x25C0, 0x25C0, 0x25FB, 0x25FE, 0x2600, 0x2605, + 0x2607, 0x2612, 0x2614, 0x2685, 0x2690, 0x2705, 0x2708, 0x2712, + 0x2714, 0x2714, 0x2716, 0x2716, 0x271D, 0x271D, 0x2721, 0x2721, + 0x2728, 0x2728, 0x2733, 0x2734, 0x2744, 0x2744, 0x2747, 0x2747, + 0x274C, 0x274C, 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757, + 0x2763, 0x2767, 0x2795, 0x2797, 0x27A1, 0x27A1, 0x27B0, 0x27B0, + 0x27BF, 0x27BF, 0x2934, 0x2935, 0x2B05, 0x2B07, 0x2B1B, 0x2B1C, + 0x2B50, 0x2B50, 0x2B55, 0x2B55, 0x3030, 0x3030, 0x303D, 0x303D, + 0x3297, 0x3297, 0x3299, 0x3299, 0x1F000, 0x1F0FF, 0x1F10D, 0x1F10F, + 0x1F12F, 0x1F12F, 0x1F16C, 0x1F171, 0x1F17E, 0x1F17F, 0x1F18E, 0x1F18E, + 0x1F191, 0x1F19A, 0x1F1AD, 0x1F1E5, 0x1F201, 0x1F20F, 0x1F21A, 0x1F21A, + 0x1F22F, 0x1F22F, 0x1F232, 0x1F23A, 0x1F23C, 0x1F23F, 0x1F249, 0x1F3FA, + 0x1F400, 0x1F53D, 0x1F546, 0x1F64F, 0x1F680, 0x1F6FF, 0x1F774, 0x1F77F, + 0x1F7D5, 0x1F7FF, 0x1F80C, 0x1F80F, 0x1F848, 0x1F84F, 0x1F85A, 0x1F85F, + 0x1F888, 0x1F88F, 0x1F8AE, 0x1F8FF, 0x1F90C, 0x1F93A, 0x1F93C, 0x1F945, + 0x1F947, 0x1FAFF, 0x1FC00, 0x1FFFD, + // #64 (9453+33): bp=Extender:Ext + 0x00B7, 0x00B7, 0x02D0, 0x02D1, 0x0640, 0x0640, 0x07FA, 0x07FA, + 0x0B55, 0x0B55, 0x0E46, 0x0E46, 0x0EC6, 0x0EC6, 0x180A, 0x180A, + 0x1843, 0x1843, 0x1AA7, 0x1AA7, 0x1C36, 0x1C36, 0x1C7B, 0x1C7B, + 0x3005, 0x3005, 0x3031, 0x3035, 0x309D, 0x309E, 0x30FC, 0x30FE, + 0xA015, 0xA015, 0xA60C, 0xA60C, 0xA9CF, 0xA9CF, 0xA9E6, 0xA9E6, + 0xAA70, 0xAA70, 0xAADD, 0xAADD, 0xAAF3, 0xAAF4, 0xFF70, 0xFF70, + 0x10781, 0x10782, 0x1135D, 0x1135D, 0x115C6, 0x115C8, 0x11A98, 0x11A98, + 0x16B42, 0x16B43, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, 0x1E13C, 0x1E13D, + 0x1E944, 0x1E946, + // #65 (9486+861): bp=Grapheme_Base:Gr_Base + 0x0020, 0x007E, 0x00A0, 0x00AC, 0x00AE, 0x02FF, 0x0370, 0x0377, + 0x037A, 0x037F, 0x0384, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1, + 0x03A3, 0x0482, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x058A, + 0x058D, 0x058F, 0x05BE, 0x05BE, 0x05C0, 0x05C0, 0x05C3, 0x05C3, + 0x05C6, 0x05C6, 0x05D0, 0x05EA, 0x05EF, 0x05F4, 0x0606, 0x060F, + 0x061B, 0x061B, 0x061D, 0x064A, 0x0660, 0x066F, 0x0671, 0x06D5, + 0x06DE, 0x06DE, 0x06E5, 0x06E6, 0x06E9, 0x06E9, 0x06EE, 0x070D, + 0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1, + 0x07C0, 0x07EA, 0x07F4, 0x07FA, 0x07FE, 0x0815, 0x081A, 0x081A, + 0x0824, 0x0824, 0x0828, 0x0828, 0x0830, 0x083E, 0x0840, 0x0858, + 0x085E, 0x085E, 0x0860, 0x086A, 0x0870, 0x088E, 0x08A0, 0x08C9, + 0x0903, 0x0939, 0x093B, 0x093B, 0x093D, 0x0940, 0x0949, 0x094C, + 0x094E, 0x0950, 0x0958, 0x0961, 0x0964, 0x0980, 0x0982, 0x0983, + 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, + 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD, 0x09BF, 0x09C0, + 0x09C7, 0x09C8, 0x09CB, 0x09CC, 0x09CE, 0x09CE, 0x09DC, 0x09DD, + 0x09DF, 0x09E1, 0x09E6, 0x09FD, 0x0A03, 0x0A03, 0x0A05, 0x0A0A, + 0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, + 0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A3E, 0x0A40, 0x0A59, 0x0A5C, + 0x0A5E, 0x0A5E, 0x0A66, 0x0A6F, 0x0A72, 0x0A74, 0x0A76, 0x0A76, + 0x0A83, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, + 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC0, + 0x0AC9, 0x0AC9, 0x0ACB, 0x0ACC, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1, + 0x0AE6, 0x0AF1, 0x0AF9, 0x0AF9, 0x0B02, 0x0B03, 0x0B05, 0x0B0C, + 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, + 0x0B35, 0x0B39, 0x0B3D, 0x0B3D, 0x0B40, 0x0B40, 0x0B47, 0x0B48, + 0x0B4B, 0x0B4C, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B66, 0x0B77, + 0x0B83, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, + 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, + 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBF, 0x0BBF, 0x0BC1, 0x0BC2, + 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC, 0x0BD0, 0x0BD0, 0x0BE6, 0x0BFA, + 0x0C01, 0x0C03, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, + 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C41, 0x0C44, 0x0C58, 0x0C5A, + 0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C66, 0x0C6F, 0x0C77, 0x0C80, + 0x0C82, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, + 0x0CB5, 0x0CB9, 0x0CBD, 0x0CBE, 0x0CC0, 0x0CC1, 0x0CC3, 0x0CC4, + 0x0CC7, 0x0CC8, 0x0CCA, 0x0CCB, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1, + 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x0D02, 0x0D0C, 0x0D0E, 0x0D10, + 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, 0x0D3F, 0x0D40, 0x0D46, 0x0D48, + 0x0D4A, 0x0D4C, 0x0D4E, 0x0D4F, 0x0D54, 0x0D56, 0x0D58, 0x0D61, + 0x0D66, 0x0D7F, 0x0D82, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, + 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DD0, 0x0DD1, + 0x0DD8, 0x0DDE, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF4, 0x0E01, 0x0E30, + 0x0E32, 0x0E33, 0x0E3F, 0x0E46, 0x0E4F, 0x0E5B, 0x0E81, 0x0E82, + 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, + 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD, 0x0EC0, 0x0EC4, + 0x0EC6, 0x0EC6, 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F17, + 0x0F1A, 0x0F34, 0x0F36, 0x0F36, 0x0F38, 0x0F38, 0x0F3A, 0x0F47, + 0x0F49, 0x0F6C, 0x0F7F, 0x0F7F, 0x0F85, 0x0F85, 0x0F88, 0x0F8C, + 0x0FBE, 0x0FC5, 0x0FC7, 0x0FCC, 0x0FCE, 0x0FDA, 0x1000, 0x102C, + 0x1031, 0x1031, 0x1038, 0x1038, 0x103B, 0x103C, 0x103F, 0x1057, + 0x105A, 0x105D, 0x1061, 0x1070, 0x1075, 0x1081, 0x1083, 0x1084, + 0x1087, 0x108C, 0x108E, 0x109C, 0x109E, 0x10C5, 0x10C7, 0x10C7, + 0x10CD, 0x10CD, 0x10D0, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, + 0x1258, 0x1258, 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, + 0x1290, 0x12B0, 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, + 0x12C2, 0x12C5, 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, + 0x1318, 0x135A, 0x1360, 0x137C, 0x1380, 0x1399, 0x13A0, 0x13F5, + 0x13F8, 0x13FD, 0x1400, 0x169C, 0x16A0, 0x16F8, 0x1700, 0x1711, + 0x1715, 0x1715, 0x171F, 0x1731, 0x1734, 0x1736, 0x1740, 0x1751, + 0x1760, 0x176C, 0x176E, 0x1770, 0x1780, 0x17B3, 0x17B6, 0x17B6, + 0x17BE, 0x17C5, 0x17C7, 0x17C8, 0x17D4, 0x17DC, 0x17E0, 0x17E9, + 0x17F0, 0x17F9, 0x1800, 0x180A, 0x1810, 0x1819, 0x1820, 0x1878, + 0x1880, 0x1884, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5, + 0x1900, 0x191E, 0x1923, 0x1926, 0x1929, 0x192B, 0x1930, 0x1931, + 0x1933, 0x1938, 0x1940, 0x1940, 0x1944, 0x196D, 0x1970, 0x1974, + 0x1980, 0x19AB, 0x19B0, 0x19C9, 0x19D0, 0x19DA, 0x19DE, 0x1A16, + 0x1A19, 0x1A1A, 0x1A1E, 0x1A55, 0x1A57, 0x1A57, 0x1A61, 0x1A61, + 0x1A63, 0x1A64, 0x1A6D, 0x1A72, 0x1A80, 0x1A89, 0x1A90, 0x1A99, + 0x1AA0, 0x1AAD, 0x1B04, 0x1B33, 0x1B3B, 0x1B3B, 0x1B3D, 0x1B41, + 0x1B43, 0x1B4C, 0x1B50, 0x1B6A, 0x1B74, 0x1B7E, 0x1B82, 0x1BA1, + 0x1BA6, 0x1BA7, 0x1BAA, 0x1BAA, 0x1BAE, 0x1BE5, 0x1BE7, 0x1BE7, + 0x1BEA, 0x1BEC, 0x1BEE, 0x1BEE, 0x1BF2, 0x1BF3, 0x1BFC, 0x1C2B, + 0x1C34, 0x1C35, 0x1C3B, 0x1C49, 0x1C4D, 0x1C88, 0x1C90, 0x1CBA, + 0x1CBD, 0x1CC7, 0x1CD3, 0x1CD3, 0x1CE1, 0x1CE1, 0x1CE9, 0x1CEC, + 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF7, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF, + 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, + 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, + 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, 0x1FC6, 0x1FD3, + 0x1FD6, 0x1FDB, 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFE, + 0x2000, 0x200A, 0x2010, 0x2027, 0x202F, 0x205F, 0x2070, 0x2071, + 0x2074, 0x208E, 0x2090, 0x209C, 0x20A0, 0x20C0, 0x2100, 0x218B, + 0x2190, 0x2426, 0x2440, 0x244A, 0x2460, 0x2B73, 0x2B76, 0x2B95, + 0x2B97, 0x2CEE, 0x2CF2, 0x2CF3, 0x2CF9, 0x2D25, 0x2D27, 0x2D27, + 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D70, 0x2D80, 0x2D96, + 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, + 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, + 0x2E00, 0x2E5D, 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, + 0x2FF0, 0x2FFB, 0x3000, 0x3029, 0x3030, 0x303F, 0x3041, 0x3096, + 0x309B, 0x30FF, 0x3105, 0x312F, 0x3131, 0x318E, 0x3190, 0x31E3, + 0x31F0, 0x321E, 0x3220, 0xA48C, 0xA490, 0xA4C6, 0xA4D0, 0xA62B, + 0xA640, 0xA66E, 0xA673, 0xA673, 0xA67E, 0xA69D, 0xA6A0, 0xA6EF, + 0xA6F2, 0xA6F7, 0xA700, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, + 0xA7D5, 0xA7D9, 0xA7F2, 0xA801, 0xA803, 0xA805, 0xA807, 0xA80A, + 0xA80C, 0xA824, 0xA827, 0xA82B, 0xA830, 0xA839, 0xA840, 0xA877, + 0xA880, 0xA8C3, 0xA8CE, 0xA8D9, 0xA8F2, 0xA8FE, 0xA900, 0xA925, + 0xA92E, 0xA946, 0xA952, 0xA953, 0xA95F, 0xA97C, 0xA983, 0xA9B2, + 0xA9B4, 0xA9B5, 0xA9BA, 0xA9BB, 0xA9BE, 0xA9CD, 0xA9CF, 0xA9D9, + 0xA9DE, 0xA9E4, 0xA9E6, 0xA9FE, 0xAA00, 0xAA28, 0xAA2F, 0xAA30, + 0xAA33, 0xAA34, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA4D, 0xAA4D, + 0xAA50, 0xAA59, 0xAA5C, 0xAA7B, 0xAA7D, 0xAAAF, 0xAAB1, 0xAAB1, + 0xAAB5, 0xAAB6, 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, + 0xAADB, 0xAAEB, 0xAAEE, 0xAAF5, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, + 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB6B, + 0xAB70, 0xABE4, 0xABE6, 0xABE7, 0xABE9, 0xABEC, 0xABF0, 0xABF9, + 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, + 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB1D, + 0xFB1F, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, + 0xFB43, 0xFB44, 0xFB46, 0xFBC2, 0xFBD3, 0xFD8F, 0xFD92, 0xFDC7, + 0xFDCF, 0xFDCF, 0xFDF0, 0xFDFF, 0xFE10, 0xFE19, 0xFE30, 0xFE52, + 0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, + 0xFF01, 0xFF9D, 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, + 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, + 0xFFFC, 0xFFFD, 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, + 0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, + 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1018E, 0x10190, 0x1019C, + 0x101A0, 0x101A0, 0x101D0, 0x101FC, 0x10280, 0x1029C, 0x102A0, 0x102D0, + 0x102E1, 0x102FB, 0x10300, 0x10323, 0x1032D, 0x1034A, 0x10350, 0x10375, + 0x10380, 0x1039D, 0x1039F, 0x103C3, 0x103C8, 0x103D5, 0x10400, 0x1049D, + 0x104A0, 0x104A9, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527, + 0x10530, 0x10563, 0x1056F, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, + 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, + 0x105BB, 0x105BC, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, + 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805, + 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, + 0x1083F, 0x10855, 0x10857, 0x1089E, 0x108A7, 0x108AF, 0x108E0, 0x108F2, + 0x108F4, 0x108F5, 0x108FB, 0x1091B, 0x1091F, 0x10939, 0x1093F, 0x1093F, + 0x10980, 0x109B7, 0x109BC, 0x109CF, 0x109D2, 0x10A00, 0x10A10, 0x10A13, + 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A40, 0x10A48, 0x10A50, 0x10A58, + 0x10A60, 0x10A9F, 0x10AC0, 0x10AE4, 0x10AEB, 0x10AF6, 0x10B00, 0x10B35, + 0x10B39, 0x10B55, 0x10B58, 0x10B72, 0x10B78, 0x10B91, 0x10B99, 0x10B9C, + 0x10BA9, 0x10BAF, 0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, + 0x10CFA, 0x10D23, 0x10D30, 0x10D39, 0x10E60, 0x10E7E, 0x10E80, 0x10EA9, + 0x10EAD, 0x10EAD, 0x10EB0, 0x10EB1, 0x10F00, 0x10F27, 0x10F30, 0x10F45, + 0x10F51, 0x10F59, 0x10F70, 0x10F81, 0x10F86, 0x10F89, 0x10FB0, 0x10FCB, + 0x10FE0, 0x10FF6, 0x11000, 0x11000, 0x11002, 0x11037, 0x11047, 0x1104D, + 0x11052, 0x1106F, 0x11071, 0x11072, 0x11075, 0x11075, 0x11082, 0x110B2, + 0x110B7, 0x110B8, 0x110BB, 0x110BC, 0x110BE, 0x110C1, 0x110D0, 0x110E8, + 0x110F0, 0x110F9, 0x11103, 0x11126, 0x1112C, 0x1112C, 0x11136, 0x11147, + 0x11150, 0x11172, 0x11174, 0x11176, 0x11182, 0x111B5, 0x111BF, 0x111C8, + 0x111CD, 0x111CE, 0x111D0, 0x111DF, 0x111E1, 0x111F4, 0x11200, 0x11211, + 0x11213, 0x1122E, 0x11232, 0x11233, 0x11235, 0x11235, 0x11238, 0x1123D, + 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, + 0x1129F, 0x112A9, 0x112B0, 0x112DE, 0x112E0, 0x112E2, 0x112F0, 0x112F9, + 0x11302, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, + 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133D, 0x1133D, + 0x1133F, 0x1133F, 0x11341, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D, + 0x11350, 0x11350, 0x1135D, 0x11363, 0x11400, 0x11437, 0x11440, 0x11441, + 0x11445, 0x11445, 0x11447, 0x1145B, 0x1145D, 0x1145D, 0x1145F, 0x11461, + 0x11480, 0x114AF, 0x114B1, 0x114B2, 0x114B9, 0x114B9, 0x114BB, 0x114BC, + 0x114BE, 0x114BE, 0x114C1, 0x114C1, 0x114C4, 0x114C7, 0x114D0, 0x114D9, + 0x11580, 0x115AE, 0x115B0, 0x115B1, 0x115B8, 0x115BB, 0x115BE, 0x115BE, + 0x115C1, 0x115DB, 0x11600, 0x11632, 0x1163B, 0x1163C, 0x1163E, 0x1163E, + 0x11641, 0x11644, 0x11650, 0x11659, 0x11660, 0x1166C, 0x11680, 0x116AA, + 0x116AC, 0x116AC, 0x116AE, 0x116AF, 0x116B6, 0x116B6, 0x116B8, 0x116B9, + 0x116C0, 0x116C9, 0x11700, 0x1171A, 0x11720, 0x11721, 0x11726, 0x11726, + 0x11730, 0x11746, 0x11800, 0x1182E, 0x11838, 0x11838, 0x1183B, 0x1183B, + 0x118A0, 0x118F2, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, + 0x11915, 0x11916, 0x11918, 0x1192F, 0x11931, 0x11935, 0x11937, 0x11938, + 0x1193D, 0x1193D, 0x1193F, 0x11942, 0x11944, 0x11946, 0x11950, 0x11959, + 0x119A0, 0x119A7, 0x119AA, 0x119D3, 0x119DC, 0x119DF, 0x119E1, 0x119E4, + 0x11A00, 0x11A00, 0x11A0B, 0x11A32, 0x11A39, 0x11A3A, 0x11A3F, 0x11A46, + 0x11A50, 0x11A50, 0x11A57, 0x11A58, 0x11A5C, 0x11A89, 0x11A97, 0x11A97, + 0x11A9A, 0x11AA2, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C2F, + 0x11C3E, 0x11C3E, 0x11C40, 0x11C45, 0x11C50, 0x11C6C, 0x11C70, 0x11C8F, + 0x11CA9, 0x11CA9, 0x11CB1, 0x11CB1, 0x11CB4, 0x11CB4, 0x11D00, 0x11D06, + 0x11D08, 0x11D09, 0x11D0B, 0x11D30, 0x11D46, 0x11D46, 0x11D50, 0x11D59, + 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D93, 0x11D94, + 0x11D96, 0x11D96, 0x11D98, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 0x11EF2, + 0x11EF5, 0x11EF8, 0x11FB0, 0x11FB0, 0x11FC0, 0x11FF1, 0x11FFF, 0x12399, + 0x12400, 0x1246E, 0x12470, 0x12474, 0x12480, 0x12543, 0x12F90, 0x12FF2, + 0x13000, 0x1342E, 0x14400, 0x14646, 0x16800, 0x16A38, 0x16A40, 0x16A5E, + 0x16A60, 0x16A69, 0x16A6E, 0x16ABE, 0x16AC0, 0x16AC9, 0x16AD0, 0x16AED, + 0x16AF5, 0x16AF5, 0x16B00, 0x16B2F, 0x16B37, 0x16B45, 0x16B50, 0x16B59, + 0x16B5B, 0x16B61, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E9A, + 0x16F00, 0x16F4A, 0x16F50, 0x16F87, 0x16F93, 0x16F9F, 0x16FE0, 0x16FE3, + 0x16FF0, 0x16FF1, 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, + 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, + 0x1B150, 0x1B152, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, + 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1BC9C, 0x1BC9C, + 0x1BC9F, 0x1BC9F, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, 0x1D100, 0x1D126, + 0x1D129, 0x1D164, 0x1D166, 0x1D166, 0x1D16A, 0x1D16D, 0x1D183, 0x1D184, + 0x1D18C, 0x1D1A9, 0x1D1AE, 0x1D1EA, 0x1D200, 0x1D241, 0x1D245, 0x1D245, + 0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356, 0x1D360, 0x1D378, 0x1D400, 0x1D454, + 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, + 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, + 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, + 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546, + 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D9FF, + 0x1DA37, 0x1DA3A, 0x1DA6D, 0x1DA74, 0x1DA76, 0x1DA83, 0x1DA85, 0x1DA8B, + 0x1DF00, 0x1DF1E, 0x1E100, 0x1E12C, 0x1E137, 0x1E13D, 0x1E140, 0x1E149, + 0x1E14E, 0x1E14F, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, 0x1E2F0, 0x1E2F9, + 0x1E2FF, 0x1E2FF, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, + 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E8C7, 0x1E8CF, 0x1E900, 0x1E943, + 0x1E94B, 0x1E94B, 0x1E950, 0x1E959, 0x1E95E, 0x1E95F, 0x1EC71, 0x1ECB4, + 0x1ED01, 0x1ED3D, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, + 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, + 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, + 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, + 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, + 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, + 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, + 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, + 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1EEF0, 0x1EEF1, 0x1F000, 0x1F02B, + 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF, 0x1F0C1, 0x1F0CF, + 0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD, 0x1F1E6, 0x1F202, 0x1F210, 0x1F23B, + 0x1F240, 0x1F248, 0x1F250, 0x1F251, 0x1F260, 0x1F265, 0x1F300, 0x1F6D7, + 0x1F6DD, 0x1F6EC, 0x1F6F0, 0x1F6FC, 0x1F700, 0x1F773, 0x1F780, 0x1F7D8, + 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, 0x1F800, 0x1F80B, 0x1F810, 0x1F847, + 0x1F850, 0x1F859, 0x1F860, 0x1F887, 0x1F890, 0x1F8AD, 0x1F8B0, 0x1F8B1, + 0x1F900, 0x1FA53, 0x1FA60, 0x1FA6D, 0x1FA70, 0x1FA74, 0x1FA78, 0x1FA7C, + 0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC, 0x1FAB0, 0x1FABA, 0x1FAC0, 0x1FAC5, + 0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7, 0x1FAF0, 0x1FAF6, 0x1FB00, 0x1FB92, + 0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, + 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, + 0x30000, 0x3134A, + // #66 (10347+353): bp=Grapheme_Extend:Gr_Ext + 0x0300, 0x036F, 0x0483, 0x0489, 0x0591, 0x05BD, 0x05BF, 0x05BF, + 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x0610, 0x061A, + 0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DC, 0x06DF, 0x06E4, + 0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0711, 0x0711, 0x0730, 0x074A, + 0x07A6, 0x07B0, 0x07EB, 0x07F3, 0x07FD, 0x07FD, 0x0816, 0x0819, + 0x081B, 0x0823, 0x0825, 0x0827, 0x0829, 0x082D, 0x0859, 0x085B, + 0x0898, 0x089F, 0x08CA, 0x08E1, 0x08E3, 0x0902, 0x093A, 0x093A, + 0x093C, 0x093C, 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957, + 0x0962, 0x0963, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09BE, 0x09BE, + 0x09C1, 0x09C4, 0x09CD, 0x09CD, 0x09D7, 0x09D7, 0x09E2, 0x09E3, + 0x09FE, 0x09FE, 0x0A01, 0x0A02, 0x0A3C, 0x0A3C, 0x0A41, 0x0A42, + 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, 0x0A51, 0x0A51, 0x0A70, 0x0A71, + 0x0A75, 0x0A75, 0x0A81, 0x0A82, 0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5, + 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD, 0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF, + 0x0B01, 0x0B01, 0x0B3C, 0x0B3C, 0x0B3E, 0x0B3F, 0x0B41, 0x0B44, + 0x0B4D, 0x0B4D, 0x0B55, 0x0B57, 0x0B62, 0x0B63, 0x0B82, 0x0B82, + 0x0BBE, 0x0BBE, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD, 0x0BD7, 0x0BD7, + 0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40, + 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63, + 0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC2, 0x0CC2, + 0x0CC6, 0x0CC6, 0x0CCC, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CE2, 0x0CE3, + 0x0D00, 0x0D01, 0x0D3B, 0x0D3C, 0x0D3E, 0x0D3E, 0x0D41, 0x0D44, + 0x0D4D, 0x0D4D, 0x0D57, 0x0D57, 0x0D62, 0x0D63, 0x0D81, 0x0D81, + 0x0DCA, 0x0DCA, 0x0DCF, 0x0DCF, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6, + 0x0DDF, 0x0DDF, 0x0E31, 0x0E31, 0x0E34, 0x0E3A, 0x0E47, 0x0E4E, + 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC, 0x0EC8, 0x0ECD, 0x0F18, 0x0F19, + 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39, 0x0F71, 0x0F7E, + 0x0F80, 0x0F84, 0x0F86, 0x0F87, 0x0F8D, 0x0F97, 0x0F99, 0x0FBC, + 0x0FC6, 0x0FC6, 0x102D, 0x1030, 0x1032, 0x1037, 0x1039, 0x103A, + 0x103D, 0x103E, 0x1058, 0x1059, 0x105E, 0x1060, 0x1071, 0x1074, + 0x1082, 0x1082, 0x1085, 0x1086, 0x108D, 0x108D, 0x109D, 0x109D, + 0x135D, 0x135F, 0x1712, 0x1714, 0x1732, 0x1733, 0x1752, 0x1753, + 0x1772, 0x1773, 0x17B4, 0x17B5, 0x17B7, 0x17BD, 0x17C6, 0x17C6, + 0x17C9, 0x17D3, 0x17DD, 0x17DD, 0x180B, 0x180D, 0x180F, 0x180F, + 0x1885, 0x1886, 0x18A9, 0x18A9, 0x1920, 0x1922, 0x1927, 0x1928, + 0x1932, 0x1932, 0x1939, 0x193B, 0x1A17, 0x1A18, 0x1A1B, 0x1A1B, + 0x1A56, 0x1A56, 0x1A58, 0x1A5E, 0x1A60, 0x1A60, 0x1A62, 0x1A62, + 0x1A65, 0x1A6C, 0x1A73, 0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ACE, + 0x1B00, 0x1B03, 0x1B34, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42, + 0x1B6B, 0x1B73, 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9, + 0x1BAB, 0x1BAD, 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED, + 0x1BEF, 0x1BF1, 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1CD0, 0x1CD2, + 0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, + 0x1CF8, 0x1CF9, 0x1DC0, 0x1DFF, 0x200C, 0x200C, 0x20D0, 0x20F0, + 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x302A, 0x302F, + 0x3099, 0x309A, 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA69E, 0xA69F, + 0xA6F0, 0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806, 0xA80B, 0xA80B, + 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5, 0xA8E0, 0xA8F1, + 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA951, 0xA980, 0xA982, + 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD, 0xA9E5, 0xA9E5, + 0xAA29, 0xAA2E, 0xAA31, 0xAA32, 0xAA35, 0xAA36, 0xAA43, 0xAA43, + 0xAA4C, 0xAA4C, 0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0, 0xAAB2, 0xAAB4, + 0xAAB7, 0xAAB8, 0xAABE, 0xAABF, 0xAAC1, 0xAAC1, 0xAAEC, 0xAAED, + 0xAAF6, 0xAAF6, 0xABE5, 0xABE5, 0xABE8, 0xABE8, 0xABED, 0xABED, + 0xFB1E, 0xFB1E, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, 0xFF9E, 0xFF9F, + 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10A01, 0x10A03, + 0x10A05, 0x10A06, 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, + 0x10AE5, 0x10AE6, 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10F46, 0x10F50, + 0x10F82, 0x10F85, 0x11001, 0x11001, 0x11038, 0x11046, 0x11070, 0x11070, + 0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA, + 0x110C2, 0x110C2, 0x11100, 0x11102, 0x11127, 0x1112B, 0x1112D, 0x11134, + 0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE, 0x111C9, 0x111CC, + 0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237, + 0x1123E, 0x1123E, 0x112DF, 0x112DF, 0x112E3, 0x112EA, 0x11300, 0x11301, + 0x1133B, 0x1133C, 0x1133E, 0x1133E, 0x11340, 0x11340, 0x11357, 0x11357, + 0x11366, 0x1136C, 0x11370, 0x11374, 0x11438, 0x1143F, 0x11442, 0x11444, + 0x11446, 0x11446, 0x1145E, 0x1145E, 0x114B0, 0x114B0, 0x114B3, 0x114B8, + 0x114BA, 0x114BA, 0x114BD, 0x114BD, 0x114BF, 0x114C0, 0x114C2, 0x114C3, + 0x115AF, 0x115AF, 0x115B2, 0x115B5, 0x115BC, 0x115BD, 0x115BF, 0x115C0, + 0x115DC, 0x115DD, 0x11633, 0x1163A, 0x1163D, 0x1163D, 0x1163F, 0x11640, + 0x116AB, 0x116AB, 0x116AD, 0x116AD, 0x116B0, 0x116B5, 0x116B7, 0x116B7, + 0x1171D, 0x1171F, 0x11722, 0x11725, 0x11727, 0x1172B, 0x1182F, 0x11837, + 0x11839, 0x1183A, 0x11930, 0x11930, 0x1193B, 0x1193C, 0x1193E, 0x1193E, + 0x11943, 0x11943, 0x119D4, 0x119D7, 0x119DA, 0x119DB, 0x119E0, 0x119E0, + 0x11A01, 0x11A0A, 0x11A33, 0x11A38, 0x11A3B, 0x11A3E, 0x11A47, 0x11A47, + 0x11A51, 0x11A56, 0x11A59, 0x11A5B, 0x11A8A, 0x11A96, 0x11A98, 0x11A99, + 0x11C30, 0x11C36, 0x11C38, 0x11C3D, 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7, + 0x11CAA, 0x11CB0, 0x11CB2, 0x11CB3, 0x11CB5, 0x11CB6, 0x11D31, 0x11D36, + 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D45, 0x11D47, 0x11D47, + 0x11D90, 0x11D91, 0x11D95, 0x11D95, 0x11D97, 0x11D97, 0x11EF3, 0x11EF4, + 0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16F4F, 0x16F4F, 0x16F8F, 0x16F92, + 0x16FE4, 0x16FE4, 0x1BC9D, 0x1BC9E, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, + 0x1D165, 0x1D165, 0x1D167, 0x1D169, 0x1D16E, 0x1D172, 0x1D17B, 0x1D182, + 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1DA00, 0x1DA36, + 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F, + 0x1DAA1, 0x1DAAF, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, + 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E130, 0x1E136, 0x1E2AE, 0x1E2AE, + 0x1E2EC, 0x1E2EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E94A, 0xE0020, 0xE007F, + 0xE0100, 0xE01EF, + // #67 (10700+6): bp=Hex_Digit:Hex + 0x0030, 0x0039, 0x0041, 0x0046, 0x0061, 0x0066, 0xFF10, 0xFF19, + 0xFF21, 0xFF26, 0xFF41, 0xFF46, + // #68 (10706+2): bp=IDS_Binary_Operator:IDSB + 0x2FF0, 0x2FF1, 0x2FF4, 0x2FFB, + // #69 (10708+1): bp=IDS_Trinary_Operator:IDST + 0x2FF2, 0x2FF3, + // #70 (10709+756): bp=ID_Continue:IDC + 0x0030, 0x0039, 0x0041, 0x005A, 0x005F, 0x005F, 0x0061, 0x007A, + 0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00B7, 0x00B7, 0x00BA, 0x00BA, + 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, 0x02C6, 0x02D1, + 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, 0x0300, 0x0374, + 0x0376, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F, 0x0386, 0x038A, + 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481, + 0x0483, 0x0487, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x0559, + 0x0560, 0x0588, 0x0591, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x05C2, + 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F2, + 0x0610, 0x061A, 0x0620, 0x0669, 0x066E, 0x06D3, 0x06D5, 0x06DC, + 0x06DF, 0x06E8, 0x06EA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x074A, + 0x074D, 0x07B1, 0x07C0, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD, + 0x0800, 0x082D, 0x0840, 0x085B, 0x0860, 0x086A, 0x0870, 0x0887, + 0x0889, 0x088E, 0x0898, 0x08E1, 0x08E3, 0x0963, 0x0966, 0x096F, + 0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, + 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4, + 0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD, + 0x09DF, 0x09E3, 0x09E6, 0x09F1, 0x09FC, 0x09FC, 0x09FE, 0x09FE, + 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28, + 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39, + 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, + 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A75, + 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, + 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5, + 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3, + 0x0AE6, 0x0AEF, 0x0AF9, 0x0AFF, 0x0B01, 0x0B03, 0x0B05, 0x0B0C, + 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, + 0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D, + 0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B6F, + 0x0B71, 0x0B71, 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, + 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, + 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, + 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, + 0x0BE6, 0x0BEF, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, + 0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, + 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63, + 0x0C66, 0x0C6F, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90, + 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4, + 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE, + 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x0D00, 0x0D0C, + 0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4E, + 0x0D54, 0x0D57, 0x0D5F, 0x0D63, 0x0D66, 0x0D6F, 0x0D7A, 0x0D7F, + 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, + 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4, + 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF3, + 0x0E01, 0x0E3A, 0x0E40, 0x0E4E, 0x0E50, 0x0E59, 0x0E81, 0x0E82, + 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, + 0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECD, + 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F18, 0x0F19, + 0x0F20, 0x0F29, 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39, + 0x0F3E, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F84, 0x0F86, 0x0F97, + 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x1000, 0x1049, 0x1050, 0x109D, + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, + 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, + 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, + 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5, + 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A, + 0x135D, 0x135F, 0x1369, 0x1371, 0x1380, 0x138F, 0x13A0, 0x13F5, + 0x13F8, 0x13FD, 0x1401, 0x166C, 0x166F, 0x167F, 0x1681, 0x169A, + 0x16A0, 0x16EA, 0x16EE, 0x16F8, 0x1700, 0x1715, 0x171F, 0x1734, + 0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773, + 0x1780, 0x17D3, 0x17D7, 0x17D7, 0x17DC, 0x17DD, 0x17E0, 0x17E9, + 0x180B, 0x180D, 0x180F, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA, + 0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B, + 0x1946, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9, + 0x19D0, 0x19DA, 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A60, 0x1A7C, + 0x1A7F, 0x1A89, 0x1A90, 0x1A99, 0x1AA7, 0x1AA7, 0x1AB0, 0x1ABD, + 0x1ABF, 0x1ACE, 0x1B00, 0x1B4C, 0x1B50, 0x1B59, 0x1B6B, 0x1B73, + 0x1B80, 0x1BF3, 0x1C00, 0x1C37, 0x1C40, 0x1C49, 0x1C4D, 0x1C7D, + 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CD0, 0x1CD2, + 0x1CD4, 0x1CFA, 0x1D00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, + 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, + 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, + 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, + 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, + 0x203F, 0x2040, 0x2054, 0x2054, 0x2071, 0x2071, 0x207F, 0x207F, + 0x2090, 0x209C, 0x20D0, 0x20DC, 0x20E1, 0x20E1, 0x20E5, 0x20F0, + 0x2102, 0x2102, 0x2107, 0x2107, 0x210A, 0x2113, 0x2115, 0x2115, + 0x2118, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, + 0x212A, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149, 0x214E, 0x214E, + 0x2160, 0x2188, 0x2C00, 0x2CE4, 0x2CEB, 0x2CF3, 0x2D00, 0x2D25, + 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F, + 0x2D7F, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, + 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, + 0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, 0x3005, 0x3007, 0x3021, 0x302F, + 0x3031, 0x3035, 0x3038, 0x303C, 0x3041, 0x3096, 0x3099, 0x309F, + 0x30A1, 0x30FA, 0x30FC, 0x30FF, 0x3105, 0x312F, 0x3131, 0x318E, + 0x31A0, 0x31BF, 0x31F0, 0x31FF, 0x3400, 0x4DBF, 0x4E00, 0xA48C, + 0xA4D0, 0xA4FD, 0xA500, 0xA60C, 0xA610, 0xA62B, 0xA640, 0xA66F, + 0xA674, 0xA67D, 0xA67F, 0xA6F1, 0xA717, 0xA71F, 0xA722, 0xA788, + 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, + 0xA7F2, 0xA827, 0xA82C, 0xA82C, 0xA840, 0xA873, 0xA880, 0xA8C5, + 0xA8D0, 0xA8D9, 0xA8E0, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA92D, + 0xA930, 0xA953, 0xA960, 0xA97C, 0xA980, 0xA9C0, 0xA9CF, 0xA9D9, + 0xA9E0, 0xA9FE, 0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA50, 0xAA59, + 0xAA60, 0xAA76, 0xAA7A, 0xAAC2, 0xAADB, 0xAADD, 0xAAE0, 0xAAEF, + 0xAAF2, 0xAAF6, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16, + 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, 0xAB5C, 0xAB69, + 0xAB70, 0xABEA, 0xABEC, 0xABED, 0xABF0, 0xABF9, 0xAC00, 0xD7A3, + 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, + 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB28, 0xFB2A, 0xFB36, + 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44, + 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F, 0xFD92, 0xFDC7, + 0xFDF0, 0xFDFB, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, 0xFE33, 0xFE34, + 0xFE4D, 0xFE4F, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0xFF10, 0xFF19, + 0xFF21, 0xFF3A, 0xFF3F, 0xFF3F, 0xFF41, 0xFF5A, 0xFF66, 0xFFBE, + 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, + 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D, + 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10140, 0x10174, + 0x101FD, 0x101FD, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x102E0, 0x102E0, + 0x10300, 0x1031F, 0x1032D, 0x1034A, 0x10350, 0x1037A, 0x10380, 0x1039D, + 0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D, + 0x104A0, 0x104A9, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527, + 0x10530, 0x10563, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, + 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, + 0x105BB, 0x105BC, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, + 0x10780, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805, + 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, + 0x1083F, 0x10855, 0x10860, 0x10876, 0x10880, 0x1089E, 0x108E0, 0x108F2, + 0x108F4, 0x108F5, 0x10900, 0x10915, 0x10920, 0x10939, 0x10980, 0x109B7, + 0x109BE, 0x109BF, 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13, + 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, + 0x10A60, 0x10A7C, 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE6, + 0x10B00, 0x10B35, 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, + 0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D27, + 0x10D30, 0x10D39, 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, + 0x10F00, 0x10F1C, 0x10F27, 0x10F27, 0x10F30, 0x10F50, 0x10F70, 0x10F85, + 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, 0x11000, 0x11046, 0x11066, 0x11075, + 0x1107F, 0x110BA, 0x110C2, 0x110C2, 0x110D0, 0x110E8, 0x110F0, 0x110F9, + 0x11100, 0x11134, 0x11136, 0x1113F, 0x11144, 0x11147, 0x11150, 0x11173, + 0x11176, 0x11176, 0x11180, 0x111C4, 0x111C9, 0x111CC, 0x111CE, 0x111DA, + 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x11237, 0x1123E, 0x1123E, + 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, + 0x1129F, 0x112A8, 0x112B0, 0x112EA, 0x112F0, 0x112F9, 0x11300, 0x11303, + 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330, + 0x11332, 0x11333, 0x11335, 0x11339, 0x1133B, 0x11344, 0x11347, 0x11348, + 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363, + 0x11366, 0x1136C, 0x11370, 0x11374, 0x11400, 0x1144A, 0x11450, 0x11459, + 0x1145E, 0x11461, 0x11480, 0x114C5, 0x114C7, 0x114C7, 0x114D0, 0x114D9, + 0x11580, 0x115B5, 0x115B8, 0x115C0, 0x115D8, 0x115DD, 0x11600, 0x11640, + 0x11644, 0x11644, 0x11650, 0x11659, 0x11680, 0x116B8, 0x116C0, 0x116C9, + 0x11700, 0x1171A, 0x1171D, 0x1172B, 0x11730, 0x11739, 0x11740, 0x11746, + 0x11800, 0x1183A, 0x118A0, 0x118E9, 0x118FF, 0x11906, 0x11909, 0x11909, + 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938, + 0x1193B, 0x11943, 0x11950, 0x11959, 0x119A0, 0x119A7, 0x119AA, 0x119D7, + 0x119DA, 0x119E1, 0x119E3, 0x119E4, 0x11A00, 0x11A3E, 0x11A47, 0x11A47, + 0x11A50, 0x11A99, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, + 0x11C0A, 0x11C36, 0x11C38, 0x11C40, 0x11C50, 0x11C59, 0x11C72, 0x11C8F, + 0x11C92, 0x11CA7, 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09, + 0x11D0B, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, + 0x11D50, 0x11D59, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, + 0x11D90, 0x11D91, 0x11D93, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 0x11EF6, + 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12400, 0x1246E, 0x12480, 0x12543, + 0x12F90, 0x12FF0, 0x13000, 0x1342E, 0x14400, 0x14646, 0x16800, 0x16A38, + 0x16A40, 0x16A5E, 0x16A60, 0x16A69, 0x16A70, 0x16ABE, 0x16AC0, 0x16AC9, + 0x16AD0, 0x16AED, 0x16AF0, 0x16AF4, 0x16B00, 0x16B36, 0x16B40, 0x16B43, + 0x16B50, 0x16B59, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F, + 0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1, + 0x16FE3, 0x16FE4, 0x16FF0, 0x16FF1, 0x17000, 0x187F7, 0x18800, 0x18CD5, + 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, + 0x1B000, 0x1B122, 0x1B150, 0x1B152, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, + 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, + 0x1BC9D, 0x1BC9E, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D165, 0x1D169, + 0x1D16D, 0x1D172, 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, + 0x1D242, 0x1D244, 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, + 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, + 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, + 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, + 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, + 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, + 0x1D716, 0x1D734, 0x1D736, 0x1D74E, 0x1D750, 0x1D76E, 0x1D770, 0x1D788, + 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7CB, 0x1D7CE, 0x1D7FF, + 0x1DA00, 0x1DA36, 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, + 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF, 0x1DF00, 0x1DF1E, 0x1E000, 0x1E006, + 0x1E008, 0x1E018, 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026, 0x1E02A, + 0x1E100, 0x1E12C, 0x1E130, 0x1E13D, 0x1E140, 0x1E149, 0x1E14E, 0x1E14E, + 0x1E290, 0x1E2AE, 0x1E2C0, 0x1E2F9, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, + 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E8D0, 0x1E8D6, + 0x1E900, 0x1E94B, 0x1E950, 0x1E959, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, + 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, + 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, + 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, + 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, + 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, + 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, + 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, + 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1FBF0, 0x1FBF9, + 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, + 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0xE0100, 0xE01EF, + // #71 (11465+648): bp=ID_Start:IDS + 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5, + 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, + 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, + 0x0370, 0x0374, 0x0376, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F, + 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1, + 0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F, 0x0531, 0x0556, + 0x0559, 0x0559, 0x0560, 0x0588, 0x05D0, 0x05EA, 0x05EF, 0x05F2, + 0x0620, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5, + 0x06E5, 0x06E6, 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, + 0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1, + 0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA, 0x0800, 0x0815, + 0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x0840, 0x0858, + 0x0860, 0x086A, 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9, + 0x0904, 0x0939, 0x093D, 0x093D, 0x0950, 0x0950, 0x0958, 0x0961, + 0x0971, 0x0980, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, + 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD, + 0x09CE, 0x09CE, 0x09DC, 0x09DD, 0x09DF, 0x09E1, 0x09F0, 0x09F1, + 0x09FC, 0x09FC, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28, + 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39, + 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A72, 0x0A74, 0x0A85, 0x0A8D, + 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, + 0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1, + 0x0AF9, 0x0AF9, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28, + 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3D, 0x0B3D, + 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B71, 0x0B71, 0x0B83, 0x0B83, + 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, + 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, + 0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, + 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A, + 0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C80, 0x0C80, 0x0C85, 0x0C8C, + 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, + 0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2, + 0x0D04, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, + 0x0D4E, 0x0D4E, 0x0D54, 0x0D56, 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F, + 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, + 0x0DC0, 0x0DC6, 0x0E01, 0x0E30, 0x0E32, 0x0E33, 0x0E40, 0x0E46, + 0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, + 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD, + 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, + 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C, 0x1000, 0x102A, + 0x103F, 0x103F, 0x1050, 0x1055, 0x105A, 0x105D, 0x1061, 0x1061, + 0x1065, 0x1066, 0x106E, 0x1070, 0x1075, 0x1081, 0x108E, 0x108E, + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, + 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, + 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, + 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5, + 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A, + 0x1380, 0x138F, 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1401, 0x166C, + 0x166F, 0x167F, 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16EE, 0x16F8, + 0x1700, 0x1711, 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C, + 0x176E, 0x1770, 0x1780, 0x17B3, 0x17D7, 0x17D7, 0x17DC, 0x17DC, + 0x1820, 0x1878, 0x1880, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5, + 0x1900, 0x191E, 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, + 0x19B0, 0x19C9, 0x1A00, 0x1A16, 0x1A20, 0x1A54, 0x1AA7, 0x1AA7, + 0x1B05, 0x1B33, 0x1B45, 0x1B4C, 0x1B83, 0x1BA0, 0x1BAE, 0x1BAF, + 0x1BBA, 0x1BE5, 0x1C00, 0x1C23, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C7D, + 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC, + 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF, + 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, + 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, + 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE, + 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, + 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, 0x2071, 0x2071, + 0x207F, 0x207F, 0x2090, 0x209C, 0x2102, 0x2102, 0x2107, 0x2107, + 0x210A, 0x2113, 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124, + 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F, + 0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 0x2CE4, + 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, + 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F, 0x2D80, 0x2D96, + 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, + 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, + 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303C, + 0x3041, 0x3096, 0x309B, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF, + 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF, + 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C, + 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, 0xA67F, 0xA69D, + 0xA6A0, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, 0xA78B, 0xA7CA, + 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA801, + 0xA803, 0xA805, 0xA807, 0xA80A, 0xA80C, 0xA822, 0xA840, 0xA873, + 0xA882, 0xA8B3, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FE, + 0xA90A, 0xA925, 0xA930, 0xA946, 0xA960, 0xA97C, 0xA984, 0xA9B2, + 0xA9CF, 0xA9CF, 0xA9E0, 0xA9E4, 0xA9E6, 0xA9EF, 0xA9FA, 0xA9FE, + 0xAA00, 0xAA28, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA76, + 0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6, + 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD, + 0xAAE0, 0xAAEA, 0xAAF2, 0xAAF4, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, + 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, + 0xAB5C, 0xAB69, 0xAB70, 0xABE2, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, + 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0xFB00, 0xFB06, + 0xFB13, 0xFB17, 0xFB1D, 0xFB1D, 0xFB1F, 0xFB28, 0xFB2A, 0xFB36, + 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44, + 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F, 0xFD92, 0xFDC7, + 0xFDF0, 0xFDFB, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0xFF21, 0xFF3A, + 0xFF41, 0xFF5A, 0xFF66, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, + 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0x10000, 0x1000B, 0x1000D, 0x10026, + 0x10028, 0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D, + 0x10080, 0x100FA, 0x10140, 0x10174, 0x10280, 0x1029C, 0x102A0, 0x102D0, + 0x10300, 0x1031F, 0x1032D, 0x1034A, 0x10350, 0x10375, 0x10380, 0x1039D, + 0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D, + 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527, 0x10530, 0x10563, + 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, + 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, + 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, 0x10780, 0x10785, + 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805, 0x10808, 0x10808, + 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855, + 0x10860, 0x10876, 0x10880, 0x1089E, 0x108E0, 0x108F2, 0x108F4, 0x108F5, + 0x10900, 0x10915, 0x10920, 0x10939, 0x10980, 0x109B7, 0x109BE, 0x109BF, + 0x10A00, 0x10A00, 0x10A10, 0x10A13, 0x10A15, 0x10A17, 0x10A19, 0x10A35, + 0x10A60, 0x10A7C, 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4, + 0x10B00, 0x10B35, 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, + 0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D23, + 0x10E80, 0x10EA9, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27, + 0x10F30, 0x10F45, 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, + 0x11003, 0x11037, 0x11071, 0x11072, 0x11075, 0x11075, 0x11083, 0x110AF, + 0x110D0, 0x110E8, 0x11103, 0x11126, 0x11144, 0x11144, 0x11147, 0x11147, + 0x11150, 0x11172, 0x11176, 0x11176, 0x11183, 0x111B2, 0x111C1, 0x111C4, + 0x111DA, 0x111DA, 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x1122B, + 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, + 0x1129F, 0x112A8, 0x112B0, 0x112DE, 0x11305, 0x1130C, 0x1130F, 0x11310, + 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, + 0x1133D, 0x1133D, 0x11350, 0x11350, 0x1135D, 0x11361, 0x11400, 0x11434, + 0x11447, 0x1144A, 0x1145F, 0x11461, 0x11480, 0x114AF, 0x114C4, 0x114C5, + 0x114C7, 0x114C7, 0x11580, 0x115AE, 0x115D8, 0x115DB, 0x11600, 0x1162F, + 0x11644, 0x11644, 0x11680, 0x116AA, 0x116B8, 0x116B8, 0x11700, 0x1171A, + 0x11740, 0x11746, 0x11800, 0x1182B, 0x118A0, 0x118DF, 0x118FF, 0x11906, + 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x1192F, + 0x1193F, 0x1193F, 0x11941, 0x11941, 0x119A0, 0x119A7, 0x119AA, 0x119D0, + 0x119E1, 0x119E1, 0x119E3, 0x119E3, 0x11A00, 0x11A00, 0x11A0B, 0x11A32, + 0x11A3A, 0x11A3A, 0x11A50, 0x11A50, 0x11A5C, 0x11A89, 0x11A9D, 0x11A9D, + 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C2E, 0x11C40, 0x11C40, + 0x11C72, 0x11C8F, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D30, + 0x11D46, 0x11D46, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D89, + 0x11D98, 0x11D98, 0x11EE0, 0x11EF2, 0x11FB0, 0x11FB0, 0x12000, 0x12399, + 0x12400, 0x1246E, 0x12480, 0x12543, 0x12F90, 0x12FF0, 0x13000, 0x1342E, + 0x14400, 0x14646, 0x16800, 0x16A38, 0x16A40, 0x16A5E, 0x16A70, 0x16ABE, + 0x16AD0, 0x16AED, 0x16B00, 0x16B2F, 0x16B40, 0x16B43, 0x16B63, 0x16B77, + 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F, 0x16F00, 0x16F4A, 0x16F50, 0x16F50, + 0x16F93, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, 0x17000, 0x187F7, + 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, + 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, 0x1B150, 0x1B152, 0x1B164, 0x1B167, + 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, + 0x1BC90, 0x1BC99, 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, + 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, + 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, + 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, + 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, + 0x1D6A8, 0x1D6C0, 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, + 0x1D716, 0x1D734, 0x1D736, 0x1D74E, 0x1D750, 0x1D76E, 0x1D770, 0x1D788, + 0x1D78A, 0x1D7A8, 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7CB, 0x1DF00, 0x1DF1E, + 0x1E100, 0x1E12C, 0x1E137, 0x1E13D, 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AD, + 0x1E2C0, 0x1E2EB, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, + 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E900, 0x1E943, 0x1E94B, 0x1E94B, + 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, + 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, + 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, + 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, + 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, + 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, + 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, + 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, + 0x1EEAB, 0x1EEBB, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D, + 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, + // #72 (12113+19): bp=Ideographic:Ideo + 0x3006, 0x3007, 0x3021, 0x3029, 0x3038, 0x303A, 0x3400, 0x4DBF, + 0x4E00, 0x9FFF, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0x16FE4, 0x16FE4, + 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1B170, 0x1B2FB, + 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, + 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, + // #73 (12132+1): bp=Join_Control:Join_C + 0x200C, 0x200D, + // #74 (12133+7): bp=Logical_Order_Exception:LOE + 0x0E40, 0x0E44, 0x0EC0, 0x0EC4, 0x19B5, 0x19B7, 0x19BA, 0x19BA, + 0xAAB5, 0xAAB6, 0xAAB9, 0xAAB9, 0xAABB, 0xAABC, + // #75 (12140+668): bp=Lowercase:Lower + 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00BA, 0x00BA, + 0x00DF, 0x00F6, 0x00F8, 0x00FF, 0x0101, 0x0101, 0x0103, 0x0103, + 0x0105, 0x0105, 0x0107, 0x0107, 0x0109, 0x0109, 0x010B, 0x010B, + 0x010D, 0x010D, 0x010F, 0x010F, 0x0111, 0x0111, 0x0113, 0x0113, + 0x0115, 0x0115, 0x0117, 0x0117, 0x0119, 0x0119, 0x011B, 0x011B, + 0x011D, 0x011D, 0x011F, 0x011F, 0x0121, 0x0121, 0x0123, 0x0123, + 0x0125, 0x0125, 0x0127, 0x0127, 0x0129, 0x0129, 0x012B, 0x012B, + 0x012D, 0x012D, 0x012F, 0x012F, 0x0131, 0x0131, 0x0133, 0x0133, + 0x0135, 0x0135, 0x0137, 0x0138, 0x013A, 0x013A, 0x013C, 0x013C, + 0x013E, 0x013E, 0x0140, 0x0140, 0x0142, 0x0142, 0x0144, 0x0144, + 0x0146, 0x0146, 0x0148, 0x0149, 0x014B, 0x014B, 0x014D, 0x014D, + 0x014F, 0x014F, 0x0151, 0x0151, 0x0153, 0x0153, 0x0155, 0x0155, + 0x0157, 0x0157, 0x0159, 0x0159, 0x015B, 0x015B, 0x015D, 0x015D, + 0x015F, 0x015F, 0x0161, 0x0161, 0x0163, 0x0163, 0x0165, 0x0165, + 0x0167, 0x0167, 0x0169, 0x0169, 0x016B, 0x016B, 0x016D, 0x016D, + 0x016F, 0x016F, 0x0171, 0x0171, 0x0173, 0x0173, 0x0175, 0x0175, + 0x0177, 0x0177, 0x017A, 0x017A, 0x017C, 0x017C, 0x017E, 0x0180, + 0x0183, 0x0183, 0x0185, 0x0185, 0x0188, 0x0188, 0x018C, 0x018D, + 0x0192, 0x0192, 0x0195, 0x0195, 0x0199, 0x019B, 0x019E, 0x019E, + 0x01A1, 0x01A1, 0x01A3, 0x01A3, 0x01A5, 0x01A5, 0x01A8, 0x01A8, + 0x01AA, 0x01AB, 0x01AD, 0x01AD, 0x01B0, 0x01B0, 0x01B4, 0x01B4, + 0x01B6, 0x01B6, 0x01B9, 0x01BA, 0x01BD, 0x01BF, 0x01C6, 0x01C6, + 0x01C9, 0x01C9, 0x01CC, 0x01CC, 0x01CE, 0x01CE, 0x01D0, 0x01D0, + 0x01D2, 0x01D2, 0x01D4, 0x01D4, 0x01D6, 0x01D6, 0x01D8, 0x01D8, + 0x01DA, 0x01DA, 0x01DC, 0x01DD, 0x01DF, 0x01DF, 0x01E1, 0x01E1, + 0x01E3, 0x01E3, 0x01E5, 0x01E5, 0x01E7, 0x01E7, 0x01E9, 0x01E9, + 0x01EB, 0x01EB, 0x01ED, 0x01ED, 0x01EF, 0x01F0, 0x01F3, 0x01F3, + 0x01F5, 0x01F5, 0x01F9, 0x01F9, 0x01FB, 0x01FB, 0x01FD, 0x01FD, + 0x01FF, 0x01FF, 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, + 0x0207, 0x0207, 0x0209, 0x0209, 0x020B, 0x020B, 0x020D, 0x020D, + 0x020F, 0x020F, 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, + 0x0217, 0x0217, 0x0219, 0x0219, 0x021B, 0x021B, 0x021D, 0x021D, + 0x021F, 0x021F, 0x0221, 0x0221, 0x0223, 0x0223, 0x0225, 0x0225, + 0x0227, 0x0227, 0x0229, 0x0229, 0x022B, 0x022B, 0x022D, 0x022D, + 0x022F, 0x022F, 0x0231, 0x0231, 0x0233, 0x0239, 0x023C, 0x023C, + 0x023F, 0x0240, 0x0242, 0x0242, 0x0247, 0x0247, 0x0249, 0x0249, + 0x024B, 0x024B, 0x024D, 0x024D, 0x024F, 0x0293, 0x0295, 0x02B8, + 0x02C0, 0x02C1, 0x02E0, 0x02E4, 0x0345, 0x0345, 0x0371, 0x0371, + 0x0373, 0x0373, 0x0377, 0x0377, 0x037A, 0x037D, 0x0390, 0x0390, + 0x03AC, 0x03CE, 0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9, + 0x03DB, 0x03DB, 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, + 0x03E3, 0x03E3, 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, + 0x03EB, 0x03EB, 0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5, + 0x03F8, 0x03F8, 0x03FB, 0x03FC, 0x0430, 0x045F, 0x0461, 0x0461, + 0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, + 0x046B, 0x046B, 0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471, + 0x0473, 0x0473, 0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, + 0x047B, 0x047B, 0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481, + 0x048B, 0x048B, 0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491, + 0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, + 0x049B, 0x049B, 0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1, + 0x04A3, 0x04A3, 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, + 0x04AB, 0x04AB, 0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1, + 0x04B3, 0x04B3, 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, + 0x04BB, 0x04BB, 0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2, + 0x04C4, 0x04C4, 0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA, + 0x04CC, 0x04CC, 0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3, + 0x04D5, 0x04D5, 0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB, + 0x04DD, 0x04DD, 0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3, + 0x04E5, 0x04E5, 0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB, + 0x04ED, 0x04ED, 0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3, + 0x04F5, 0x04F5, 0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB, + 0x04FD, 0x04FD, 0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503, + 0x0505, 0x0505, 0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B, + 0x050D, 0x050D, 0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513, + 0x0515, 0x0515, 0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B, + 0x051D, 0x051D, 0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523, + 0x0525, 0x0525, 0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B, + 0x052D, 0x052D, 0x052F, 0x052F, 0x0560, 0x0588, 0x10D0, 0x10FA, + 0x10FD, 0x10FF, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1D00, 0x1DBF, + 0x1E01, 0x1E01, 0x1E03, 0x1E03, 0x1E05, 0x1E05, 0x1E07, 0x1E07, + 0x1E09, 0x1E09, 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, 0x1E0F, 0x1E0F, + 0x1E11, 0x1E11, 0x1E13, 0x1E13, 0x1E15, 0x1E15, 0x1E17, 0x1E17, + 0x1E19, 0x1E19, 0x1E1B, 0x1E1B, 0x1E1D, 0x1E1D, 0x1E1F, 0x1E1F, + 0x1E21, 0x1E21, 0x1E23, 0x1E23, 0x1E25, 0x1E25, 0x1E27, 0x1E27, + 0x1E29, 0x1E29, 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, 0x1E2F, 0x1E2F, + 0x1E31, 0x1E31, 0x1E33, 0x1E33, 0x1E35, 0x1E35, 0x1E37, 0x1E37, + 0x1E39, 0x1E39, 0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, 0x1E3F, 0x1E3F, + 0x1E41, 0x1E41, 0x1E43, 0x1E43, 0x1E45, 0x1E45, 0x1E47, 0x1E47, + 0x1E49, 0x1E49, 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D, 0x1E4F, 0x1E4F, + 0x1E51, 0x1E51, 0x1E53, 0x1E53, 0x1E55, 0x1E55, 0x1E57, 0x1E57, + 0x1E59, 0x1E59, 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, 0x1E5F, 0x1E5F, + 0x1E61, 0x1E61, 0x1E63, 0x1E63, 0x1E65, 0x1E65, 0x1E67, 0x1E67, + 0x1E69, 0x1E69, 0x1E6B, 0x1E6B, 0x1E6D, 0x1E6D, 0x1E6F, 0x1E6F, + 0x1E71, 0x1E71, 0x1E73, 0x1E73, 0x1E75, 0x1E75, 0x1E77, 0x1E77, + 0x1E79, 0x1E79, 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, 0x1E7F, 0x1E7F, + 0x1E81, 0x1E81, 0x1E83, 0x1E83, 0x1E85, 0x1E85, 0x1E87, 0x1E87, + 0x1E89, 0x1E89, 0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, 0x1E8F, 0x1E8F, + 0x1E91, 0x1E91, 0x1E93, 0x1E93, 0x1E95, 0x1E9D, 0x1E9F, 0x1E9F, + 0x1EA1, 0x1EA1, 0x1EA3, 0x1EA3, 0x1EA5, 0x1EA5, 0x1EA7, 0x1EA7, + 0x1EA9, 0x1EA9, 0x1EAB, 0x1EAB, 0x1EAD, 0x1EAD, 0x1EAF, 0x1EAF, + 0x1EB1, 0x1EB1, 0x1EB3, 0x1EB3, 0x1EB5, 0x1EB5, 0x1EB7, 0x1EB7, + 0x1EB9, 0x1EB9, 0x1EBB, 0x1EBB, 0x1EBD, 0x1EBD, 0x1EBF, 0x1EBF, + 0x1EC1, 0x1EC1, 0x1EC3, 0x1EC3, 0x1EC5, 0x1EC5, 0x1EC7, 0x1EC7, + 0x1EC9, 0x1EC9, 0x1ECB, 0x1ECB, 0x1ECD, 0x1ECD, 0x1ECF, 0x1ECF, + 0x1ED1, 0x1ED1, 0x1ED3, 0x1ED3, 0x1ED5, 0x1ED5, 0x1ED7, 0x1ED7, + 0x1ED9, 0x1ED9, 0x1EDB, 0x1EDB, 0x1EDD, 0x1EDD, 0x1EDF, 0x1EDF, + 0x1EE1, 0x1EE1, 0x1EE3, 0x1EE3, 0x1EE5, 0x1EE5, 0x1EE7, 0x1EE7, + 0x1EE9, 0x1EE9, 0x1EEB, 0x1EEB, 0x1EED, 0x1EED, 0x1EEF, 0x1EEF, + 0x1EF1, 0x1EF1, 0x1EF3, 0x1EF3, 0x1EF5, 0x1EF5, 0x1EF7, 0x1EF7, + 0x1EF9, 0x1EF9, 0x1EFB, 0x1EFB, 0x1EFD, 0x1EFD, 0x1EFF, 0x1F07, + 0x1F10, 0x1F15, 0x1F20, 0x1F27, 0x1F30, 0x1F37, 0x1F40, 0x1F45, + 0x1F50, 0x1F57, 0x1F60, 0x1F67, 0x1F70, 0x1F7D, 0x1F80, 0x1F87, + 0x1F90, 0x1F97, 0x1FA0, 0x1FA7, 0x1FB0, 0x1FB4, 0x1FB6, 0x1FB7, + 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC7, 0x1FD0, 0x1FD3, + 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FF7, + 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C, 0x210A, 0x210A, + 0x210E, 0x210F, 0x2113, 0x2113, 0x212F, 0x212F, 0x2134, 0x2134, + 0x2139, 0x2139, 0x213C, 0x213D, 0x2146, 0x2149, 0x214E, 0x214E, + 0x2170, 0x217F, 0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F, + 0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A, + 0x2C6C, 0x2C6C, 0x2C71, 0x2C71, 0x2C73, 0x2C74, 0x2C76, 0x2C7D, + 0x2C81, 0x2C81, 0x2C83, 0x2C83, 0x2C85, 0x2C85, 0x2C87, 0x2C87, + 0x2C89, 0x2C89, 0x2C8B, 0x2C8B, 0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F, + 0x2C91, 0x2C91, 0x2C93, 0x2C93, 0x2C95, 0x2C95, 0x2C97, 0x2C97, + 0x2C99, 0x2C99, 0x2C9B, 0x2C9B, 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F, + 0x2CA1, 0x2CA1, 0x2CA3, 0x2CA3, 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7, + 0x2CA9, 0x2CA9, 0x2CAB, 0x2CAB, 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF, + 0x2CB1, 0x2CB1, 0x2CB3, 0x2CB3, 0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7, + 0x2CB9, 0x2CB9, 0x2CBB, 0x2CBB, 0x2CBD, 0x2CBD, 0x2CBF, 0x2CBF, + 0x2CC1, 0x2CC1, 0x2CC3, 0x2CC3, 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7, + 0x2CC9, 0x2CC9, 0x2CCB, 0x2CCB, 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF, + 0x2CD1, 0x2CD1, 0x2CD3, 0x2CD3, 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7, + 0x2CD9, 0x2CD9, 0x2CDB, 0x2CDB, 0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF, + 0x2CE1, 0x2CE1, 0x2CE3, 0x2CE4, 0x2CEC, 0x2CEC, 0x2CEE, 0x2CEE, + 0x2CF3, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, + 0xA641, 0xA641, 0xA643, 0xA643, 0xA645, 0xA645, 0xA647, 0xA647, + 0xA649, 0xA649, 0xA64B, 0xA64B, 0xA64D, 0xA64D, 0xA64F, 0xA64F, + 0xA651, 0xA651, 0xA653, 0xA653, 0xA655, 0xA655, 0xA657, 0xA657, + 0xA659, 0xA659, 0xA65B, 0xA65B, 0xA65D, 0xA65D, 0xA65F, 0xA65F, + 0xA661, 0xA661, 0xA663, 0xA663, 0xA665, 0xA665, 0xA667, 0xA667, + 0xA669, 0xA669, 0xA66B, 0xA66B, 0xA66D, 0xA66D, 0xA681, 0xA681, + 0xA683, 0xA683, 0xA685, 0xA685, 0xA687, 0xA687, 0xA689, 0xA689, + 0xA68B, 0xA68B, 0xA68D, 0xA68D, 0xA68F, 0xA68F, 0xA691, 0xA691, + 0xA693, 0xA693, 0xA695, 0xA695, 0xA697, 0xA697, 0xA699, 0xA699, + 0xA69B, 0xA69D, 0xA723, 0xA723, 0xA725, 0xA725, 0xA727, 0xA727, + 0xA729, 0xA729, 0xA72B, 0xA72B, 0xA72D, 0xA72D, 0xA72F, 0xA731, + 0xA733, 0xA733, 0xA735, 0xA735, 0xA737, 0xA737, 0xA739, 0xA739, + 0xA73B, 0xA73B, 0xA73D, 0xA73D, 0xA73F, 0xA73F, 0xA741, 0xA741, + 0xA743, 0xA743, 0xA745, 0xA745, 0xA747, 0xA747, 0xA749, 0xA749, + 0xA74B, 0xA74B, 0xA74D, 0xA74D, 0xA74F, 0xA74F, 0xA751, 0xA751, + 0xA753, 0xA753, 0xA755, 0xA755, 0xA757, 0xA757, 0xA759, 0xA759, + 0xA75B, 0xA75B, 0xA75D, 0xA75D, 0xA75F, 0xA75F, 0xA761, 0xA761, + 0xA763, 0xA763, 0xA765, 0xA765, 0xA767, 0xA767, 0xA769, 0xA769, + 0xA76B, 0xA76B, 0xA76D, 0xA76D, 0xA76F, 0xA778, 0xA77A, 0xA77A, + 0xA77C, 0xA77C, 0xA77F, 0xA77F, 0xA781, 0xA781, 0xA783, 0xA783, + 0xA785, 0xA785, 0xA787, 0xA787, 0xA78C, 0xA78C, 0xA78E, 0xA78E, + 0xA791, 0xA791, 0xA793, 0xA795, 0xA797, 0xA797, 0xA799, 0xA799, + 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F, 0xA7A1, 0xA7A1, + 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7, 0xA7A9, 0xA7A9, + 0xA7AF, 0xA7AF, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, 0xA7B9, 0xA7B9, + 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF, 0xA7C1, 0xA7C1, + 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA, 0xA7D1, 0xA7D1, + 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D5, 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9, + 0xA7F6, 0xA7F6, 0xA7F8, 0xA7FA, 0xAB30, 0xAB5A, 0xAB5C, 0xAB68, + 0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF41, 0xFF5A, + 0x10428, 0x1044F, 0x104D8, 0x104FB, 0x10597, 0x105A1, 0x105A3, 0x105B1, + 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10780, 0x10780, 0x10783, 0x10785, + 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10CC0, 0x10CF2, 0x118C0, 0x118DF, + 0x16E60, 0x16E7F, 0x1D41A, 0x1D433, 0x1D44E, 0x1D454, 0x1D456, 0x1D467, + 0x1D482, 0x1D49B, 0x1D4B6, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, + 0x1D4C5, 0x1D4CF, 0x1D4EA, 0x1D503, 0x1D51E, 0x1D537, 0x1D552, 0x1D56B, + 0x1D586, 0x1D59F, 0x1D5BA, 0x1D5D3, 0x1D5EE, 0x1D607, 0x1D622, 0x1D63B, + 0x1D656, 0x1D66F, 0x1D68A, 0x1D6A5, 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6E1, + 0x1D6FC, 0x1D714, 0x1D716, 0x1D71B, 0x1D736, 0x1D74E, 0x1D750, 0x1D755, + 0x1D770, 0x1D788, 0x1D78A, 0x1D78F, 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7C9, + 0x1D7CB, 0x1D7CB, 0x1DF00, 0x1DF09, 0x1DF0B, 0x1DF1E, 0x1E922, 0x1E943, + // #76 (12808+138): bp=Math + 0x002B, 0x002B, 0x003C, 0x003E, 0x005E, 0x005E, 0x007C, 0x007C, + 0x007E, 0x007E, 0x00AC, 0x00AC, 0x00B1, 0x00B1, 0x00D7, 0x00D7, + 0x00F7, 0x00F7, 0x03D0, 0x03D2, 0x03D5, 0x03D5, 0x03F0, 0x03F1, + 0x03F4, 0x03F6, 0x0606, 0x0608, 0x2016, 0x2016, 0x2032, 0x2034, + 0x2040, 0x2040, 0x2044, 0x2044, 0x2052, 0x2052, 0x2061, 0x2064, + 0x207A, 0x207E, 0x208A, 0x208E, 0x20D0, 0x20DC, 0x20E1, 0x20E1, + 0x20E5, 0x20E6, 0x20EB, 0x20EF, 0x2102, 0x2102, 0x2107, 0x2107, + 0x210A, 0x2113, 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124, + 0x2128, 0x2129, 0x212C, 0x212D, 0x212F, 0x2131, 0x2133, 0x2138, + 0x213C, 0x2149, 0x214B, 0x214B, 0x2190, 0x21A7, 0x21A9, 0x21AE, + 0x21B0, 0x21B1, 0x21B6, 0x21B7, 0x21BC, 0x21DB, 0x21DD, 0x21DD, + 0x21E4, 0x21E5, 0x21F4, 0x22FF, 0x2308, 0x230B, 0x2320, 0x2321, + 0x237C, 0x237C, 0x239B, 0x23B5, 0x23B7, 0x23B7, 0x23D0, 0x23D0, + 0x23DC, 0x23E2, 0x25A0, 0x25A1, 0x25AE, 0x25B7, 0x25BC, 0x25C1, + 0x25C6, 0x25C7, 0x25CA, 0x25CB, 0x25CF, 0x25D3, 0x25E2, 0x25E2, + 0x25E4, 0x25E4, 0x25E7, 0x25EC, 0x25F8, 0x25FF, 0x2605, 0x2606, + 0x2640, 0x2640, 0x2642, 0x2642, 0x2660, 0x2663, 0x266D, 0x266F, + 0x27C0, 0x27FF, 0x2900, 0x2AFF, 0x2B30, 0x2B44, 0x2B47, 0x2B4C, + 0xFB29, 0xFB29, 0xFE61, 0xFE66, 0xFE68, 0xFE68, 0xFF0B, 0xFF0B, + 0xFF1C, 0xFF1E, 0xFF3C, 0xFF3C, 0xFF3E, 0xFF3E, 0xFF5C, 0xFF5C, + 0xFF5E, 0xFF5E, 0xFFE2, 0xFFE2, 0xFFE9, 0xFFEC, 0x1D400, 0x1D454, + 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, + 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, + 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, + 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, 0x1D546, 0x1D546, + 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D7FF, + 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, + 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, + 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, + 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, + 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, + 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, + 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, + 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, + 0x1EEAB, 0x1EEBB, 0x1EEF0, 0x1EEF1, + // #77 (12946+18): bp=Noncharacter_Code_Point:NChar + 0xFDD0, 0xFDEF, 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, + 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE, 0x6FFFF, + 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, + 0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xEFFFE, 0xEFFFF, + 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF, + // #78 (12964+28): bp=Pattern_Syntax:Pat_Syn + 0x0021, 0x002F, 0x003A, 0x0040, 0x005B, 0x005E, 0x0060, 0x0060, + 0x007B, 0x007E, 0x00A1, 0x00A7, 0x00A9, 0x00A9, 0x00AB, 0x00AC, + 0x00AE, 0x00AE, 0x00B0, 0x00B1, 0x00B6, 0x00B6, 0x00BB, 0x00BB, + 0x00BF, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x2010, 0x2027, + 0x2030, 0x203E, 0x2041, 0x2053, 0x2055, 0x205E, 0x2190, 0x245F, + 0x2500, 0x2775, 0x2794, 0x2BFF, 0x2E00, 0x2E7F, 0x3001, 0x3003, + 0x3008, 0x3020, 0x3030, 0x3030, 0xFD3E, 0xFD3F, 0xFE45, 0xFE46, + // #79 (12992+5): bp=Pattern_White_Space:Pat_WS + 0x0009, 0x000D, 0x0020, 0x0020, 0x0085, 0x0085, 0x200E, 0x200F, + 0x2028, 0x2029, + // #80 (12997+13): bp=Quotation_Mark:QMark + 0x0022, 0x0022, 0x0027, 0x0027, 0x00AB, 0x00AB, 0x00BB, 0x00BB, + 0x2018, 0x201F, 0x2039, 0x203A, 0x2E42, 0x2E42, 0x300C, 0x300F, + 0x301D, 0x301F, 0xFE41, 0xFE44, 0xFF02, 0xFF02, 0xFF07, 0xFF07, + 0xFF62, 0xFF63, + // #81 (13010+3): bp=Radical + 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, + // #82 (13013+1): bp=Regional_Indicator:RI + 0x1F1E6, 0x1F1FF, + // #83 (13014+79): bp=Sentence_Terminal:STerm + 0x0021, 0x0021, 0x002E, 0x002E, 0x003F, 0x003F, 0x0589, 0x0589, + 0x061D, 0x061F, 0x06D4, 0x06D4, 0x0700, 0x0702, 0x07F9, 0x07F9, + 0x0837, 0x0837, 0x0839, 0x0839, 0x083D, 0x083E, 0x0964, 0x0965, + 0x104A, 0x104B, 0x1362, 0x1362, 0x1367, 0x1368, 0x166E, 0x166E, + 0x1735, 0x1736, 0x1803, 0x1803, 0x1809, 0x1809, 0x1944, 0x1945, + 0x1AA8, 0x1AAB, 0x1B5A, 0x1B5B, 0x1B5E, 0x1B5F, 0x1B7D, 0x1B7E, + 0x1C3B, 0x1C3C, 0x1C7E, 0x1C7F, 0x203C, 0x203D, 0x2047, 0x2049, + 0x2E2E, 0x2E2E, 0x2E3C, 0x2E3C, 0x2E53, 0x2E54, 0x3002, 0x3002, + 0xA4FF, 0xA4FF, 0xA60E, 0xA60F, 0xA6F3, 0xA6F3, 0xA6F7, 0xA6F7, + 0xA876, 0xA877, 0xA8CE, 0xA8CF, 0xA92F, 0xA92F, 0xA9C8, 0xA9C9, + 0xAA5D, 0xAA5F, 0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE52, 0xFE52, + 0xFE56, 0xFE57, 0xFF01, 0xFF01, 0xFF0E, 0xFF0E, 0xFF1F, 0xFF1F, + 0xFF61, 0xFF61, 0x10A56, 0x10A57, 0x10F55, 0x10F59, 0x10F86, 0x10F89, + 0x11047, 0x11048, 0x110BE, 0x110C1, 0x11141, 0x11143, 0x111C5, 0x111C6, + 0x111CD, 0x111CD, 0x111DE, 0x111DF, 0x11238, 0x11239, 0x1123B, 0x1123C, + 0x112A9, 0x112A9, 0x1144B, 0x1144C, 0x115C2, 0x115C3, 0x115C9, 0x115D7, + 0x11641, 0x11642, 0x1173C, 0x1173E, 0x11944, 0x11944, 0x11946, 0x11946, + 0x11A42, 0x11A43, 0x11A9B, 0x11A9C, 0x11C41, 0x11C42, 0x11EF7, 0x11EF8, + 0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5, 0x16B37, 0x16B38, 0x16B44, 0x16B44, + 0x16E98, 0x16E98, 0x1BC9F, 0x1BC9F, 0x1DA88, 0x1DA88, + // #84 (13093+32): bp=Soft_Dotted:SD + 0x0069, 0x006A, 0x012F, 0x012F, 0x0249, 0x0249, 0x0268, 0x0268, + 0x029D, 0x029D, 0x02B2, 0x02B2, 0x03F3, 0x03F3, 0x0456, 0x0456, + 0x0458, 0x0458, 0x1D62, 0x1D62, 0x1D96, 0x1D96, 0x1DA4, 0x1DA4, + 0x1DA8, 0x1DA8, 0x1E2D, 0x1E2D, 0x1ECB, 0x1ECB, 0x2071, 0x2071, + 0x2148, 0x2149, 0x2C7C, 0x2C7C, 0x1D422, 0x1D423, 0x1D456, 0x1D457, + 0x1D48A, 0x1D48B, 0x1D4BE, 0x1D4BF, 0x1D4F2, 0x1D4F3, 0x1D526, 0x1D527, + 0x1D55A, 0x1D55B, 0x1D58E, 0x1D58F, 0x1D5C2, 0x1D5C3, 0x1D5F6, 0x1D5F7, + 0x1D62A, 0x1D62B, 0x1D65E, 0x1D65F, 0x1D692, 0x1D693, 0x1DF1A, 0x1DF1A, + // #85 (13125+107): bp=Terminal_Punctuation:Term + 0x0021, 0x0021, 0x002C, 0x002C, 0x002E, 0x002E, 0x003A, 0x003B, + 0x003F, 0x003F, 0x037E, 0x037E, 0x0387, 0x0387, 0x0589, 0x0589, + 0x05C3, 0x05C3, 0x060C, 0x060C, 0x061B, 0x061B, 0x061D, 0x061F, + 0x06D4, 0x06D4, 0x0700, 0x070A, 0x070C, 0x070C, 0x07F8, 0x07F9, + 0x0830, 0x083E, 0x085E, 0x085E, 0x0964, 0x0965, 0x0E5A, 0x0E5B, + 0x0F08, 0x0F08, 0x0F0D, 0x0F12, 0x104A, 0x104B, 0x1361, 0x1368, + 0x166E, 0x166E, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x17D4, 0x17D6, + 0x17DA, 0x17DA, 0x1802, 0x1805, 0x1808, 0x1809, 0x1944, 0x1945, + 0x1AA8, 0x1AAB, 0x1B5A, 0x1B5B, 0x1B5D, 0x1B5F, 0x1B7D, 0x1B7E, + 0x1C3B, 0x1C3F, 0x1C7E, 0x1C7F, 0x203C, 0x203D, 0x2047, 0x2049, + 0x2E2E, 0x2E2E, 0x2E3C, 0x2E3C, 0x2E41, 0x2E41, 0x2E4C, 0x2E4C, + 0x2E4E, 0x2E4F, 0x2E53, 0x2E54, 0x3001, 0x3002, 0xA4FE, 0xA4FF, + 0xA60D, 0xA60F, 0xA6F3, 0xA6F7, 0xA876, 0xA877, 0xA8CE, 0xA8CF, + 0xA92F, 0xA92F, 0xA9C7, 0xA9C9, 0xAA5D, 0xAA5F, 0xAADF, 0xAADF, + 0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE50, 0xFE52, 0xFE54, 0xFE57, + 0xFF01, 0xFF01, 0xFF0C, 0xFF0C, 0xFF0E, 0xFF0E, 0xFF1A, 0xFF1B, + 0xFF1F, 0xFF1F, 0xFF61, 0xFF61, 0xFF64, 0xFF64, 0x1039F, 0x1039F, + 0x103D0, 0x103D0, 0x10857, 0x10857, 0x1091F, 0x1091F, 0x10A56, 0x10A57, + 0x10AF0, 0x10AF5, 0x10B3A, 0x10B3F, 0x10B99, 0x10B9C, 0x10F55, 0x10F59, + 0x10F86, 0x10F89, 0x11047, 0x1104D, 0x110BE, 0x110C1, 0x11141, 0x11143, + 0x111C5, 0x111C6, 0x111CD, 0x111CD, 0x111DE, 0x111DF, 0x11238, 0x1123C, + 0x112A9, 0x112A9, 0x1144B, 0x1144D, 0x1145A, 0x1145B, 0x115C2, 0x115C5, + 0x115C9, 0x115D7, 0x11641, 0x11642, 0x1173C, 0x1173E, 0x11944, 0x11944, + 0x11946, 0x11946, 0x11A42, 0x11A43, 0x11A9B, 0x11A9C, 0x11AA1, 0x11AA2, + 0x11C41, 0x11C43, 0x11C71, 0x11C71, 0x11EF7, 0x11EF8, 0x12470, 0x12474, + 0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5, 0x16B37, 0x16B39, 0x16B44, 0x16B44, + 0x16E97, 0x16E98, 0x1BC9F, 0x1BC9F, 0x1DA87, 0x1DA8A, + // #86 (13232+15): bp=Unified_Ideograph:UIdeo + 0x3400, 0x4DBF, 0x4E00, 0x9FFF, 0xFA0E, 0xFA0F, 0xFA11, 0xFA11, + 0xFA13, 0xFA14, 0xFA1F, 0xFA1F, 0xFA21, 0xFA21, 0xFA23, 0xFA24, + 0xFA27, 0xFA29, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D, + 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x30000, 0x3134A, + // #87 (13247+651): bp=Uppercase:Upper + 0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100, + 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108, + 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110, + 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118, + 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120, + 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128, + 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130, + 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139, + 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141, + 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A, + 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152, + 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A, + 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162, + 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A, + 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172, + 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B, + 0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, + 0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198, + 0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4, + 0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF, + 0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC, + 0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CD, 0x01CD, + 0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5, + 0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE, + 0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6, + 0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE, + 0x01F1, 0x01F1, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA, + 0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202, + 0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A, + 0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212, + 0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A, + 0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222, + 0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A, + 0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232, + 0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246, + 0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E, + 0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F, + 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F, + 0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D2, 0x03D4, + 0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE, + 0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, + 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE, + 0x03F4, 0x03F4, 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, + 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, + 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, + 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, + 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, + 0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, + 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, + 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, + 0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, + 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, + 0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, + 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, + 0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, + 0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, + 0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, + 0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, + 0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, + 0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, + 0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, + 0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, + 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, + 0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, + 0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, + 0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, + 0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, + 0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x13A0, 0x13F5, + 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1E00, 0x1E00, 0x1E02, 0x1E02, + 0x1E04, 0x1E04, 0x1E06, 0x1E06, 0x1E08, 0x1E08, 0x1E0A, 0x1E0A, + 0x1E0C, 0x1E0C, 0x1E0E, 0x1E0E, 0x1E10, 0x1E10, 0x1E12, 0x1E12, + 0x1E14, 0x1E14, 0x1E16, 0x1E16, 0x1E18, 0x1E18, 0x1E1A, 0x1E1A, + 0x1E1C, 0x1E1C, 0x1E1E, 0x1E1E, 0x1E20, 0x1E20, 0x1E22, 0x1E22, + 0x1E24, 0x1E24, 0x1E26, 0x1E26, 0x1E28, 0x1E28, 0x1E2A, 0x1E2A, + 0x1E2C, 0x1E2C, 0x1E2E, 0x1E2E, 0x1E30, 0x1E30, 0x1E32, 0x1E32, + 0x1E34, 0x1E34, 0x1E36, 0x1E36, 0x1E38, 0x1E38, 0x1E3A, 0x1E3A, + 0x1E3C, 0x1E3C, 0x1E3E, 0x1E3E, 0x1E40, 0x1E40, 0x1E42, 0x1E42, + 0x1E44, 0x1E44, 0x1E46, 0x1E46, 0x1E48, 0x1E48, 0x1E4A, 0x1E4A, + 0x1E4C, 0x1E4C, 0x1E4E, 0x1E4E, 0x1E50, 0x1E50, 0x1E52, 0x1E52, + 0x1E54, 0x1E54, 0x1E56, 0x1E56, 0x1E58, 0x1E58, 0x1E5A, 0x1E5A, + 0x1E5C, 0x1E5C, 0x1E5E, 0x1E5E, 0x1E60, 0x1E60, 0x1E62, 0x1E62, + 0x1E64, 0x1E64, 0x1E66, 0x1E66, 0x1E68, 0x1E68, 0x1E6A, 0x1E6A, + 0x1E6C, 0x1E6C, 0x1E6E, 0x1E6E, 0x1E70, 0x1E70, 0x1E72, 0x1E72, + 0x1E74, 0x1E74, 0x1E76, 0x1E76, 0x1E78, 0x1E78, 0x1E7A, 0x1E7A, + 0x1E7C, 0x1E7C, 0x1E7E, 0x1E7E, 0x1E80, 0x1E80, 0x1E82, 0x1E82, + 0x1E84, 0x1E84, 0x1E86, 0x1E86, 0x1E88, 0x1E88, 0x1E8A, 0x1E8A, + 0x1E8C, 0x1E8C, 0x1E8E, 0x1E8E, 0x1E90, 0x1E90, 0x1E92, 0x1E92, + 0x1E94, 0x1E94, 0x1E9E, 0x1E9E, 0x1EA0, 0x1EA0, 0x1EA2, 0x1EA2, + 0x1EA4, 0x1EA4, 0x1EA6, 0x1EA6, 0x1EA8, 0x1EA8, 0x1EAA, 0x1EAA, + 0x1EAC, 0x1EAC, 0x1EAE, 0x1EAE, 0x1EB0, 0x1EB0, 0x1EB2, 0x1EB2, + 0x1EB4, 0x1EB4, 0x1EB6, 0x1EB6, 0x1EB8, 0x1EB8, 0x1EBA, 0x1EBA, + 0x1EBC, 0x1EBC, 0x1EBE, 0x1EBE, 0x1EC0, 0x1EC0, 0x1EC2, 0x1EC2, + 0x1EC4, 0x1EC4, 0x1EC6, 0x1EC6, 0x1EC8, 0x1EC8, 0x1ECA, 0x1ECA, + 0x1ECC, 0x1ECC, 0x1ECE, 0x1ECE, 0x1ED0, 0x1ED0, 0x1ED2, 0x1ED2, + 0x1ED4, 0x1ED4, 0x1ED6, 0x1ED6, 0x1ED8, 0x1ED8, 0x1EDA, 0x1EDA, + 0x1EDC, 0x1EDC, 0x1EDE, 0x1EDE, 0x1EE0, 0x1EE0, 0x1EE2, 0x1EE2, + 0x1EE4, 0x1EE4, 0x1EE6, 0x1EE6, 0x1EE8, 0x1EE8, 0x1EEA, 0x1EEA, + 0x1EEC, 0x1EEC, 0x1EEE, 0x1EEE, 0x1EF0, 0x1EF0, 0x1EF2, 0x1EF2, + 0x1EF4, 0x1EF4, 0x1EF6, 0x1EF6, 0x1EF8, 0x1EF8, 0x1EFA, 0x1EFA, + 0x1EFC, 0x1EFC, 0x1EFE, 0x1EFE, 0x1F08, 0x1F0F, 0x1F18, 0x1F1D, + 0x1F28, 0x1F2F, 0x1F38, 0x1F3F, 0x1F48, 0x1F4D, 0x1F59, 0x1F59, + 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F5F, 0x1F68, 0x1F6F, + 0x1FB8, 0x1FBB, 0x1FC8, 0x1FCB, 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, + 0x1FF8, 0x1FFB, 0x2102, 0x2102, 0x2107, 0x2107, 0x210B, 0x210D, + 0x2110, 0x2112, 0x2115, 0x2115, 0x2119, 0x211D, 0x2124, 0x2124, + 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D, 0x2130, 0x2133, + 0x213E, 0x213F, 0x2145, 0x2145, 0x2160, 0x216F, 0x2183, 0x2183, + 0x24B6, 0x24CF, 0x2C00, 0x2C2F, 0x2C60, 0x2C60, 0x2C62, 0x2C64, + 0x2C67, 0x2C67, 0x2C69, 0x2C69, 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70, + 0x2C72, 0x2C72, 0x2C75, 0x2C75, 0x2C7E, 0x2C80, 0x2C82, 0x2C82, + 0x2C84, 0x2C84, 0x2C86, 0x2C86, 0x2C88, 0x2C88, 0x2C8A, 0x2C8A, + 0x2C8C, 0x2C8C, 0x2C8E, 0x2C8E, 0x2C90, 0x2C90, 0x2C92, 0x2C92, + 0x2C94, 0x2C94, 0x2C96, 0x2C96, 0x2C98, 0x2C98, 0x2C9A, 0x2C9A, + 0x2C9C, 0x2C9C, 0x2C9E, 0x2C9E, 0x2CA0, 0x2CA0, 0x2CA2, 0x2CA2, + 0x2CA4, 0x2CA4, 0x2CA6, 0x2CA6, 0x2CA8, 0x2CA8, 0x2CAA, 0x2CAA, + 0x2CAC, 0x2CAC, 0x2CAE, 0x2CAE, 0x2CB0, 0x2CB0, 0x2CB2, 0x2CB2, + 0x2CB4, 0x2CB4, 0x2CB6, 0x2CB6, 0x2CB8, 0x2CB8, 0x2CBA, 0x2CBA, + 0x2CBC, 0x2CBC, 0x2CBE, 0x2CBE, 0x2CC0, 0x2CC0, 0x2CC2, 0x2CC2, + 0x2CC4, 0x2CC4, 0x2CC6, 0x2CC6, 0x2CC8, 0x2CC8, 0x2CCA, 0x2CCA, + 0x2CCC, 0x2CCC, 0x2CCE, 0x2CCE, 0x2CD0, 0x2CD0, 0x2CD2, 0x2CD2, + 0x2CD4, 0x2CD4, 0x2CD6, 0x2CD6, 0x2CD8, 0x2CD8, 0x2CDA, 0x2CDA, + 0x2CDC, 0x2CDC, 0x2CDE, 0x2CDE, 0x2CE0, 0x2CE0, 0x2CE2, 0x2CE2, + 0x2CEB, 0x2CEB, 0x2CED, 0x2CED, 0x2CF2, 0x2CF2, 0xA640, 0xA640, + 0xA642, 0xA642, 0xA644, 0xA644, 0xA646, 0xA646, 0xA648, 0xA648, + 0xA64A, 0xA64A, 0xA64C, 0xA64C, 0xA64E, 0xA64E, 0xA650, 0xA650, + 0xA652, 0xA652, 0xA654, 0xA654, 0xA656, 0xA656, 0xA658, 0xA658, + 0xA65A, 0xA65A, 0xA65C, 0xA65C, 0xA65E, 0xA65E, 0xA660, 0xA660, + 0xA662, 0xA662, 0xA664, 0xA664, 0xA666, 0xA666, 0xA668, 0xA668, + 0xA66A, 0xA66A, 0xA66C, 0xA66C, 0xA680, 0xA680, 0xA682, 0xA682, + 0xA684, 0xA684, 0xA686, 0xA686, 0xA688, 0xA688, 0xA68A, 0xA68A, + 0xA68C, 0xA68C, 0xA68E, 0xA68E, 0xA690, 0xA690, 0xA692, 0xA692, + 0xA694, 0xA694, 0xA696, 0xA696, 0xA698, 0xA698, 0xA69A, 0xA69A, + 0xA722, 0xA722, 0xA724, 0xA724, 0xA726, 0xA726, 0xA728, 0xA728, + 0xA72A, 0xA72A, 0xA72C, 0xA72C, 0xA72E, 0xA72E, 0xA732, 0xA732, + 0xA734, 0xA734, 0xA736, 0xA736, 0xA738, 0xA738, 0xA73A, 0xA73A, + 0xA73C, 0xA73C, 0xA73E, 0xA73E, 0xA740, 0xA740, 0xA742, 0xA742, + 0xA744, 0xA744, 0xA746, 0xA746, 0xA748, 0xA748, 0xA74A, 0xA74A, + 0xA74C, 0xA74C, 0xA74E, 0xA74E, 0xA750, 0xA750, 0xA752, 0xA752, + 0xA754, 0xA754, 0xA756, 0xA756, 0xA758, 0xA758, 0xA75A, 0xA75A, + 0xA75C, 0xA75C, 0xA75E, 0xA75E, 0xA760, 0xA760, 0xA762, 0xA762, + 0xA764, 0xA764, 0xA766, 0xA766, 0xA768, 0xA768, 0xA76A, 0xA76A, + 0xA76C, 0xA76C, 0xA76E, 0xA76E, 0xA779, 0xA779, 0xA77B, 0xA77B, + 0xA77D, 0xA77E, 0xA780, 0xA780, 0xA782, 0xA782, 0xA784, 0xA784, + 0xA786, 0xA786, 0xA78B, 0xA78B, 0xA78D, 0xA78D, 0xA790, 0xA790, + 0xA792, 0xA792, 0xA796, 0xA796, 0xA798, 0xA798, 0xA79A, 0xA79A, + 0xA79C, 0xA79C, 0xA79E, 0xA79E, 0xA7A0, 0xA7A0, 0xA7A2, 0xA7A2, + 0xA7A4, 0xA7A4, 0xA7A6, 0xA7A6, 0xA7A8, 0xA7A8, 0xA7AA, 0xA7AE, + 0xA7B0, 0xA7B4, 0xA7B6, 0xA7B6, 0xA7B8, 0xA7B8, 0xA7BA, 0xA7BA, + 0xA7BC, 0xA7BC, 0xA7BE, 0xA7BE, 0xA7C0, 0xA7C0, 0xA7C2, 0xA7C2, + 0xA7C4, 0xA7C7, 0xA7C9, 0xA7C9, 0xA7D0, 0xA7D0, 0xA7D6, 0xA7D6, + 0xA7D8, 0xA7D8, 0xA7F5, 0xA7F5, 0xFF21, 0xFF3A, 0x10400, 0x10427, + 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, + 0x10594, 0x10595, 0x10C80, 0x10CB2, 0x118A0, 0x118BF, 0x16E40, 0x16E5F, + 0x1D400, 0x1D419, 0x1D434, 0x1D44D, 0x1D468, 0x1D481, 0x1D49C, 0x1D49C, + 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, + 0x1D4AE, 0x1D4B5, 0x1D4D0, 0x1D4E9, 0x1D504, 0x1D505, 0x1D507, 0x1D50A, + 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D538, 0x1D539, 0x1D53B, 0x1D53E, + 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D56C, 0x1D585, + 0x1D5A0, 0x1D5B9, 0x1D5D4, 0x1D5ED, 0x1D608, 0x1D621, 0x1D63C, 0x1D655, + 0x1D670, 0x1D689, 0x1D6A8, 0x1D6C0, 0x1D6E2, 0x1D6FA, 0x1D71C, 0x1D734, + 0x1D756, 0x1D76E, 0x1D790, 0x1D7A8, 0x1D7CA, 0x1D7CA, 0x1E900, 0x1E921, + 0x1F130, 0x1F149, 0x1F150, 0x1F169, 0x1F170, 0x1F189, + // #88 (13898+4): bp=Variation_Selector:VS + 0x180B, 0x180D, 0x180F, 0x180F, 0xFE00, 0xFE0F, 0xE0100, 0xE01EF, + // #89 (13902+10): bp=White_Space:space + 0x0009, 0x000D, 0x0020, 0x0020, 0x0085, 0x0085, 0x00A0, 0x00A0, + 0x1680, 0x1680, 0x2000, 0x200A, 0x2028, 0x2029, 0x202F, 0x202F, + 0x205F, 0x205F, 0x3000, 0x3000, + // #90 (13912+763): bp=XID_Continue:XIDC + 0x0030, 0x0039, 0x0041, 0x005A, 0x005F, 0x005F, 0x0061, 0x007A, + 0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00B7, 0x00B7, 0x00BA, 0x00BA, + 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, 0x02C6, 0x02D1, + 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, 0x0300, 0x0374, + 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F, 0x0386, 0x038A, + 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481, + 0x0483, 0x0487, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x0559, + 0x0560, 0x0588, 0x0591, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x05C2, + 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F2, + 0x0610, 0x061A, 0x0620, 0x0669, 0x066E, 0x06D3, 0x06D5, 0x06DC, + 0x06DF, 0x06E8, 0x06EA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x074A, + 0x074D, 0x07B1, 0x07C0, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD, + 0x0800, 0x082D, 0x0840, 0x085B, 0x0860, 0x086A, 0x0870, 0x0887, + 0x0889, 0x088E, 0x0898, 0x08E1, 0x08E3, 0x0963, 0x0966, 0x096F, + 0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, + 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4, + 0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD, + 0x09DF, 0x09E3, 0x09E6, 0x09F1, 0x09FC, 0x09FC, 0x09FE, 0x09FE, + 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28, + 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39, + 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, + 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A75, + 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, + 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5, + 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3, + 0x0AE6, 0x0AEF, 0x0AF9, 0x0AFF, 0x0B01, 0x0B03, 0x0B05, 0x0B0C, + 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, + 0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D, + 0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B6F, + 0x0B71, 0x0B71, 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, + 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, + 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, + 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, + 0x0BE6, 0x0BEF, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, + 0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, + 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63, + 0x0C66, 0x0C6F, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90, + 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4, + 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE, + 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x0D00, 0x0D0C, + 0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4E, + 0x0D54, 0x0D57, 0x0D5F, 0x0D63, 0x0D66, 0x0D6F, 0x0D7A, 0x0D7F, + 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, + 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4, + 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF3, + 0x0E01, 0x0E3A, 0x0E40, 0x0E4E, 0x0E50, 0x0E59, 0x0E81, 0x0E82, + 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, + 0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECD, + 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F18, 0x0F19, + 0x0F20, 0x0F29, 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39, + 0x0F3E, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F84, 0x0F86, 0x0F97, + 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x1000, 0x1049, 0x1050, 0x109D, + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, + 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, + 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, + 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5, + 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A, + 0x135D, 0x135F, 0x1369, 0x1371, 0x1380, 0x138F, 0x13A0, 0x13F5, + 0x13F8, 0x13FD, 0x1401, 0x166C, 0x166F, 0x167F, 0x1681, 0x169A, + 0x16A0, 0x16EA, 0x16EE, 0x16F8, 0x1700, 0x1715, 0x171F, 0x1734, + 0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773, + 0x1780, 0x17D3, 0x17D7, 0x17D7, 0x17DC, 0x17DD, 0x17E0, 0x17E9, + 0x180B, 0x180D, 0x180F, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA, + 0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B, + 0x1946, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9, + 0x19D0, 0x19DA, 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A60, 0x1A7C, + 0x1A7F, 0x1A89, 0x1A90, 0x1A99, 0x1AA7, 0x1AA7, 0x1AB0, 0x1ABD, + 0x1ABF, 0x1ACE, 0x1B00, 0x1B4C, 0x1B50, 0x1B59, 0x1B6B, 0x1B73, + 0x1B80, 0x1BF3, 0x1C00, 0x1C37, 0x1C40, 0x1C49, 0x1C4D, 0x1C7D, + 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CD0, 0x1CD2, + 0x1CD4, 0x1CFA, 0x1D00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, + 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, + 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, + 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, + 0x1FD6, 0x1FDB, 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, + 0x203F, 0x2040, 0x2054, 0x2054, 0x2071, 0x2071, 0x207F, 0x207F, + 0x2090, 0x209C, 0x20D0, 0x20DC, 0x20E1, 0x20E1, 0x20E5, 0x20F0, + 0x2102, 0x2102, 0x2107, 0x2107, 0x210A, 0x2113, 0x2115, 0x2115, + 0x2118, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, + 0x212A, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149, 0x214E, 0x214E, + 0x2160, 0x2188, 0x2C00, 0x2CE4, 0x2CEB, 0x2CF3, 0x2D00, 0x2D25, + 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F, + 0x2D7F, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, + 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, + 0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, 0x3005, 0x3007, 0x3021, 0x302F, + 0x3031, 0x3035, 0x3038, 0x303C, 0x3041, 0x3096, 0x3099, 0x309A, + 0x309D, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF, 0x3105, 0x312F, + 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF, 0x3400, 0x4DBF, + 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C, 0xA610, 0xA62B, + 0xA640, 0xA66F, 0xA674, 0xA67D, 0xA67F, 0xA6F1, 0xA717, 0xA71F, + 0xA722, 0xA788, 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, + 0xA7D5, 0xA7D9, 0xA7F2, 0xA827, 0xA82C, 0xA82C, 0xA840, 0xA873, + 0xA880, 0xA8C5, 0xA8D0, 0xA8D9, 0xA8E0, 0xA8F7, 0xA8FB, 0xA8FB, + 0xA8FD, 0xA92D, 0xA930, 0xA953, 0xA960, 0xA97C, 0xA980, 0xA9C0, + 0xA9CF, 0xA9D9, 0xA9E0, 0xA9FE, 0xAA00, 0xAA36, 0xAA40, 0xAA4D, + 0xAA50, 0xAA59, 0xAA60, 0xAA76, 0xAA7A, 0xAAC2, 0xAADB, 0xAADD, + 0xAAE0, 0xAAEF, 0xAAF2, 0xAAF6, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, + 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, + 0xAB5C, 0xAB69, 0xAB70, 0xABEA, 0xABEC, 0xABED, 0xABF0, 0xABF9, + 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, + 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB28, + 0xFB2A, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, + 0xFB43, 0xFB44, 0xFB46, 0xFBB1, 0xFBD3, 0xFC5D, 0xFC64, 0xFD3D, + 0xFD50, 0xFD8F, 0xFD92, 0xFDC7, 0xFDF0, 0xFDF9, 0xFE00, 0xFE0F, + 0xFE20, 0xFE2F, 0xFE33, 0xFE34, 0xFE4D, 0xFE4F, 0xFE71, 0xFE71, + 0xFE73, 0xFE73, 0xFE77, 0xFE77, 0xFE79, 0xFE79, 0xFE7B, 0xFE7B, + 0xFE7D, 0xFE7D, 0xFE7F, 0xFEFC, 0xFF10, 0xFF19, 0xFF21, 0xFF3A, + 0xFF3F, 0xFF3F, 0xFF41, 0xFF5A, 0xFF66, 0xFFBE, 0xFFC2, 0xFFC7, + 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0x10000, 0x1000B, + 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x1004D, + 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10140, 0x10174, 0x101FD, 0x101FD, + 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x102E0, 0x102E0, 0x10300, 0x1031F, + 0x1032D, 0x1034A, 0x10350, 0x1037A, 0x10380, 0x1039D, 0x103A0, 0x103C3, + 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D, 0x104A0, 0x104A9, + 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527, 0x10530, 0x10563, + 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, + 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, + 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, 0x10780, 0x10785, + 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10800, 0x10805, 0x10808, 0x10808, + 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855, + 0x10860, 0x10876, 0x10880, 0x1089E, 0x108E0, 0x108F2, 0x108F4, 0x108F5, + 0x10900, 0x10915, 0x10920, 0x10939, 0x10980, 0x109B7, 0x109BE, 0x109BF, + 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13, 0x10A15, 0x10A17, + 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, 0x10A60, 0x10A7C, + 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE6, 0x10B00, 0x10B35, + 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48, + 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D27, 0x10D30, 0x10D39, + 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, + 0x10F27, 0x10F27, 0x10F30, 0x10F50, 0x10F70, 0x10F85, 0x10FB0, 0x10FC4, + 0x10FE0, 0x10FF6, 0x11000, 0x11046, 0x11066, 0x11075, 0x1107F, 0x110BA, + 0x110C2, 0x110C2, 0x110D0, 0x110E8, 0x110F0, 0x110F9, 0x11100, 0x11134, + 0x11136, 0x1113F, 0x11144, 0x11147, 0x11150, 0x11173, 0x11176, 0x11176, + 0x11180, 0x111C4, 0x111C9, 0x111CC, 0x111CE, 0x111DA, 0x111DC, 0x111DC, + 0x11200, 0x11211, 0x11213, 0x11237, 0x1123E, 0x1123E, 0x11280, 0x11286, + 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, 0x1129F, 0x112A8, + 0x112B0, 0x112EA, 0x112F0, 0x112F9, 0x11300, 0x11303, 0x11305, 0x1130C, + 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333, + 0x11335, 0x11339, 0x1133B, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D, + 0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363, 0x11366, 0x1136C, + 0x11370, 0x11374, 0x11400, 0x1144A, 0x11450, 0x11459, 0x1145E, 0x11461, + 0x11480, 0x114C5, 0x114C7, 0x114C7, 0x114D0, 0x114D9, 0x11580, 0x115B5, + 0x115B8, 0x115C0, 0x115D8, 0x115DD, 0x11600, 0x11640, 0x11644, 0x11644, + 0x11650, 0x11659, 0x11680, 0x116B8, 0x116C0, 0x116C9, 0x11700, 0x1171A, + 0x1171D, 0x1172B, 0x11730, 0x11739, 0x11740, 0x11746, 0x11800, 0x1183A, + 0x118A0, 0x118E9, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, + 0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x11943, + 0x11950, 0x11959, 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119E1, + 0x119E3, 0x119E4, 0x11A00, 0x11A3E, 0x11A47, 0x11A47, 0x11A50, 0x11A99, + 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C36, + 0x11C38, 0x11C40, 0x11C50, 0x11C59, 0x11C72, 0x11C8F, 0x11C92, 0x11CA7, + 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36, + 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59, + 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D90, 0x11D91, + 0x11D93, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 0x11EF6, 0x11FB0, 0x11FB0, + 0x12000, 0x12399, 0x12400, 0x1246E, 0x12480, 0x12543, 0x12F90, 0x12FF0, + 0x13000, 0x1342E, 0x14400, 0x14646, 0x16800, 0x16A38, 0x16A40, 0x16A5E, + 0x16A60, 0x16A69, 0x16A70, 0x16ABE, 0x16AC0, 0x16AC9, 0x16AD0, 0x16AED, + 0x16AF0, 0x16AF4, 0x16B00, 0x16B36, 0x16B40, 0x16B43, 0x16B50, 0x16B59, + 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F, 0x16F00, 0x16F4A, + 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE4, + 0x16FF0, 0x16FF1, 0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, + 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, + 0x1B150, 0x1B152, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, + 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1BC9D, 0x1BC9E, + 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D165, 0x1D169, 0x1D16D, 0x1D172, + 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, + 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, + 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, + 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, + 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, + 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, + 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, + 0x1D736, 0x1D74E, 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, + 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7CB, 0x1D7CE, 0x1D7FF, 0x1DA00, 0x1DA36, + 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F, + 0x1DAA1, 0x1DAAF, 0x1DF00, 0x1DF1E, 0x1E000, 0x1E006, 0x1E008, 0x1E018, + 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E100, 0x1E12C, + 0x1E130, 0x1E13D, 0x1E140, 0x1E149, 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AE, + 0x1E2C0, 0x1E2F9, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, + 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E8D0, 0x1E8D6, 0x1E900, 0x1E94B, + 0x1E950, 0x1E959, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, + 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, + 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, + 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, + 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, + 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, + 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, + 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, + 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1FBF0, 0x1FBF9, 0x20000, 0x2A6DF, + 0x2A700, 0x2B738, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, + 0x2F800, 0x2FA1D, 0x30000, 0x3134A, 0xE0100, 0xE01EF, + // #91 (14675+655): bp=XID_Start:XIDS + 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5, + 0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, + 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, + 0x0370, 0x0374, 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F, + 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1, + 0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F, 0x0531, 0x0556, + 0x0559, 0x0559, 0x0560, 0x0588, 0x05D0, 0x05EA, 0x05EF, 0x05F2, + 0x0620, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5, + 0x06E5, 0x06E6, 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, + 0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1, + 0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA, 0x0800, 0x0815, + 0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x0840, 0x0858, + 0x0860, 0x086A, 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9, + 0x0904, 0x0939, 0x093D, 0x093D, 0x0950, 0x0950, 0x0958, 0x0961, + 0x0971, 0x0980, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, + 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD, + 0x09CE, 0x09CE, 0x09DC, 0x09DD, 0x09DF, 0x09E1, 0x09F0, 0x09F1, + 0x09FC, 0x09FC, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28, + 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39, + 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A72, 0x0A74, 0x0A85, 0x0A8D, + 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, + 0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1, + 0x0AF9, 0x0AF9, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28, + 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3D, 0x0B3D, + 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B71, 0x0B71, 0x0B83, 0x0B83, + 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, + 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, + 0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, + 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A, + 0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C80, 0x0C80, 0x0C85, 0x0C8C, + 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, + 0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2, + 0x0D04, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, + 0x0D4E, 0x0D4E, 0x0D54, 0x0D56, 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F, + 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, + 0x0DC0, 0x0DC6, 0x0E01, 0x0E30, 0x0E32, 0x0E32, 0x0E40, 0x0E46, + 0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, + 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB2, 0x0EBD, 0x0EBD, + 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, + 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C, 0x1000, 0x102A, + 0x103F, 0x103F, 0x1050, 0x1055, 0x105A, 0x105D, 0x1061, 0x1061, + 0x1065, 0x1066, 0x106E, 0x1070, 0x1075, 0x1081, 0x108E, 0x108E, + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, + 0x10FC, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, + 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, + 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5, + 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A, + 0x1380, 0x138F, 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1401, 0x166C, + 0x166F, 0x167F, 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16EE, 0x16F8, + 0x1700, 0x1711, 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C, + 0x176E, 0x1770, 0x1780, 0x17B3, 0x17D7, 0x17D7, 0x17DC, 0x17DC, + 0x1820, 0x1878, 0x1880, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5, + 0x1900, 0x191E, 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, + 0x19B0, 0x19C9, 0x1A00, 0x1A16, 0x1A20, 0x1A54, 0x1AA7, 0x1AA7, + 0x1B05, 0x1B33, 0x1B45, 0x1B4C, 0x1B83, 0x1BA0, 0x1BAE, 0x1BAF, + 0x1BBA, 0x1BE5, 0x1C00, 0x1C23, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C7D, + 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC, + 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF, + 0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, + 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, + 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FBC, 0x1FBE, 0x1FBE, + 0x1FC2, 0x1FC4, 0x1FC6, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FDB, + 0x1FE0, 0x1FEC, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFC, 0x2071, 0x2071, + 0x207F, 0x207F, 0x2090, 0x209C, 0x2102, 0x2102, 0x2107, 0x2107, + 0x210A, 0x2113, 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124, + 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F, + 0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 0x2CE4, + 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, + 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F, 0x2D80, 0x2D96, + 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, + 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, + 0x3005, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303C, + 0x3041, 0x3096, 0x309D, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF, + 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF, + 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C, + 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, 0xA67F, 0xA69D, + 0xA6A0, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, 0xA78B, 0xA7CA, + 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA801, + 0xA803, 0xA805, 0xA807, 0xA80A, 0xA80C, 0xA822, 0xA840, 0xA873, + 0xA882, 0xA8B3, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FE, + 0xA90A, 0xA925, 0xA930, 0xA946, 0xA960, 0xA97C, 0xA984, 0xA9B2, + 0xA9CF, 0xA9CF, 0xA9E0, 0xA9E4, 0xA9E6, 0xA9EF, 0xA9FA, 0xA9FE, + 0xAA00, 0xAA28, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA76, + 0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6, + 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD, + 0xAAE0, 0xAAEA, 0xAAF2, 0xAAF4, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, + 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, + 0xAB5C, 0xAB69, 0xAB70, 0xABE2, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, + 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0xFB00, 0xFB06, + 0xFB13, 0xFB17, 0xFB1D, 0xFB1D, 0xFB1F, 0xFB28, 0xFB2A, 0xFB36, + 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44, + 0xFB46, 0xFBB1, 0xFBD3, 0xFC5D, 0xFC64, 0xFD3D, 0xFD50, 0xFD8F, + 0xFD92, 0xFDC7, 0xFDF0, 0xFDF9, 0xFE71, 0xFE71, 0xFE73, 0xFE73, + 0xFE77, 0xFE77, 0xFE79, 0xFE79, 0xFE7B, 0xFE7B, 0xFE7D, 0xFE7D, + 0xFE7F, 0xFEFC, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0xFF66, 0xFF9D, + 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, + 0xFFDA, 0xFFDC, 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, + 0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, + 0x10140, 0x10174, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x10300, 0x1031F, + 0x1032D, 0x1034A, 0x10350, 0x10375, 0x10380, 0x1039D, 0x103A0, 0x103C3, + 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 0x1049D, 0x104B0, 0x104D3, + 0x104D8, 0x104FB, 0x10500, 0x10527, 0x10530, 0x10563, 0x10570, 0x1057A, + 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1, + 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10600, 0x10736, + 0x10740, 0x10755, 0x10760, 0x10767, 0x10780, 0x10785, 0x10787, 0x107B0, + 0x107B2, 0x107BA, 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, + 0x10837, 0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855, 0x10860, 0x10876, + 0x10880, 0x1089E, 0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x10900, 0x10915, + 0x10920, 0x10939, 0x10980, 0x109B7, 0x109BE, 0x109BF, 0x10A00, 0x10A00, + 0x10A10, 0x10A13, 0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A60, 0x10A7C, + 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE4, 0x10B00, 0x10B35, + 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48, + 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D23, 0x10E80, 0x10EA9, + 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27, 0x10F30, 0x10F45, + 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, 0x11003, 0x11037, + 0x11071, 0x11072, 0x11075, 0x11075, 0x11083, 0x110AF, 0x110D0, 0x110E8, + 0x11103, 0x11126, 0x11144, 0x11144, 0x11147, 0x11147, 0x11150, 0x11172, + 0x11176, 0x11176, 0x11183, 0x111B2, 0x111C1, 0x111C4, 0x111DA, 0x111DA, + 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x1122B, 0x11280, 0x11286, + 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, 0x1129F, 0x112A8, + 0x112B0, 0x112DE, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, + 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133D, 0x1133D, + 0x11350, 0x11350, 0x1135D, 0x11361, 0x11400, 0x11434, 0x11447, 0x1144A, + 0x1145F, 0x11461, 0x11480, 0x114AF, 0x114C4, 0x114C5, 0x114C7, 0x114C7, + 0x11580, 0x115AE, 0x115D8, 0x115DB, 0x11600, 0x1162F, 0x11644, 0x11644, + 0x11680, 0x116AA, 0x116B8, 0x116B8, 0x11700, 0x1171A, 0x11740, 0x11746, + 0x11800, 0x1182B, 0x118A0, 0x118DF, 0x118FF, 0x11906, 0x11909, 0x11909, + 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x1192F, 0x1193F, 0x1193F, + 0x11941, 0x11941, 0x119A0, 0x119A7, 0x119AA, 0x119D0, 0x119E1, 0x119E1, + 0x119E3, 0x119E3, 0x11A00, 0x11A00, 0x11A0B, 0x11A32, 0x11A3A, 0x11A3A, + 0x11A50, 0x11A50, 0x11A5C, 0x11A89, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, + 0x11C00, 0x11C08, 0x11C0A, 0x11C2E, 0x11C40, 0x11C40, 0x11C72, 0x11C8F, + 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D30, 0x11D46, 0x11D46, + 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D89, 0x11D98, 0x11D98, + 0x11EE0, 0x11EF2, 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12400, 0x1246E, + 0x12480, 0x12543, 0x12F90, 0x12FF0, 0x13000, 0x1342E, 0x14400, 0x14646, + 0x16800, 0x16A38, 0x16A40, 0x16A5E, 0x16A70, 0x16ABE, 0x16AD0, 0x16AED, + 0x16B00, 0x16B2F, 0x16B40, 0x16B43, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, + 0x16E40, 0x16E7F, 0x16F00, 0x16F4A, 0x16F50, 0x16F50, 0x16F93, 0x16F9F, + 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, 0x17000, 0x187F7, 0x18800, 0x18CD5, + 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, + 0x1B000, 0x1B122, 0x1B150, 0x1B152, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, + 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, + 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, + 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, + 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, + 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, + 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D6C0, + 0x1D6C2, 0x1D6DA, 0x1D6DC, 0x1D6FA, 0x1D6FC, 0x1D714, 0x1D716, 0x1D734, + 0x1D736, 0x1D74E, 0x1D750, 0x1D76E, 0x1D770, 0x1D788, 0x1D78A, 0x1D7A8, + 0x1D7AA, 0x1D7C2, 0x1D7C4, 0x1D7CB, 0x1DF00, 0x1DF1E, 0x1E100, 0x1E12C, + 0x1E137, 0x1E13D, 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, + 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, + 0x1E800, 0x1E8C4, 0x1E900, 0x1E943, 0x1E94B, 0x1E94B, 0x1EE00, 0x1EE03, + 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, + 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, + 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, + 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, + 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, + 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, + 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, + 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, + 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, + 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, + // #92 (15330+3): sc=Adlam:Adlm + 0x1E900, 0x1E94B, 0x1E950, 0x1E959, 0x1E95E, 0x1E95F, + // #93 (15333+3): sc=Ahom:Ahom scx=Ahom:Ahom + 0x11700, 0x1171A, 0x1171D, 0x1172B, 0x11730, 0x11746, + // #94 (15336+1): sc=Anatolian_Hieroglyphs:Hluw scx=Anatolian_Hieroglyphs:Hluw + 0x14400, 0x14646, + // #95 (15337+57): sc=Arabic:Arab + 0x0600, 0x0604, 0x0606, 0x060B, 0x060D, 0x061A, 0x061C, 0x061E, + 0x0620, 0x063F, 0x0641, 0x064A, 0x0656, 0x066F, 0x0671, 0x06DC, + 0x06DE, 0x06FF, 0x0750, 0x077F, 0x0870, 0x088E, 0x0890, 0x0891, + 0x0898, 0x08E1, 0x08E3, 0x08FF, 0xFB50, 0xFBC2, 0xFBD3, 0xFD3D, + 0xFD40, 0xFD8F, 0xFD92, 0xFDC7, 0xFDCF, 0xFDCF, 0xFDF0, 0xFDFF, + 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0x10E60, 0x10E7E, 0x1EE00, 0x1EE03, + 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, + 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, + 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, + 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, + 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, + 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, + 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, + 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, + 0x1EEF0, 0x1EEF1, + // #96 (15394+4): sc=Armenian:Armn scx=Armenian:Armn + 0x0531, 0x0556, 0x0559, 0x058A, 0x058D, 0x058F, 0xFB13, 0xFB17, + // #97 (15398+2): sc=Avestan:Avst scx=Avestan:Avst + 0x10B00, 0x10B35, 0x10B39, 0x10B3F, + // #98 (15400+2): sc=Balinese:Bali scx=Balinese:Bali + 0x1B00, 0x1B4C, 0x1B50, 0x1B7E, + // #99 (15402+2): sc=Bamum:Bamu scx=Bamum:Bamu + 0xA6A0, 0xA6F7, 0x16800, 0x16A38, + // #100 (15404+2): sc=Bassa_Vah:Bass scx=Bassa_Vah:Bass + 0x16AD0, 0x16AED, 0x16AF0, 0x16AF5, + // #101 (15406+2): sc=Batak:Batk scx=Batak:Batk + 0x1BC0, 0x1BF3, 0x1BFC, 0x1BFF, + // #102 (15408+14): sc=Bengali:Beng + 0x0980, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, + 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4, + 0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD, + 0x09DF, 0x09E3, 0x09E6, 0x09FE, + // #103 (15422+4): sc=Bhaiksuki:Bhks scx=Bhaiksuki:Bhks + 0x11C00, 0x11C08, 0x11C0A, 0x11C36, 0x11C38, 0x11C45, 0x11C50, 0x11C6C, + // #104 (15426+3): sc=Bopomofo:Bopo + 0x02EA, 0x02EB, 0x3105, 0x312F, 0x31A0, 0x31BF, + // #105 (15429+3): sc=Brahmi:Brah scx=Brahmi:Brah + 0x11000, 0x1104D, 0x11052, 0x11075, 0x1107F, 0x1107F, + // #106 (15432+1): sc=Braille:Brai scx=Braille:Brai + 0x2800, 0x28FF, + // #107 (15433+2): sc=Buginese:Bugi + 0x1A00, 0x1A1B, 0x1A1E, 0x1A1F, + // #108 (15435+1): sc=Buhid:Buhd + 0x1740, 0x1753, + // #109 (15436+3): sc=Canadian_Aboriginal:Cans scx=Canadian_Aboriginal:Cans + 0x1400, 0x167F, 0x18B0, 0x18F5, 0x11AB0, 0x11ABF, + // #110 (15439+1): sc=Carian:Cari scx=Carian:Cari + 0x102A0, 0x102D0, + // #111 (15440+2): sc=Caucasian_Albanian:Aghb scx=Caucasian_Albanian:Aghb + 0x10530, 0x10563, 0x1056F, 0x1056F, + // #112 (15442+2): sc=Chakma:Cakm + 0x11100, 0x11134, 0x11136, 0x11147, + // #113 (15444+4): sc=Cham:Cham scx=Cham:Cham + 0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA50, 0xAA59, 0xAA5C, 0xAA5F, + // #114 (15448+3): sc=Cherokee:Cher scx=Cherokee:Cher + 0x13A0, 0x13F5, 0x13F8, 0x13FD, 0xAB70, 0xABBF, + // #115 (15451+1): sc=Chorasmian:Chrs scx=Chorasmian:Chrs + 0x10FB0, 0x10FCB, + // #116 (15452+174): sc=Common:Zyyy + 0x0000, 0x0040, 0x005B, 0x0060, 0x007B, 0x00A9, 0x00AB, 0x00B9, + 0x00BB, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x02B9, 0x02DF, + 0x02E5, 0x02E9, 0x02EC, 0x02FF, 0x0374, 0x0374, 0x037E, 0x037E, + 0x0385, 0x0385, 0x0387, 0x0387, 0x0605, 0x0605, 0x060C, 0x060C, + 0x061B, 0x061B, 0x061F, 0x061F, 0x0640, 0x0640, 0x06DD, 0x06DD, + 0x08E2, 0x08E2, 0x0964, 0x0965, 0x0E3F, 0x0E3F, 0x0FD5, 0x0FD8, + 0x10FB, 0x10FB, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x1802, 0x1803, + 0x1805, 0x1805, 0x1CD3, 0x1CD3, 0x1CE1, 0x1CE1, 0x1CE9, 0x1CEC, + 0x1CEE, 0x1CF3, 0x1CF5, 0x1CF7, 0x1CFA, 0x1CFA, 0x2000, 0x200B, + 0x200E, 0x2064, 0x2066, 0x2070, 0x2074, 0x207E, 0x2080, 0x208E, + 0x20A0, 0x20C0, 0x2100, 0x2125, 0x2127, 0x2129, 0x212C, 0x2131, + 0x2133, 0x214D, 0x214F, 0x215F, 0x2189, 0x218B, 0x2190, 0x2426, + 0x2440, 0x244A, 0x2460, 0x27FF, 0x2900, 0x2B73, 0x2B76, 0x2B95, + 0x2B97, 0x2BFF, 0x2E00, 0x2E5D, 0x2FF0, 0x2FFB, 0x3000, 0x3004, + 0x3006, 0x3006, 0x3008, 0x3020, 0x3030, 0x3037, 0x303C, 0x303F, + 0x309B, 0x309C, 0x30A0, 0x30A0, 0x30FB, 0x30FC, 0x3190, 0x319F, + 0x31C0, 0x31E3, 0x3220, 0x325F, 0x327F, 0x32CF, 0x32FF, 0x32FF, + 0x3358, 0x33FF, 0x4DC0, 0x4DFF, 0xA700, 0xA721, 0xA788, 0xA78A, + 0xA830, 0xA839, 0xA92E, 0xA92E, 0xA9CF, 0xA9CF, 0xAB5B, 0xAB5B, + 0xAB6A, 0xAB6B, 0xFD3E, 0xFD3F, 0xFE10, 0xFE19, 0xFE30, 0xFE52, + 0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFEFF, 0xFEFF, 0xFF01, 0xFF20, + 0xFF3B, 0xFF40, 0xFF5B, 0xFF65, 0xFF70, 0xFF70, 0xFF9E, 0xFF9F, + 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF9, 0xFFFD, 0x10100, 0x10102, + 0x10107, 0x10133, 0x10137, 0x1013F, 0x10190, 0x1019C, 0x101D0, 0x101FC, + 0x102E1, 0x102FB, 0x1BCA0, 0x1BCA3, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, + 0x1D100, 0x1D126, 0x1D129, 0x1D166, 0x1D16A, 0x1D17A, 0x1D183, 0x1D184, + 0x1D18C, 0x1D1A9, 0x1D1AE, 0x1D1EA, 0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356, + 0x1D360, 0x1D378, 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, + 0x1D4A2, 0x1D4A2, 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, + 0x1D4BB, 0x1D4BB, 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, + 0x1D50D, 0x1D514, 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, + 0x1D540, 0x1D544, 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, + 0x1D6A8, 0x1D7CB, 0x1D7CE, 0x1D7FF, 0x1EC71, 0x1ECB4, 0x1ED01, 0x1ED3D, + 0x1F000, 0x1F02B, 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF, + 0x1F0C1, 0x1F0CF, 0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD, 0x1F1E6, 0x1F1FF, + 0x1F201, 0x1F202, 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F250, 0x1F251, + 0x1F260, 0x1F265, 0x1F300, 0x1F6D7, 0x1F6DD, 0x1F6EC, 0x1F6F0, 0x1F6FC, + 0x1F700, 0x1F773, 0x1F780, 0x1F7D8, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, + 0x1F800, 0x1F80B, 0x1F810, 0x1F847, 0x1F850, 0x1F859, 0x1F860, 0x1F887, + 0x1F890, 0x1F8AD, 0x1F8B0, 0x1F8B1, 0x1F900, 0x1FA53, 0x1FA60, 0x1FA6D, + 0x1FA70, 0x1FA74, 0x1FA78, 0x1FA7C, 0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC, + 0x1FAB0, 0x1FABA, 0x1FAC0, 0x1FAC5, 0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7, + 0x1FAF0, 0x1FAF6, 0x1FB00, 0x1FB92, 0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9, + 0xE0001, 0xE0001, 0xE0020, 0xE007F, + // #117 (15626+3): sc=Coptic:Copt:Qaac + 0x03E2, 0x03EF, 0x2C80, 0x2CF3, 0x2CF9, 0x2CFF, + // #118 (15629+1): sc=Cypro_Minoan:Cpmn + 0x12F90, 0x12FF2, + // #119 (15630+4): sc=Cuneiform:Xsux scx=Cuneiform:Xsux + 0x12000, 0x12399, 0x12400, 0x1246E, 0x12470, 0x12474, 0x12480, 0x12543, + // #120 (15634+6): sc=Cypriot:Cprt + 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, + 0x1083C, 0x1083C, 0x1083F, 0x1083F, + // #121 (15640+8): sc=Cyrillic:Cyrl + 0x0400, 0x0484, 0x0487, 0x052F, 0x1C80, 0x1C88, 0x1D2B, 0x1D2B, + 0x1D78, 0x1D78, 0x2DE0, 0x2DFF, 0xA640, 0xA69F, 0xFE2E, 0xFE2F, + // #122 (15648+1): sc=Deseret:Dsrt scx=Deseret:Dsrt + 0x10400, 0x1044F, + // #123 (15649+4): sc=Devanagari:Deva + 0x0900, 0x0950, 0x0955, 0x0963, 0x0966, 0x097F, 0xA8E0, 0xA8FF, + // #124 (15653+8): sc=Dives_Akuru:Diak scx=Dives_Akuru:Diak + 0x11900, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916, + 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x11946, 0x11950, 0x11959, + // #125 (15661+1): sc=Dogra:Dogr + 0x11800, 0x1183B, + // #126 (15662+5): sc=Duployan:Dupl + 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, + 0x1BC9C, 0x1BC9F, + // #127 (15667+2): sc=Egyptian_Hieroglyphs:Egyp scx=Egyptian_Hieroglyphs:Egyp + 0x13000, 0x1342E, 0x13430, 0x13438, + // #128 (15669+1): sc=Elbasan:Elba scx=Elbasan:Elba + 0x10500, 0x10527, + // #129 (15670+1): sc=Elymaic:Elym scx=Elymaic:Elym + 0x10FE0, 0x10FF6, + // #130 (15671+36): sc=Ethiopic:Ethi scx=Ethiopic:Ethi + 0x1200, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, + 0x125A, 0x125D, 0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, + 0x12B2, 0x12B5, 0x12B8, 0x12BE, 0x12C0, 0x12C0, 0x12C2, 0x12C5, + 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315, 0x1318, 0x135A, + 0x135D, 0x137C, 0x1380, 0x1399, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6, + 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, + 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0xAB01, 0xAB06, + 0xAB09, 0xAB0E, 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, + 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, + // #131 (15707+10): sc=Georgian:Geor + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, + 0x10FC, 0x10FF, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x2D00, 0x2D25, + 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, + // #132 (15717+6): sc=Glagolitic:Glag + 0x2C00, 0x2C5F, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, + 0x1E023, 0x1E024, 0x1E026, 0x1E02A, + // #133 (15723+1): sc=Gothic:Goth scx=Gothic:Goth + 0x10330, 0x1034A, + // #134 (15724+15): sc=Grantha:Gran + 0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, + 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133C, 0x11344, + 0x11347, 0x11348, 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357, + 0x1135D, 0x11363, 0x11366, 0x1136C, 0x11370, 0x11374, + // #135 (15739+36): sc=Greek:Grek + 0x0370, 0x0373, 0x0375, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F, + 0x0384, 0x0384, 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, + 0x038E, 0x03A1, 0x03A3, 0x03E1, 0x03F0, 0x03FF, 0x1D26, 0x1D2A, + 0x1D5D, 0x1D61, 0x1D66, 0x1D6A, 0x1DBF, 0x1DBF, 0x1F00, 0x1F15, + 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57, + 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, + 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, 0x1FC6, 0x1FD3, 0x1FD6, 0x1FDB, + 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFE, 0x2126, 0x2126, + 0xAB65, 0xAB65, 0x10140, 0x1018E, 0x101A0, 0x101A0, 0x1D200, 0x1D245, + // #136 (15775+14): sc=Gujarati:Gujr + 0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, + 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5, + 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3, + 0x0AE6, 0x0AF1, 0x0AF9, 0x0AFF, + // #137 (15789+6): sc=Gunjala_Gondi:Gong + 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D90, 0x11D91, + 0x11D93, 0x11D98, 0x11DA0, 0x11DA9, + // #138 (15795+16): sc=Gurmukhi:Guru + 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28, + 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39, + 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, + 0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A76, + // #139 (15811+20): sc=Han:Hani + 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x3005, 0x3005, + 0x3007, 0x3007, 0x3021, 0x3029, 0x3038, 0x303B, 0x3400, 0x4DBF, + 0x4E00, 0x9FFF, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0x16FE2, 0x16FE3, + 0x16FF0, 0x16FF1, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D, + 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, 0x30000, 0x3134A, + // #140 (15831+14): sc=Hangul:Hang + 0x1100, 0x11FF, 0x302E, 0x302F, 0x3131, 0x318E, 0x3200, 0x321E, + 0x3260, 0x327E, 0xA960, 0xA97C, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, + 0xD7CB, 0xD7FB, 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, + 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, + // #141 (15845+2): sc=Hanifi_Rohingya:Rohg + 0x10D00, 0x10D27, 0x10D30, 0x10D39, + // #142 (15847+1): sc=Hanunoo:Hano + 0x1720, 0x1734, + // #143 (15848+3): sc=Hatran:Hatr scx=Hatran:Hatr + 0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x108FB, 0x108FF, + // #144 (15851+9): sc=Hebrew:Hebr scx=Hebrew:Hebr + 0x0591, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F4, 0xFB1D, 0xFB36, + 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44, + 0xFB46, 0xFB4F, + // #145 (15860+5): sc=Hiragana:Hira + 0x3041, 0x3096, 0x309D, 0x309F, 0x1B001, 0x1B11F, 0x1B150, 0x1B152, + 0x1F200, 0x1F200, + // #146 (15865+2): sc=Imperial_Aramaic:Armi scx=Imperial_Aramaic:Armi + 0x10840, 0x10855, 0x10857, 0x1085F, + // #147 (15867+29): sc=Inherited:Zinh:Qaai + 0x0300, 0x036F, 0x0485, 0x0486, 0x064B, 0x0655, 0x0670, 0x0670, + 0x0951, 0x0954, 0x1AB0, 0x1ACE, 0x1CD0, 0x1CD2, 0x1CD4, 0x1CE0, + 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF8, 0x1CF9, + 0x1DC0, 0x1DFF, 0x200C, 0x200D, 0x20D0, 0x20F0, 0x302A, 0x302D, + 0x3099, 0x309A, 0xFE00, 0xFE0F, 0xFE20, 0xFE2D, 0x101FD, 0x101FD, + 0x102E0, 0x102E0, 0x1133B, 0x1133B, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, + 0x1D167, 0x1D169, 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, + 0xE0100, 0xE01EF, + // #148 (15896+2): sc=Inscriptional_Pahlavi:Phli scx=Inscriptional_Pahlavi:Phli + 0x10B60, 0x10B72, 0x10B78, 0x10B7F, + // #149 (15898+2): sc=Inscriptional_Parthian:Prti scx=Inscriptional_Parthian:Prti + 0x10B40, 0x10B55, 0x10B58, 0x10B5F, + // #150 (15900+3): sc=Javanese:Java + 0xA980, 0xA9CD, 0xA9D0, 0xA9D9, 0xA9DE, 0xA9DF, + // #151 (15903+2): sc=Kaithi:Kthi + 0x11080, 0x110C2, 0x110CD, 0x110CD, + // #152 (15905+13): sc=Kannada:Knda + 0x0C80, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, + 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4, 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, + 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, + 0x0CF1, 0x0CF2, + // #153 (15918+13): sc=Katakana:Kana + 0x30A1, 0x30FA, 0x30FD, 0x30FF, 0x31F0, 0x31FF, 0x32D0, 0x32FE, + 0x3300, 0x3357, 0xFF66, 0xFF6F, 0xFF71, 0xFF9D, 0x1AFF0, 0x1AFF3, + 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B000, 0x1B120, 0x1B122, + 0x1B164, 0x1B167, + // #154 (15931+2): sc=Kayah_Li:Kali + 0xA900, 0xA92D, 0xA92F, 0xA92F, + // #155 (15933+8): sc=Kharoshthi:Khar scx=Kharoshthi:Khar + 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13, 0x10A15, 0x10A17, + 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A48, 0x10A50, 0x10A58, + // #156 (15941+2): sc=Khitan_Small_Script:Kits scx=Khitan_Small_Script:Kits + 0x16FE4, 0x16FE4, 0x18B00, 0x18CD5, + // #157 (15943+4): sc=Khmer:Khmr scx=Khmer:Khmr + 0x1780, 0x17DD, 0x17E0, 0x17E9, 0x17F0, 0x17F9, 0x19E0, 0x19FF, + // #158 (15947+2): sc=Khojki:Khoj + 0x11200, 0x11211, 0x11213, 0x1123E, + // #159 (15949+2): sc=Khudawadi:Sind + 0x112B0, 0x112EA, 0x112F0, 0x112F9, + // #160 (15951+11): sc=Lao:Laoo scx=Lao:Laoo + 0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, + 0x0EA5, 0x0EA5, 0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, + 0x0EC8, 0x0ECD, 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, + // #161 (15962+38): sc=Latin:Latn + 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00BA, 0x00BA, + 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02B8, 0x02E0, 0x02E4, + 0x1D00, 0x1D25, 0x1D2C, 0x1D5C, 0x1D62, 0x1D65, 0x1D6B, 0x1D77, + 0x1D79, 0x1DBE, 0x1E00, 0x1EFF, 0x2071, 0x2071, 0x207F, 0x207F, + 0x2090, 0x209C, 0x212A, 0x212B, 0x2132, 0x2132, 0x214E, 0x214E, + 0x2160, 0x2188, 0x2C60, 0x2C7F, 0xA722, 0xA787, 0xA78B, 0xA7CA, + 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA7FF, + 0xAB30, 0xAB5A, 0xAB5C, 0xAB64, 0xAB66, 0xAB69, 0xFB00, 0xFB06, + 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10780, 0x10785, 0x10787, 0x107B0, + 0x107B2, 0x107BA, 0x1DF00, 0x1DF1E, + // #162 (16000+3): sc=Lepcha:Lepc scx=Lepcha:Lepc + 0x1C00, 0x1C37, 0x1C3B, 0x1C49, 0x1C4D, 0x1C4F, + // #163 (16003+5): sc=Limbu:Limb + 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B, 0x1940, 0x1940, + 0x1944, 0x194F, + // #164 (16008+3): sc=Linear_A:Lina + 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, + // #165 (16011+7): sc=Linear_B:Linb + 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D, + 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, + // #166 (16018+2): sc=Lisu:Lisu scx=Lisu:Lisu + 0xA4D0, 0xA4FF, 0x11FB0, 0x11FB0, + // #167 (16020+1): sc=Lycian:Lyci scx=Lycian:Lyci + 0x10280, 0x1029C, + // #168 (16021+2): sc=Lydian:Lydi scx=Lydian:Lydi + 0x10920, 0x10939, 0x1093F, 0x1093F, + // #169 (16023+1): sc=Mahajani:Mahj + 0x11150, 0x11176, + // #170 (16024+1): sc=Makasar:Maka scx=Makasar:Maka + 0x11EE0, 0x11EF8, + // #171 (16025+7): sc=Malayalam:Mlym + 0x0D00, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48, + 0x0D4A, 0x0D4F, 0x0D54, 0x0D63, 0x0D66, 0x0D7F, + // #172 (16032+2): sc=Mandaic:Mand + 0x0840, 0x085B, 0x085E, 0x085E, + // #173 (16034+2): sc=Manichaean:Mani + 0x10AC0, 0x10AE6, 0x10AEB, 0x10AF6, + // #174 (16036+3): sc=Marchen:Marc scx=Marchen:Marc + 0x11C70, 0x11C8F, 0x11C92, 0x11CA7, 0x11CA9, 0x11CB6, + // #175 (16039+7): sc=Masaram_Gondi:Gonm + 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36, 0x11D3A, 0x11D3A, + 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59, + // #176 (16046+1): sc=Medefaidrin:Medf scx=Medefaidrin:Medf + 0x16E40, 0x16E9A, + // #177 (16047+3): sc=Meetei_Mayek:Mtei scx=Meetei_Mayek:Mtei + 0xAAE0, 0xAAF6, 0xABC0, 0xABED, 0xABF0, 0xABF9, + // #178 (16050+2): sc=Mende_Kikakui:Mend scx=Mende_Kikakui:Mend + 0x1E800, 0x1E8C4, 0x1E8C7, 0x1E8D6, + // #179 (16052+3): sc=Meroitic_Cursive:Merc scx=Meroitic_Cursive:Merc + 0x109A0, 0x109B7, 0x109BC, 0x109CF, 0x109D2, 0x109FF, + // #180 (16055+1): sc=Meroitic_Hieroglyphs:Mero scx=Meroitic_Hieroglyphs:Mero + 0x10980, 0x1099F, + // #181 (16056+3): sc=Miao:Plrd scx=Miao:Plrd + 0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, + // #182 (16059+2): sc=Modi:Modi + 0x11600, 0x11644, 0x11650, 0x11659, + // #183 (16061+6): sc=Mongolian:Mong + 0x1800, 0x1801, 0x1804, 0x1804, 0x1806, 0x1819, 0x1820, 0x1878, + 0x1880, 0x18AA, 0x11660, 0x1166C, + // #184 (16067+3): sc=Mro:Mroo scx=Mro:Mroo + 0x16A40, 0x16A5E, 0x16A60, 0x16A69, 0x16A6E, 0x16A6F, + // #185 (16070+5): sc=Multani:Mult + 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, + 0x1129F, 0x112A9, + // #186 (16075+3): sc=Myanmar:Mymr + 0x1000, 0x109F, 0xA9E0, 0xA9FE, 0xAA60, 0xAA7F, + // #187 (16078+2): sc=Nabataean:Nbat scx=Nabataean:Nbat + 0x10880, 0x1089E, 0x108A7, 0x108AF, + // #188 (16080+3): sc=Nandinagari:Nand + 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119E4, + // #189 (16083+4): sc=New_Tai_Lue:Talu scx=New_Tai_Lue:Talu + 0x1980, 0x19AB, 0x19B0, 0x19C9, 0x19D0, 0x19DA, 0x19DE, 0x19DF, + // #190 (16087+2): sc=Newa:Newa scx=Newa:Newa + 0x11400, 0x1145B, 0x1145D, 0x11461, + // #191 (16089+2): sc=Nko:Nkoo + 0x07C0, 0x07FA, 0x07FD, 0x07FF, + // #192 (16091+2): sc=Nushu:Nshu scx=Nushu:Nshu + 0x16FE1, 0x16FE1, 0x1B170, 0x1B2FB, + // #193 (16093+4): sc=Nyiakeng_Puachue_Hmong:Hmnp scx=Nyiakeng_Puachue_Hmong:Hmnp + 0x1E100, 0x1E12C, 0x1E130, 0x1E13D, 0x1E140, 0x1E149, 0x1E14E, 0x1E14F, + // #194 (16097+1): sc=Ogham:Ogam scx=Ogham:Ogam + 0x1680, 0x169C, + // #195 (16098+1): sc=Ol_Chiki:Olck scx=Ol_Chiki:Olck + 0x1C50, 0x1C7F, + // #196 (16099+3): sc=Old_Hungarian:Hung scx=Old_Hungarian:Hung + 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10CFA, 0x10CFF, + // #197 (16102+2): sc=Old_Italic:Ital scx=Old_Italic:Ital + 0x10300, 0x10323, 0x1032D, 0x1032F, + // #198 (16104+1): sc=Old_North_Arabian:Narb scx=Old_North_Arabian:Narb + 0x10A80, 0x10A9F, + // #199 (16105+1): sc=Old_Permic:Perm + 0x10350, 0x1037A, + // #200 (16106+2): sc=Old_Persian:Xpeo scx=Old_Persian:Xpeo + 0x103A0, 0x103C3, 0x103C8, 0x103D5, + // #201 (16108+1): sc=Old_Sogdian:Sogo scx=Old_Sogdian:Sogo + 0x10F00, 0x10F27, + // #202 (16109+1): sc=Old_South_Arabian:Sarb scx=Old_South_Arabian:Sarb + 0x10A60, 0x10A7F, + // #203 (16110+1): sc=Old_Turkic:Orkh scx=Old_Turkic:Orkh + 0x10C00, 0x10C48, + // #204 (16111+1): sc=Old_Uyghur:Ougr + 0x10F70, 0x10F89, + // #205 (16112+14): sc=Oriya:Orya + 0x0B01, 0x0B03, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28, + 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3C, 0x0B44, + 0x0B47, 0x0B48, 0x0B4B, 0x0B4D, 0x0B55, 0x0B57, 0x0B5C, 0x0B5D, + 0x0B5F, 0x0B63, 0x0B66, 0x0B77, + // #206 (16126+2): sc=Osage:Osge scx=Osage:Osge + 0x104B0, 0x104D3, 0x104D8, 0x104FB, + // #207 (16128+2): sc=Osmanya:Osma scx=Osmanya:Osma + 0x10480, 0x1049D, 0x104A0, 0x104A9, + // #208 (16130+5): sc=Pahawh_Hmong:Hmng scx=Pahawh_Hmong:Hmng + 0x16B00, 0x16B45, 0x16B50, 0x16B59, 0x16B5B, 0x16B61, 0x16B63, 0x16B77, + 0x16B7D, 0x16B8F, + // #209 (16135+1): sc=Palmyrene:Palm scx=Palmyrene:Palm + 0x10860, 0x1087F, + // #210 (16136+1): sc=Pau_Cin_Hau:Pauc scx=Pau_Cin_Hau:Pauc + 0x11AC0, 0x11AF8, + // #211 (16137+1): sc=Phags_Pa:Phag + 0xA840, 0xA877, + // #212 (16138+2): sc=Phoenician:Phnx scx=Phoenician:Phnx + 0x10900, 0x1091B, 0x1091F, 0x1091F, + // #213 (16140+3): sc=Psalter_Pahlavi:Phlp + 0x10B80, 0x10B91, 0x10B99, 0x10B9C, 0x10BA9, 0x10BAF, + // #214 (16143+2): sc=Rejang:Rjng scx=Rejang:Rjng + 0xA930, 0xA953, 0xA95F, 0xA95F, + // #215 (16145+2): sc=Runic:Runr scx=Runic:Runr + 0x16A0, 0x16EA, 0x16EE, 0x16F8, + // #216 (16147+2): sc=Samaritan:Samr scx=Samaritan:Samr + 0x0800, 0x082D, 0x0830, 0x083E, + // #217 (16149+2): sc=Saurashtra:Saur scx=Saurashtra:Saur + 0xA880, 0xA8C5, 0xA8CE, 0xA8D9, + // #218 (16151+1): sc=Sharada:Shrd + 0x11180, 0x111DF, + // #219 (16152+1): sc=Shavian:Shaw scx=Shavian:Shaw + 0x10450, 0x1047F, + // #220 (16153+2): sc=Siddham:Sidd scx=Siddham:Sidd + 0x11580, 0x115B5, 0x115B8, 0x115DD, + // #221 (16155+3): sc=SignWriting:Sgnw scx=SignWriting:Sgnw + 0x1D800, 0x1DA8B, 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF, + // #222 (16158+13): sc=Sinhala:Sinh + 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, + 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4, + 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF4, + 0x111E1, 0x111F4, + // #223 (16171+1): sc=Sogdian:Sogd + 0x10F30, 0x10F59, + // #224 (16172+2): sc=Sora_Sompeng:Sora scx=Sora_Sompeng:Sora + 0x110D0, 0x110E8, 0x110F0, 0x110F9, + // #225 (16174+1): sc=Soyombo:Soyo scx=Soyombo:Soyo + 0x11A50, 0x11AA2, + // #226 (16175+2): sc=Sundanese:Sund scx=Sundanese:Sund + 0x1B80, 0x1BBF, 0x1CC0, 0x1CC7, + // #227 (16177+1): sc=Syloti_Nagri:Sylo + 0xA800, 0xA82C, + // #228 (16178+4): sc=Syriac:Syrc + 0x0700, 0x070D, 0x070F, 0x074A, 0x074D, 0x074F, 0x0860, 0x086A, + // #229 (16182+2): sc=Tagalog:Tglg + 0x1700, 0x1715, 0x171F, 0x171F, + // #230 (16184+3): sc=Tagbanwa:Tagb + 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773, + // #231 (16187+2): sc=Tai_Le:Tale + 0x1950, 0x196D, 0x1970, 0x1974, + // #232 (16189+5): sc=Tai_Tham:Lana scx=Tai_Tham:Lana + 0x1A20, 0x1A5E, 0x1A60, 0x1A7C, 0x1A7F, 0x1A89, 0x1A90, 0x1A99, + 0x1AA0, 0x1AAD, + // #233 (16194+2): sc=Tai_Viet:Tavt scx=Tai_Viet:Tavt + 0xAA80, 0xAAC2, 0xAADB, 0xAADF, + // #234 (16196+2): sc=Takri:Takr + 0x11680, 0x116B9, 0x116C0, 0x116C9, + // #235 (16198+18): sc=Tamil:Taml + 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, + 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, + 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, + 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, 0x0BE6, 0x0BFA, + 0x11FC0, 0x11FF1, 0x11FFF, 0x11FFF, + // #236 (16216+2): sc=Tangsa:Tnsa scx=Tangsa:Tnsa + 0x16A70, 0x16ABE, 0x16AC0, 0x16AC9, + // #237 (16218+4): sc=Tangut:Tang scx=Tangut:Tang + 0x16FE0, 0x16FE0, 0x17000, 0x187F7, 0x18800, 0x18AFF, 0x18D00, 0x18D08, + // #238 (16222+13): sc=Telugu:Telu + 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39, + 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, + 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63, 0x0C66, 0x0C6F, + 0x0C77, 0x0C7F, + // #239 (16235+1): sc=Thaana:Thaa + 0x0780, 0x07B1, + // #240 (16236+2): sc=Thai:Thai scx=Thai:Thai + 0x0E01, 0x0E3A, 0x0E40, 0x0E5B, + // #241 (16238+7): sc=Tibetan:Tibt scx=Tibetan:Tibt + 0x0F00, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F97, 0x0F99, 0x0FBC, + 0x0FBE, 0x0FCC, 0x0FCE, 0x0FD4, 0x0FD9, 0x0FDA, + // #242 (16245+3): sc=Tifinagh:Tfng scx=Tifinagh:Tfng + 0x2D30, 0x2D67, 0x2D6F, 0x2D70, 0x2D7F, 0x2D7F, + // #243 (16248+2): sc=Tirhuta:Tirh + 0x11480, 0x114C7, 0x114D0, 0x114D9, + // #244 (16250+1): sc=Toto scx=Toto + 0x1E290, 0x1E2AE, + // #245 (16251+2): sc=Ugaritic:Ugar scx=Ugaritic:Ugar + 0x10380, 0x1039D, 0x1039F, 0x1039F, + // #246 (16253+1): sc=Vai:Vaii scx=Vai:Vaii + 0xA500, 0xA62B, + // #247 (16254+8): sc=Vithkuqi:Vith scx=Vithkuqi:Vith + 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, + 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, + // #248 (16262+2): sc=Wancho:Wcho scx=Wancho:Wcho + 0x1E2C0, 0x1E2F9, 0x1E2FF, 0x1E2FF, + // #249 (16264+2): sc=Warang_Citi:Wara scx=Warang_Citi:Wara + 0x118A0, 0x118F2, 0x118FF, 0x118FF, + // #250 (16266+3): sc=Yezidi:Yezi + 0x10E80, 0x10EA9, 0x10EAB, 0x10EAD, 0x10EB0, 0x10EB1, + // #251 (16269+2): sc=Yi:Yiii + 0xA000, 0xA48C, 0xA490, 0xA4C6, + // #252 (16271+1): sc=Zanabazar_Square:Zanb scx=Zanabazar_Square:Zanb + 0x11A00, 0x11A47, + // #253 (16272+5): scx=Adlam:Adlm + 0x061F, 0x061F, 0x0640, 0x0640, 0x1E900, 0x1E94B, 0x1E950, 0x1E959, + 0x1E95E, 0x1E95F, + // #254 (16277+51): scx=Arabic:Arab + 0x0600, 0x0604, 0x0606, 0x06DC, 0x06DE, 0x06FF, 0x0750, 0x077F, + 0x0870, 0x088E, 0x0890, 0x0891, 0x0898, 0x08E1, 0x08E3, 0x08FF, + 0xFB50, 0xFBC2, 0xFBD3, 0xFD8F, 0xFD92, 0xFDC7, 0xFDCF, 0xFDCF, + 0xFDF0, 0xFDFF, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0x102E0, 0x102FB, + 0x10E60, 0x10E7E, 0x1EE00, 0x1EE03, 0x1EE05, 0x1EE1F, 0x1EE21, 0x1EE22, + 0x1EE24, 0x1EE24, 0x1EE27, 0x1EE27, 0x1EE29, 0x1EE32, 0x1EE34, 0x1EE37, + 0x1EE39, 0x1EE39, 0x1EE3B, 0x1EE3B, 0x1EE42, 0x1EE42, 0x1EE47, 0x1EE47, + 0x1EE49, 0x1EE49, 0x1EE4B, 0x1EE4B, 0x1EE4D, 0x1EE4F, 0x1EE51, 0x1EE52, + 0x1EE54, 0x1EE54, 0x1EE57, 0x1EE57, 0x1EE59, 0x1EE59, 0x1EE5B, 0x1EE5B, + 0x1EE5D, 0x1EE5D, 0x1EE5F, 0x1EE5F, 0x1EE61, 0x1EE62, 0x1EE64, 0x1EE64, + 0x1EE67, 0x1EE6A, 0x1EE6C, 0x1EE72, 0x1EE74, 0x1EE77, 0x1EE79, 0x1EE7C, + 0x1EE7E, 0x1EE7E, 0x1EE80, 0x1EE89, 0x1EE8B, 0x1EE9B, 0x1EEA1, 0x1EEA3, + 0x1EEA5, 0x1EEA9, 0x1EEAB, 0x1EEBB, 0x1EEF0, 0x1EEF1, + // #255 (16328+26): scx=Bengali:Beng + 0x0951, 0x0952, 0x0964, 0x0965, 0x0980, 0x0983, 0x0985, 0x098C, + 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2, + 0x09B6, 0x09B9, 0x09BC, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CE, + 0x09D7, 0x09D7, 0x09DC, 0x09DD, 0x09DF, 0x09E3, 0x09E6, 0x09FE, + 0x1CD0, 0x1CD0, 0x1CD2, 0x1CD2, 0x1CD5, 0x1CD6, 0x1CD8, 0x1CD8, + 0x1CE1, 0x1CE1, 0x1CEA, 0x1CEA, 0x1CED, 0x1CED, 0x1CF2, 0x1CF2, + 0x1CF5, 0x1CF7, 0xA8F1, 0xA8F1, + // #256 (16354+12): scx=Bopomofo:Bopo + 0x02EA, 0x02EB, 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, + 0x302A, 0x302D, 0x3030, 0x3030, 0x3037, 0x3037, 0x30FB, 0x30FB, + 0x3105, 0x312F, 0x31A0, 0x31BF, 0xFE45, 0xFE46, 0xFF61, 0xFF65, + // #257 (16366+3): scx=Buginese:Bugi + 0x1A00, 0x1A1B, 0x1A1E, 0x1A1F, 0xA9CF, 0xA9CF, + // #258 (16369+2): scx=Buhid:Buhd + 0x1735, 0x1736, 0x1740, 0x1753, + // #259 (16371+4): scx=Chakma:Cakm + 0x09E6, 0x09EF, 0x1040, 0x1049, 0x11100, 0x11134, 0x11136, 0x11147, + // #260 (16375+148): scx=Common:Zyyy + 0x0000, 0x0040, 0x005B, 0x0060, 0x007B, 0x00A9, 0x00AB, 0x00B9, + 0x00BB, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x02B9, 0x02DF, + 0x02E5, 0x02E9, 0x02EC, 0x02FF, 0x0374, 0x0374, 0x037E, 0x037E, + 0x0385, 0x0385, 0x0387, 0x0387, 0x0605, 0x0605, 0x06DD, 0x06DD, + 0x08E2, 0x08E2, 0x0E3F, 0x0E3F, 0x0FD5, 0x0FD8, 0x16EB, 0x16ED, + 0x2000, 0x200B, 0x200E, 0x202E, 0x2030, 0x2064, 0x2066, 0x2070, + 0x2074, 0x207E, 0x2080, 0x208E, 0x20A0, 0x20C0, 0x2100, 0x2125, + 0x2127, 0x2129, 0x212C, 0x2131, 0x2133, 0x214D, 0x214F, 0x215F, + 0x2189, 0x218B, 0x2190, 0x2426, 0x2440, 0x244A, 0x2460, 0x27FF, + 0x2900, 0x2B73, 0x2B76, 0x2B95, 0x2B97, 0x2BFF, 0x2E00, 0x2E42, + 0x2E44, 0x2E5D, 0x2FF0, 0x2FFB, 0x3000, 0x3000, 0x3004, 0x3004, + 0x3012, 0x3012, 0x3020, 0x3020, 0x3036, 0x3036, 0x3248, 0x325F, + 0x327F, 0x327F, 0x32B1, 0x32BF, 0x32CC, 0x32CF, 0x3371, 0x337A, + 0x3380, 0x33DF, 0x33FF, 0x33FF, 0x4DC0, 0x4DFF, 0xA708, 0xA721, + 0xA788, 0xA78A, 0xAB5B, 0xAB5B, 0xAB6A, 0xAB6B, 0xFE10, 0xFE19, + 0xFE30, 0xFE44, 0xFE47, 0xFE52, 0xFE54, 0xFE66, 0xFE68, 0xFE6B, + 0xFEFF, 0xFEFF, 0xFF01, 0xFF20, 0xFF3B, 0xFF40, 0xFF5B, 0xFF60, + 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF9, 0xFFFD, 0x10190, 0x1019C, + 0x101D0, 0x101FC, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, 0x1D100, 0x1D126, + 0x1D129, 0x1D166, 0x1D16A, 0x1D17A, 0x1D183, 0x1D184, 0x1D18C, 0x1D1A9, + 0x1D1AE, 0x1D1EA, 0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356, 0x1D372, 0x1D378, + 0x1D400, 0x1D454, 0x1D456, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A2, + 0x1D4A5, 0x1D4A6, 0x1D4A9, 0x1D4AC, 0x1D4AE, 0x1D4B9, 0x1D4BB, 0x1D4BB, + 0x1D4BD, 0x1D4C3, 0x1D4C5, 0x1D505, 0x1D507, 0x1D50A, 0x1D50D, 0x1D514, + 0x1D516, 0x1D51C, 0x1D51E, 0x1D539, 0x1D53B, 0x1D53E, 0x1D540, 0x1D544, + 0x1D546, 0x1D546, 0x1D54A, 0x1D550, 0x1D552, 0x1D6A5, 0x1D6A8, 0x1D7CB, + 0x1D7CE, 0x1D7FF, 0x1EC71, 0x1ECB4, 0x1ED01, 0x1ED3D, 0x1F000, 0x1F02B, + 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF, 0x1F0C1, 0x1F0CF, + 0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD, 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F202, + 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F260, 0x1F265, 0x1F300, 0x1F6D7, + 0x1F6DD, 0x1F6EC, 0x1F6F0, 0x1F6FC, 0x1F700, 0x1F773, 0x1F780, 0x1F7D8, + 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, 0x1F800, 0x1F80B, 0x1F810, 0x1F847, + 0x1F850, 0x1F859, 0x1F860, 0x1F887, 0x1F890, 0x1F8AD, 0x1F8B0, 0x1F8B1, + 0x1F900, 0x1FA53, 0x1FA60, 0x1FA6D, 0x1FA70, 0x1FA74, 0x1FA78, 0x1FA7C, + 0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC, 0x1FAB0, 0x1FABA, 0x1FAC0, 0x1FAC5, + 0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7, 0x1FAF0, 0x1FAF6, 0x1FB00, 0x1FB92, + 0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9, 0xE0001, 0xE0001, 0xE0020, 0xE007F, + // #261 (16523+4): scx=Coptic:Copt:Qaac + 0x03E2, 0x03EF, 0x2C80, 0x2CF3, 0x2CF9, 0x2CFF, 0x102E0, 0x102FB, + // #262 (16527+2): scx=Cypro_Minoan:Cpmn + 0x10100, 0x10101, 0x12F90, 0x12FF2, + // #263 (16529+9): scx=Cypriot:Cprt + 0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1013F, 0x10800, 0x10805, + 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C, + 0x1083F, 0x1083F, + // #264 (16538+9): scx=Cyrillic:Cyrl + 0x0400, 0x052F, 0x1C80, 0x1C88, 0x1D2B, 0x1D2B, 0x1D78, 0x1D78, + 0x1DF8, 0x1DF8, 0x2DE0, 0x2DFF, 0x2E43, 0x2E43, 0xA640, 0xA69F, + 0xFE2E, 0xFE2F, + // #265 (16547+7): scx=Devanagari:Deva + 0x0900, 0x0952, 0x0955, 0x097F, 0x1CD0, 0x1CF6, 0x1CF8, 0x1CF9, + 0x20F0, 0x20F0, 0xA830, 0xA839, 0xA8E0, 0xA8FF, + // #266 (16554+3): scx=Dogra:Dogr + 0x0964, 0x096F, 0xA830, 0xA839, 0x11800, 0x1183B, + // #267 (16557+5): scx=Duployan:Dupl + 0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, + 0x1BC9C, 0x1BCA3, + // #268 (16562+9): scx=Georgian:Geor + 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FF, + 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x2D00, 0x2D25, 0x2D27, 0x2D27, + 0x2D2D, 0x2D2D, + // #269 (16571+10): scx=Glagolitic:Glag + 0x0484, 0x0484, 0x0487, 0x0487, 0x2C00, 0x2C5F, 0x2E43, 0x2E43, + 0xA66F, 0xA66F, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, + 0x1E023, 0x1E024, 0x1E026, 0x1E02A, + // #270 (16581+25): scx=Grantha:Gran + 0x0951, 0x0952, 0x0964, 0x0965, 0x0BE6, 0x0BF3, 0x1CD0, 0x1CD0, + 0x1CD2, 0x1CD3, 0x1CF2, 0x1CF4, 0x1CF8, 0x1CF9, 0x20F0, 0x20F0, + 0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, + 0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133B, 0x11344, + 0x11347, 0x11348, 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357, + 0x1135D, 0x11363, 0x11366, 0x1136C, 0x11370, 0x11374, 0x11FD0, 0x11FD1, + 0x11FD3, 0x11FD3, + // #271 (16606+38): scx=Greek:Grek + 0x0342, 0x0342, 0x0345, 0x0345, 0x0370, 0x0373, 0x0375, 0x0377, + 0x037A, 0x037D, 0x037F, 0x037F, 0x0384, 0x0384, 0x0386, 0x0386, + 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03E1, + 0x03F0, 0x03FF, 0x1D26, 0x1D2A, 0x1D5D, 0x1D61, 0x1D66, 0x1D6A, + 0x1DBF, 0x1DC1, 0x1F00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, + 0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, + 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, + 0x1FC6, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, + 0x1FF6, 0x1FFE, 0x2126, 0x2126, 0xAB65, 0xAB65, 0x10140, 0x1018E, + 0x101A0, 0x101A0, 0x1D200, 0x1D245, + // #272 (16644+17): scx=Gujarati:Gujr + 0x0951, 0x0952, 0x0964, 0x0965, 0x0A81, 0x0A83, 0x0A85, 0x0A8D, + 0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, + 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5, 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, + 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3, 0x0AE6, 0x0AF1, 0x0AF9, 0x0AFF, + 0xA830, 0xA839, + // #273 (16661+7): scx=Gunjala_Gondi:Gong + 0x0964, 0x0965, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, + 0x11D90, 0x11D91, 0x11D93, 0x11D98, 0x11DA0, 0x11DA9, + // #274 (16668+19): scx=Gurmukhi:Guru + 0x0951, 0x0952, 0x0964, 0x0965, 0x0A01, 0x0A03, 0x0A05, 0x0A0A, + 0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, + 0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, + 0x0A47, 0x0A48, 0x0A4B, 0x0A4D, 0x0A51, 0x0A51, 0x0A59, 0x0A5C, + 0x0A5E, 0x0A5E, 0x0A66, 0x0A76, 0xA830, 0xA839, + // #275 (16687+37): scx=Han:Hani + 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x3001, 0x3003, + 0x3005, 0x3011, 0x3013, 0x301F, 0x3021, 0x302D, 0x3030, 0x3030, + 0x3037, 0x303F, 0x30FB, 0x30FB, 0x3190, 0x319F, 0x31C0, 0x31E3, + 0x3220, 0x3247, 0x3280, 0x32B0, 0x32C0, 0x32CB, 0x32FF, 0x32FF, + 0x3358, 0x3370, 0x337B, 0x337F, 0x33E0, 0x33FE, 0x3400, 0x4DBF, + 0x4E00, 0x9FFF, 0xA700, 0xA707, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, + 0xFE45, 0xFE46, 0xFF61, 0xFF65, 0x16FE2, 0x16FE3, 0x16FF0, 0x16FF1, + 0x1D360, 0x1D371, 0x1F250, 0x1F251, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, + 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, + 0x30000, 0x3134A, + // #276 (16724+21): scx=Hangul:Hang + 0x1100, 0x11FF, 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, + 0x302E, 0x3030, 0x3037, 0x3037, 0x30FB, 0x30FB, 0x3131, 0x318E, + 0x3200, 0x321E, 0x3260, 0x327E, 0xA960, 0xA97C, 0xAC00, 0xD7A3, + 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xFE45, 0xFE46, 0xFF61, 0xFF65, + 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, + 0xFFDA, 0xFFDC, + // #277 (16745+7): scx=Hanifi_Rohingya:Rohg + 0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x0640, 0x0640, + 0x06D4, 0x06D4, 0x10D00, 0x10D27, 0x10D30, 0x10D39, + // #278 (16752+1): scx=Hanunoo:Hano + 0x1720, 0x1736, + // #279 (16753+16): scx=Hiragana:Hira + 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, 0x3030, 0x3035, + 0x3037, 0x3037, 0x303C, 0x303D, 0x3041, 0x3096, 0x3099, 0x30A0, + 0x30FB, 0x30FC, 0xFE45, 0xFE46, 0xFF61, 0xFF65, 0xFF70, 0xFF70, + 0xFF9E, 0xFF9F, 0x1B001, 0x1B11F, 0x1B150, 0x1B152, 0x1F200, 0x1F200, + // #280 (16769+20): scx=Inherited:Zinh:Qaai + 0x0300, 0x0341, 0x0343, 0x0344, 0x0346, 0x0362, 0x0953, 0x0954, + 0x1AB0, 0x1ACE, 0x1DC2, 0x1DF7, 0x1DF9, 0x1DF9, 0x1DFB, 0x1DFF, + 0x200C, 0x200D, 0x20D0, 0x20EF, 0xFE00, 0xFE0F, 0xFE20, 0xFE2D, + 0x101FD, 0x101FD, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169, + 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0xE0100, 0xE01EF, + // #281 (16789+3): scx=Javanese:Java + 0xA980, 0xA9CD, 0xA9CF, 0xA9D9, 0xA9DE, 0xA9DF, + // #282 (16792+4): scx=Kaithi:Kthi + 0x0966, 0x096F, 0xA830, 0xA839, 0x11080, 0x110C2, 0x110CD, 0x110CD, + // #283 (16796+21): scx=Kannada:Knda + 0x0951, 0x0952, 0x0964, 0x0965, 0x0C80, 0x0C8C, 0x0C8E, 0x0C90, + 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4, + 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE, + 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x1CD0, 0x1CD0, + 0x1CD2, 0x1CD2, 0x1CDA, 0x1CDA, 0x1CF2, 0x1CF2, 0x1CF4, 0x1CF4, + 0xA830, 0xA835, + // #284 (16817+19): scx=Katakana:Kana + 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, 0x3030, 0x3035, + 0x3037, 0x3037, 0x303C, 0x303D, 0x3099, 0x309C, 0x30A0, 0x30FF, + 0x31F0, 0x31FF, 0x32D0, 0x32FE, 0x3300, 0x3357, 0xFE45, 0xFE46, + 0xFF61, 0xFF9F, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, + 0x1B000, 0x1B000, 0x1B120, 0x1B122, 0x1B164, 0x1B167, + // #285 (16836+1): scx=Kayah_Li:Kali + 0xA900, 0xA92F, + // #286 (16837+4): scx=Khojki:Khoj + 0x0AE6, 0x0AEF, 0xA830, 0xA839, 0x11200, 0x11211, 0x11213, 0x1123E, + // #287 (16841+4): scx=Khudawadi:Sind + 0x0964, 0x0965, 0xA830, 0xA839, 0x112B0, 0x112EA, 0x112F0, 0x112F9, + // #288 (16845+46): scx=Latin:Latn + 0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00BA, 0x00BA, + 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02B8, 0x02E0, 0x02E4, + 0x0363, 0x036F, 0x0485, 0x0486, 0x0951, 0x0952, 0x10FB, 0x10FB, + 0x1D00, 0x1D25, 0x1D2C, 0x1D5C, 0x1D62, 0x1D65, 0x1D6B, 0x1D77, + 0x1D79, 0x1DBE, 0x1E00, 0x1EFF, 0x202F, 0x202F, 0x2071, 0x2071, + 0x207F, 0x207F, 0x2090, 0x209C, 0x20F0, 0x20F0, 0x212A, 0x212B, + 0x2132, 0x2132, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C60, 0x2C7F, + 0xA700, 0xA707, 0xA722, 0xA787, 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, + 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA7FF, 0xA92E, 0xA92E, + 0xAB30, 0xAB5A, 0xAB5C, 0xAB64, 0xAB66, 0xAB69, 0xFB00, 0xFB06, + 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10780, 0x10785, 0x10787, 0x107B0, + 0x107B2, 0x107BA, 0x1DF00, 0x1DF1E, + // #289 (16891+6): scx=Limbu:Limb + 0x0965, 0x0965, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B, + 0x1940, 0x1940, 0x1944, 0x194F, + // #290 (16897+4): scx=Linear_A:Lina + 0x10107, 0x10133, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767, + // #291 (16901+10): scx=Linear_B:Linb + 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D, + 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10100, 0x10102, + 0x10107, 0x10133, 0x10137, 0x1013F, + // #292 (16911+3): scx=Mahajani:Mahj + 0x0964, 0x096F, 0xA830, 0xA839, 0x11150, 0x11176, + // #293 (16914+11): scx=Malayalam:Mlym + 0x0951, 0x0952, 0x0964, 0x0965, 0x0D00, 0x0D0C, 0x0D0E, 0x0D10, + 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4F, 0x0D54, 0x0D63, + 0x0D66, 0x0D7F, 0x1CDA, 0x1CDA, 0xA830, 0xA832, + // #294 (16925+3): scx=Mandaic:Mand + 0x0640, 0x0640, 0x0840, 0x085B, 0x085E, 0x085E, + // #295 (16928+3): scx=Manichaean:Mani + 0x0640, 0x0640, 0x10AC0, 0x10AE6, 0x10AEB, 0x10AF6, + // #296 (16931+8): scx=Masaram_Gondi:Gonm + 0x0964, 0x0965, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36, + 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59, + // #297 (16939+3): scx=Modi:Modi + 0xA830, 0xA839, 0x11600, 0x11644, 0x11650, 0x11659, + // #298 (16942+5): scx=Mongolian:Mong + 0x1800, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA, 0x202F, 0x202F, + 0x11660, 0x1166C, + // #299 (16947+6): scx=Multani:Mult + 0x0A66, 0x0A6F, 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, + 0x1128F, 0x1129D, 0x1129F, 0x112A9, + // #300 (16953+4): scx=Myanmar:Mymr + 0x1000, 0x109F, 0xA92E, 0xA92E, 0xA9E0, 0xA9FE, 0xAA60, 0xAA7F, + // #301 (16957+9): scx=Nandinagari:Nand + 0x0964, 0x0965, 0x0CE6, 0x0CEF, 0x1CE9, 0x1CE9, 0x1CF2, 0x1CF2, + 0x1CFA, 0x1CFA, 0xA830, 0xA835, 0x119A0, 0x119A7, 0x119AA, 0x119D7, + 0x119DA, 0x119E4, + // #302 (16966+6): scx=Nko:Nkoo + 0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x07C0, 0x07FA, + 0x07FD, 0x07FF, 0xFD3E, 0xFD3F, + // #303 (16972+2): scx=Old_Permic:Perm + 0x0483, 0x0483, 0x10350, 0x1037A, + // #304 (16974+3): scx=Old_Uyghur:Ougr + 0x0640, 0x0640, 0x10AF2, 0x10AF2, 0x10F70, 0x10F89, + // #305 (16977+18): scx=Oriya:Orya + 0x0951, 0x0952, 0x0964, 0x0965, 0x0B01, 0x0B03, 0x0B05, 0x0B0C, + 0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, + 0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D, + 0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B77, + 0x1CDA, 0x1CDA, 0x1CF2, 0x1CF2, + // #306 (16995+3): scx=Phags_Pa:Phag + 0x1802, 0x1803, 0x1805, 0x1805, 0xA840, 0xA877, + // #307 (16998+4): scx=Psalter_Pahlavi:Phlp + 0x0640, 0x0640, 0x10B80, 0x10B91, 0x10B99, 0x10B9C, 0x10BA9, 0x10BAF, + // #308 (17002+6): scx=Sharada:Shrd + 0x0951, 0x0951, 0x1CD7, 0x1CD7, 0x1CD9, 0x1CD9, 0x1CDC, 0x1CDD, + 0x1CE0, 0x1CE0, 0x11180, 0x111DF, + // #309 (17008+14): scx=Sinhala:Sinh + 0x0964, 0x0965, 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, + 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, + 0x0DCF, 0x0DD4, 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, + 0x0DF2, 0x0DF4, 0x111E1, 0x111F4, + // #310 (17022+2): scx=Sogdian:Sogd + 0x0640, 0x0640, 0x10F30, 0x10F59, + // #311 (17024+3): scx=Syloti_Nagri:Sylo + 0x0964, 0x0965, 0x09E6, 0x09EF, 0xA800, 0xA82C, + // #312 (17027+12): scx=Syriac:Syrc + 0x060C, 0x060C, 0x061B, 0x061C, 0x061F, 0x061F, 0x0640, 0x0640, + 0x064B, 0x0655, 0x0670, 0x0670, 0x0700, 0x070D, 0x070F, 0x074A, + 0x074D, 0x074F, 0x0860, 0x086A, 0x1DF8, 0x1DF8, 0x1DFA, 0x1DFA, + // #313 (17039+3): scx=Tagalog:Tglg + 0x1700, 0x1715, 0x171F, 0x171F, 0x1735, 0x1736, + // #314 (17042+4): scx=Tagbanwa:Tagb + 0x1735, 0x1736, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773, + // #315 (17046+3): scx=Tai_Le:Tale + 0x1040, 0x1049, 0x1950, 0x196D, 0x1970, 0x1974, + // #316 (17049+4): scx=Takri:Takr + 0x0964, 0x0965, 0xA830, 0xA839, 0x11680, 0x116B9, 0x116C0, 0x116C9, + // #317 (17053+25): scx=Tamil:Taml + 0x0951, 0x0952, 0x0964, 0x0965, 0x0B82, 0x0B83, 0x0B85, 0x0B8A, + 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, + 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, + 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, + 0x0BD7, 0x0BD7, 0x0BE6, 0x0BFA, 0x1CDA, 0x1CDA, 0xA8F3, 0xA8F3, + 0x11301, 0x11301, 0x11303, 0x11303, 0x1133B, 0x1133C, 0x11FC0, 0x11FF1, + 0x11FFF, 0x11FFF, + // #318 (17078+17): scx=Telugu:Telu + 0x0951, 0x0952, 0x0964, 0x0965, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, + 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48, + 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, + 0x0C60, 0x0C63, 0x0C66, 0x0C6F, 0x0C77, 0x0C7F, 0x1CDA, 0x1CDA, + 0x1CF2, 0x1CF2, + // #319 (17095+7): scx=Thaana:Thaa + 0x060C, 0x060C, 0x061B, 0x061C, 0x061F, 0x061F, 0x0660, 0x0669, + 0x0780, 0x07B1, 0xFDF2, 0xFDF2, 0xFDFD, 0xFDFD, + // #320 (17102+6): scx=Tirhuta:Tirh + 0x0951, 0x0952, 0x0964, 0x0965, 0x1CF2, 0x1CF2, 0xA830, 0xA839, + 0x11480, 0x114C7, 0x114D0, 0x114D9, + // #321 (17108+7): scx=Yezidi:Yezi + 0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x0660, 0x0669, + 0x10E80, 0x10EA9, 0x10EAB, 0x10EAD, 0x10EB0, 0x10EB1, + // #322 (17115+7): scx=Yi:Yiii + 0x3001, 0x3002, 0x3008, 0x3011, 0x3014, 0x301B, 0x30FB, 0x30FB, + 0xA000, 0xA48C, 0xA490, 0xA4C6, 0xFF61, 0xFF65 +#if !defined(SRELL_NO_UNICODE_POS) + , + // #323 (17122+12574/2): bp=RGI_Emoji + // 1310/2 + 48/2 + 1936/2 + 774/2 + 24/2 + 8482/2 + // #324 (17122+1310/2): bp=Basic_Emoji + 1, 0x231A, 0x231B, + 1, 0x23E9, 0x23EC, + 2, 0x23F0, + 2, 0x23F3, + 1, 0x25FD, 0x25FE, + 1, 0x2614, 0x2615, + 1, 0x2648, 0x2653, + 2, 0x267F, + 2, 0x2693, + 2, 0x26A1, + 1, 0x26AA, 0x26AB, + 1, 0x26BD, 0x26BE, + 1, 0x26C4, 0x26C5, + 2, 0x26CE, + 2, 0x26D4, + 2, 0x26EA, + 1, 0x26F2, 0x26F3, + 2, 0x26F5, + 2, 0x26FA, + 2, 0x26FD, + 2, 0x2705, + 1, 0x270A, 0x270B, + 2, 0x2728, + 2, 0x274C, + 2, 0x274E, + 1, 0x2753, 0x2755, + 2, 0x2757, + 1, 0x2795, 0x2797, + 2, 0x27B0, + 2, 0x27BF, + 1, 0x2B1B, 0x2B1C, + 2, 0x2B50, + 2, 0x2B55, + 2, 0x1F004, + 2, 0x1F0CF, + 2, 0x1F18E, + 1, 0x1F191, 0x1F19A, + 2, 0x1F201, + 2, 0x1F21A, + 2, 0x1F22F, + 1, 0x1F232, 0x1F236, + 1, 0x1F238, 0x1F23A, + 1, 0x1F250, 0x1F251, + 1, 0x1F300, 0x1F30C, + 1, 0x1F30D, 0x1F30E, + 2, 0x1F30F, + 2, 0x1F310, + 2, 0x1F311, + 2, 0x1F312, + 1, 0x1F313, 0x1F315, + 1, 0x1F316, 0x1F318, + 2, 0x1F319, + 2, 0x1F31A, + 2, 0x1F31B, + 2, 0x1F31C, + 1, 0x1F31D, 0x1F31E, + 1, 0x1F31F, 0x1F320, + 1, 0x1F32D, 0x1F32F, + 1, 0x1F330, 0x1F331, + 1, 0x1F332, 0x1F333, + 1, 0x1F334, 0x1F335, + 1, 0x1F337, 0x1F34A, + 2, 0x1F34B, + 1, 0x1F34C, 0x1F34F, + 2, 0x1F350, + 1, 0x1F351, 0x1F37B, + 2, 0x1F37C, + 1, 0x1F37E, 0x1F37F, + 1, 0x1F380, 0x1F393, + 1, 0x1F3A0, 0x1F3C4, + 2, 0x1F3C5, + 2, 0x1F3C6, + 2, 0x1F3C7, + 2, 0x1F3C8, + 2, 0x1F3C9, + 2, 0x1F3CA, + 1, 0x1F3CF, 0x1F3D3, + 1, 0x1F3E0, 0x1F3E3, + 2, 0x1F3E4, + 1, 0x1F3E5, 0x1F3F0, + 2, 0x1F3F4, + 1, 0x1F3F8, 0x1F407, + 2, 0x1F408, + 1, 0x1F409, 0x1F40B, + 1, 0x1F40C, 0x1F40E, + 1, 0x1F40F, 0x1F410, + 1, 0x1F411, 0x1F412, + 2, 0x1F413, + 2, 0x1F414, + 2, 0x1F415, + 2, 0x1F416, + 1, 0x1F417, 0x1F429, + 2, 0x1F42A, + 1, 0x1F42B, 0x1F43E, + 2, 0x1F440, + 1, 0x1F442, 0x1F464, + 2, 0x1F465, + 1, 0x1F466, 0x1F46B, + 1, 0x1F46C, 0x1F46D, + 1, 0x1F46E, 0x1F4AC, + 2, 0x1F4AD, + 1, 0x1F4AE, 0x1F4B5, + 1, 0x1F4B6, 0x1F4B7, + 1, 0x1F4B8, 0x1F4EB, + 1, 0x1F4EC, 0x1F4ED, + 2, 0x1F4EE, + 2, 0x1F4EF, + 1, 0x1F4F0, 0x1F4F4, + 2, 0x1F4F5, + 1, 0x1F4F6, 0x1F4F7, + 2, 0x1F4F8, + 1, 0x1F4F9, 0x1F4FC, + 1, 0x1F4FF, 0x1F502, + 2, 0x1F503, + 1, 0x1F504, 0x1F507, + 2, 0x1F508, + 2, 0x1F509, + 1, 0x1F50A, 0x1F514, + 2, 0x1F515, + 1, 0x1F516, 0x1F52B, + 1, 0x1F52C, 0x1F52D, + 1, 0x1F52E, 0x1F53D, + 1, 0x1F54B, 0x1F54E, + 1, 0x1F550, 0x1F55B, + 1, 0x1F55C, 0x1F567, + 2, 0x1F57A, + 1, 0x1F595, 0x1F596, + 2, 0x1F5A4, + 1, 0x1F5FB, 0x1F5FF, + 2, 0x1F600, + 1, 0x1F601, 0x1F606, + 1, 0x1F607, 0x1F608, + 1, 0x1F609, 0x1F60D, + 2, 0x1F60E, + 2, 0x1F60F, + 2, 0x1F610, + 2, 0x1F611, + 1, 0x1F612, 0x1F614, + 2, 0x1F615, + 2, 0x1F616, + 2, 0x1F617, + 2, 0x1F618, + 2, 0x1F619, + 2, 0x1F61A, + 2, 0x1F61B, + 1, 0x1F61C, 0x1F61E, + 2, 0x1F61F, + 1, 0x1F620, 0x1F625, + 1, 0x1F626, 0x1F627, + 1, 0x1F628, 0x1F62B, + 2, 0x1F62C, + 2, 0x1F62D, + 1, 0x1F62E, 0x1F62F, + 1, 0x1F630, 0x1F633, + 2, 0x1F634, + 2, 0x1F635, + 2, 0x1F636, + 1, 0x1F637, 0x1F640, + 1, 0x1F641, 0x1F644, + 1, 0x1F645, 0x1F64F, + 2, 0x1F680, + 1, 0x1F681, 0x1F682, + 1, 0x1F683, 0x1F685, + 2, 0x1F686, + 2, 0x1F687, + 2, 0x1F688, + 2, 0x1F689, + 1, 0x1F68A, 0x1F68B, + 2, 0x1F68C, + 2, 0x1F68D, + 2, 0x1F68E, + 2, 0x1F68F, + 2, 0x1F690, + 1, 0x1F691, 0x1F693, + 2, 0x1F694, + 2, 0x1F695, + 2, 0x1F696, + 2, 0x1F697, + 2, 0x1F698, + 1, 0x1F699, 0x1F69A, + 1, 0x1F69B, 0x1F6A1, + 2, 0x1F6A2, + 2, 0x1F6A3, + 1, 0x1F6A4, 0x1F6A5, + 2, 0x1F6A6, + 1, 0x1F6A7, 0x1F6AD, + 1, 0x1F6AE, 0x1F6B1, + 2, 0x1F6B2, + 1, 0x1F6B3, 0x1F6B5, + 2, 0x1F6B6, + 1, 0x1F6B7, 0x1F6B8, + 1, 0x1F6B9, 0x1F6BE, + 2, 0x1F6BF, + 2, 0x1F6C0, + 1, 0x1F6C1, 0x1F6C5, + 2, 0x1F6CC, + 2, 0x1F6D0, + 1, 0x1F6D1, 0x1F6D2, + 2, 0x1F6D5, + 1, 0x1F6D6, 0x1F6D7, + 1, 0x1F6DD, 0x1F6DF, + 1, 0x1F6EB, 0x1F6EC, + 1, 0x1F6F4, 0x1F6F6, + 1, 0x1F6F7, 0x1F6F8, + 2, 0x1F6F9, + 2, 0x1F6FA, + 1, 0x1F6FB, 0x1F6FC, + 1, 0x1F7E0, 0x1F7EB, + 2, 0x1F7F0, + 2, 0x1F90C, + 1, 0x1F90D, 0x1F90F, + 1, 0x1F910, 0x1F918, + 1, 0x1F919, 0x1F91E, + 2, 0x1F91F, + 1, 0x1F920, 0x1F927, + 1, 0x1F928, 0x1F92F, + 2, 0x1F930, + 1, 0x1F931, 0x1F932, + 1, 0x1F933, 0x1F93A, + 1, 0x1F93C, 0x1F93E, + 2, 0x1F93F, + 1, 0x1F940, 0x1F945, + 1, 0x1F947, 0x1F94B, + 2, 0x1F94C, + 1, 0x1F94D, 0x1F94F, + 1, 0x1F950, 0x1F95E, + 1, 0x1F95F, 0x1F96B, + 1, 0x1F96C, 0x1F970, + 2, 0x1F971, + 2, 0x1F972, + 1, 0x1F973, 0x1F976, + 1, 0x1F977, 0x1F978, + 2, 0x1F979, + 2, 0x1F97A, + 2, 0x1F97B, + 1, 0x1F97C, 0x1F97F, + 1, 0x1F980, 0x1F984, + 1, 0x1F985, 0x1F991, + 1, 0x1F992, 0x1F997, + 1, 0x1F998, 0x1F9A2, + 1, 0x1F9A3, 0x1F9A4, + 1, 0x1F9A5, 0x1F9AA, + 1, 0x1F9AB, 0x1F9AD, + 1, 0x1F9AE, 0x1F9AF, + 1, 0x1F9B0, 0x1F9B9, + 1, 0x1F9BA, 0x1F9BF, + 2, 0x1F9C0, + 1, 0x1F9C1, 0x1F9C2, + 1, 0x1F9C3, 0x1F9CA, + 2, 0x1F9CB, + 2, 0x1F9CC, + 1, 0x1F9CD, 0x1F9CF, + 1, 0x1F9D0, 0x1F9E6, + 1, 0x1F9E7, 0x1F9FF, + 1, 0x1FA70, 0x1FA73, + 2, 0x1FA74, + 1, 0x1FA78, 0x1FA7A, + 1, 0x1FA7B, 0x1FA7C, + 1, 0x1FA80, 0x1FA82, + 1, 0x1FA83, 0x1FA86, + 1, 0x1FA90, 0x1FA95, + 1, 0x1FA96, 0x1FAA8, + 1, 0x1FAA9, 0x1FAAC, + 1, 0x1FAB0, 0x1FAB6, + 1, 0x1FAB7, 0x1FABA, + 1, 0x1FAC0, 0x1FAC2, + 1, 0x1FAC3, 0x1FAC5, + 1, 0x1FAD0, 0x1FAD6, + 1, 0x1FAD7, 0x1FAD9, + 1, 0x1FAE0, 0x1FAE7, + 1, 0x1FAF0, 0x1FAF6, + 3, 0x00A9, 0xFE0F, + 3, 0x00AE, 0xFE0F, + 3, 0x203C, 0xFE0F, + 3, 0x2049, 0xFE0F, + 3, 0x2122, 0xFE0F, + 3, 0x2139, 0xFE0F, + 3, 0x2194, 0xFE0F, + 3, 0x2195, 0xFE0F, + 3, 0x2196, 0xFE0F, + 3, 0x2197, 0xFE0F, + 3, 0x2198, 0xFE0F, + 3, 0x2199, 0xFE0F, + 3, 0x21A9, 0xFE0F, + 3, 0x21AA, 0xFE0F, + 3, 0x2328, 0xFE0F, + 3, 0x23CF, 0xFE0F, + 3, 0x23ED, 0xFE0F, + 3, 0x23EE, 0xFE0F, + 3, 0x23EF, 0xFE0F, + 3, 0x23F1, 0xFE0F, + 3, 0x23F2, 0xFE0F, + 3, 0x23F8, 0xFE0F, + 3, 0x23F9, 0xFE0F, + 3, 0x23FA, 0xFE0F, + 3, 0x24C2, 0xFE0F, + 3, 0x25AA, 0xFE0F, + 3, 0x25AB, 0xFE0F, + 3, 0x25B6, 0xFE0F, + 3, 0x25C0, 0xFE0F, + 3, 0x25FB, 0xFE0F, + 3, 0x25FC, 0xFE0F, + 3, 0x2600, 0xFE0F, + 3, 0x2601, 0xFE0F, + 3, 0x2602, 0xFE0F, + 3, 0x2603, 0xFE0F, + 3, 0x2604, 0xFE0F, + 3, 0x260E, 0xFE0F, + 3, 0x2611, 0xFE0F, + 3, 0x2618, 0xFE0F, + 3, 0x261D, 0xFE0F, + 3, 0x2620, 0xFE0F, + 3, 0x2622, 0xFE0F, + 3, 0x2623, 0xFE0F, + 3, 0x2626, 0xFE0F, + 3, 0x262A, 0xFE0F, + 3, 0x262E, 0xFE0F, + 3, 0x262F, 0xFE0F, + 3, 0x2638, 0xFE0F, + 3, 0x2639, 0xFE0F, + 3, 0x263A, 0xFE0F, + 3, 0x2640, 0xFE0F, + 3, 0x2642, 0xFE0F, + 3, 0x265F, 0xFE0F, + 3, 0x2660, 0xFE0F, + 3, 0x2663, 0xFE0F, + 3, 0x2665, 0xFE0F, + 3, 0x2666, 0xFE0F, + 3, 0x2668, 0xFE0F, + 3, 0x267B, 0xFE0F, + 3, 0x267E, 0xFE0F, + 3, 0x2692, 0xFE0F, + 3, 0x2694, 0xFE0F, + 3, 0x2695, 0xFE0F, + 3, 0x2696, 0xFE0F, + 3, 0x2697, 0xFE0F, + 3, 0x2699, 0xFE0F, + 3, 0x269B, 0xFE0F, + 3, 0x269C, 0xFE0F, + 3, 0x26A0, 0xFE0F, + 3, 0x26A7, 0xFE0F, + 3, 0x26B0, 0xFE0F, + 3, 0x26B1, 0xFE0F, + 3, 0x26C8, 0xFE0F, + 3, 0x26CF, 0xFE0F, + 3, 0x26D1, 0xFE0F, + 3, 0x26D3, 0xFE0F, + 3, 0x26E9, 0xFE0F, + 3, 0x26F0, 0xFE0F, + 3, 0x26F1, 0xFE0F, + 3, 0x26F4, 0xFE0F, + 3, 0x26F7, 0xFE0F, + 3, 0x26F8, 0xFE0F, + 3, 0x26F9, 0xFE0F, + 3, 0x2702, 0xFE0F, + 3, 0x2708, 0xFE0F, + 3, 0x2709, 0xFE0F, + 3, 0x270C, 0xFE0F, + 3, 0x270D, 0xFE0F, + 3, 0x270F, 0xFE0F, + 3, 0x2712, 0xFE0F, + 3, 0x2714, 0xFE0F, + 3, 0x2716, 0xFE0F, + 3, 0x271D, 0xFE0F, + 3, 0x2721, 0xFE0F, + 3, 0x2733, 0xFE0F, + 3, 0x2734, 0xFE0F, + 3, 0x2744, 0xFE0F, + 3, 0x2747, 0xFE0F, + 3, 0x2763, 0xFE0F, + 3, 0x2764, 0xFE0F, + 3, 0x27A1, 0xFE0F, + 3, 0x2934, 0xFE0F, + 3, 0x2935, 0xFE0F, + 3, 0x2B05, 0xFE0F, + 3, 0x2B06, 0xFE0F, + 3, 0x2B07, 0xFE0F, + 3, 0x3030, 0xFE0F, + 3, 0x303D, 0xFE0F, + 3, 0x3297, 0xFE0F, + 3, 0x3299, 0xFE0F, + 3, 0x1F170, 0xFE0F, + 3, 0x1F171, 0xFE0F, + 3, 0x1F17E, 0xFE0F, + 3, 0x1F17F, 0xFE0F, + 3, 0x1F202, 0xFE0F, + 3, 0x1F237, 0xFE0F, + 3, 0x1F321, 0xFE0F, + 3, 0x1F324, 0xFE0F, + 3, 0x1F325, 0xFE0F, + 3, 0x1F326, 0xFE0F, + 3, 0x1F327, 0xFE0F, + 3, 0x1F328, 0xFE0F, + 3, 0x1F329, 0xFE0F, + 3, 0x1F32A, 0xFE0F, + 3, 0x1F32B, 0xFE0F, + 3, 0x1F32C, 0xFE0F, + 3, 0x1F336, 0xFE0F, + 3, 0x1F37D, 0xFE0F, + 3, 0x1F396, 0xFE0F, + 3, 0x1F397, 0xFE0F, + 3, 0x1F399, 0xFE0F, + 3, 0x1F39A, 0xFE0F, + 3, 0x1F39B, 0xFE0F, + 3, 0x1F39E, 0xFE0F, + 3, 0x1F39F, 0xFE0F, + 3, 0x1F3CB, 0xFE0F, + 3, 0x1F3CC, 0xFE0F, + 3, 0x1F3CD, 0xFE0F, + 3, 0x1F3CE, 0xFE0F, + 3, 0x1F3D4, 0xFE0F, + 3, 0x1F3D5, 0xFE0F, + 3, 0x1F3D6, 0xFE0F, + 3, 0x1F3D7, 0xFE0F, + 3, 0x1F3D8, 0xFE0F, + 3, 0x1F3D9, 0xFE0F, + 3, 0x1F3DA, 0xFE0F, + 3, 0x1F3DB, 0xFE0F, + 3, 0x1F3DC, 0xFE0F, + 3, 0x1F3DD, 0xFE0F, + 3, 0x1F3DE, 0xFE0F, + 3, 0x1F3DF, 0xFE0F, + 3, 0x1F3F3, 0xFE0F, + 3, 0x1F3F5, 0xFE0F, + 3, 0x1F3F7, 0xFE0F, + 3, 0x1F43F, 0xFE0F, + 3, 0x1F441, 0xFE0F, + 3, 0x1F4FD, 0xFE0F, + 3, 0x1F549, 0xFE0F, + 3, 0x1F54A, 0xFE0F, + 3, 0x1F56F, 0xFE0F, + 3, 0x1F570, 0xFE0F, + 3, 0x1F573, 0xFE0F, + 3, 0x1F574, 0xFE0F, + 3, 0x1F575, 0xFE0F, + 3, 0x1F576, 0xFE0F, + 3, 0x1F577, 0xFE0F, + 3, 0x1F578, 0xFE0F, + 3, 0x1F579, 0xFE0F, + 3, 0x1F587, 0xFE0F, + 3, 0x1F58A, 0xFE0F, + 3, 0x1F58B, 0xFE0F, + 3, 0x1F58C, 0xFE0F, + 3, 0x1F58D, 0xFE0F, + 3, 0x1F590, 0xFE0F, + 3, 0x1F5A5, 0xFE0F, + 3, 0x1F5A8, 0xFE0F, + 3, 0x1F5B1, 0xFE0F, + 3, 0x1F5B2, 0xFE0F, + 3, 0x1F5BC, 0xFE0F, + 3, 0x1F5C2, 0xFE0F, + 3, 0x1F5C3, 0xFE0F, + 3, 0x1F5C4, 0xFE0F, + 3, 0x1F5D1, 0xFE0F, + 3, 0x1F5D2, 0xFE0F, + 3, 0x1F5D3, 0xFE0F, + 3, 0x1F5DC, 0xFE0F, + 3, 0x1F5DD, 0xFE0F, + 3, 0x1F5DE, 0xFE0F, + 3, 0x1F5E1, 0xFE0F, + 3, 0x1F5E3, 0xFE0F, + 3, 0x1F5E8, 0xFE0F, + 3, 0x1F5EF, 0xFE0F, + 3, 0x1F5F3, 0xFE0F, + 3, 0x1F5FA, 0xFE0F, + 3, 0x1F6CB, 0xFE0F, + 3, 0x1F6CD, 0xFE0F, + 3, 0x1F6CE, 0xFE0F, + 3, 0x1F6CF, 0xFE0F, + 3, 0x1F6E0, 0xFE0F, + 3, 0x1F6E1, 0xFE0F, + 3, 0x1F6E2, 0xFE0F, + 3, 0x1F6E3, 0xFE0F, + 3, 0x1F6E4, 0xFE0F, + 3, 0x1F6E5, 0xFE0F, + 3, 0x1F6E9, 0xFE0F, + 3, 0x1F6F0, 0xFE0F, + 3, 0x1F6F3, 0xFE0F, + // #325 (17777+48/2): bp=Emoji_Keycap_Sequence + 4, 0x0023, 0xFE0F, 0x20E3, + 4, 0x002A, 0xFE0F, 0x20E3, + 4, 0x0030, 0xFE0F, 0x20E3, + 4, 0x0031, 0xFE0F, 0x20E3, + 4, 0x0032, 0xFE0F, 0x20E3, + 4, 0x0033, 0xFE0F, 0x20E3, + 4, 0x0034, 0xFE0F, 0x20E3, + 4, 0x0035, 0xFE0F, 0x20E3, + 4, 0x0036, 0xFE0F, 0x20E3, + 4, 0x0037, 0xFE0F, 0x20E3, + 4, 0x0038, 0xFE0F, 0x20E3, + 4, 0x0039, 0xFE0F, 0x20E3, + // #326 (17801+1936/2): bp=RGI_Emoji_Modifier_Sequence + 3, 0x261D, 0x1F3FB, + 3, 0x261D, 0x1F3FC, + 3, 0x261D, 0x1F3FD, + 3, 0x261D, 0x1F3FE, + 3, 0x261D, 0x1F3FF, + 3, 0x26F9, 0x1F3FB, + 3, 0x26F9, 0x1F3FC, + 3, 0x26F9, 0x1F3FD, + 3, 0x26F9, 0x1F3FE, + 3, 0x26F9, 0x1F3FF, + 3, 0x270A, 0x1F3FB, + 3, 0x270A, 0x1F3FC, + 3, 0x270A, 0x1F3FD, + 3, 0x270A, 0x1F3FE, + 3, 0x270A, 0x1F3FF, + 3, 0x270B, 0x1F3FB, + 3, 0x270B, 0x1F3FC, + 3, 0x270B, 0x1F3FD, + 3, 0x270B, 0x1F3FE, + 3, 0x270B, 0x1F3FF, + 3, 0x270C, 0x1F3FB, + 3, 0x270C, 0x1F3FC, + 3, 0x270C, 0x1F3FD, + 3, 0x270C, 0x1F3FE, + 3, 0x270C, 0x1F3FF, + 3, 0x270D, 0x1F3FB, + 3, 0x270D, 0x1F3FC, + 3, 0x270D, 0x1F3FD, + 3, 0x270D, 0x1F3FE, + 3, 0x270D, 0x1F3FF, + 3, 0x1F385, 0x1F3FB, + 3, 0x1F385, 0x1F3FC, + 3, 0x1F385, 0x1F3FD, + 3, 0x1F385, 0x1F3FE, + 3, 0x1F385, 0x1F3FF, + 3, 0x1F3C2, 0x1F3FB, + 3, 0x1F3C2, 0x1F3FC, + 3, 0x1F3C2, 0x1F3FD, + 3, 0x1F3C2, 0x1F3FE, + 3, 0x1F3C2, 0x1F3FF, + 3, 0x1F3C3, 0x1F3FB, + 3, 0x1F3C3, 0x1F3FC, + 3, 0x1F3C3, 0x1F3FD, + 3, 0x1F3C3, 0x1F3FE, + 3, 0x1F3C3, 0x1F3FF, + 3, 0x1F3C4, 0x1F3FB, + 3, 0x1F3C4, 0x1F3FC, + 3, 0x1F3C4, 0x1F3FD, + 3, 0x1F3C4, 0x1F3FE, + 3, 0x1F3C4, 0x1F3FF, + 3, 0x1F3C7, 0x1F3FB, + 3, 0x1F3C7, 0x1F3FC, + 3, 0x1F3C7, 0x1F3FD, + 3, 0x1F3C7, 0x1F3FE, + 3, 0x1F3C7, 0x1F3FF, + 3, 0x1F3CA, 0x1F3FB, + 3, 0x1F3CA, 0x1F3FC, + 3, 0x1F3CA, 0x1F3FD, + 3, 0x1F3CA, 0x1F3FE, + 3, 0x1F3CA, 0x1F3FF, + 3, 0x1F3CB, 0x1F3FB, + 3, 0x1F3CB, 0x1F3FC, + 3, 0x1F3CB, 0x1F3FD, + 3, 0x1F3CB, 0x1F3FE, + 3, 0x1F3CB, 0x1F3FF, + 3, 0x1F3CC, 0x1F3FB, + 3, 0x1F3CC, 0x1F3FC, + 3, 0x1F3CC, 0x1F3FD, + 3, 0x1F3CC, 0x1F3FE, + 3, 0x1F3CC, 0x1F3FF, + 3, 0x1F442, 0x1F3FB, + 3, 0x1F442, 0x1F3FC, + 3, 0x1F442, 0x1F3FD, + 3, 0x1F442, 0x1F3FE, + 3, 0x1F442, 0x1F3FF, + 3, 0x1F443, 0x1F3FB, + 3, 0x1F443, 0x1F3FC, + 3, 0x1F443, 0x1F3FD, + 3, 0x1F443, 0x1F3FE, + 3, 0x1F443, 0x1F3FF, + 3, 0x1F446, 0x1F3FB, + 3, 0x1F446, 0x1F3FC, + 3, 0x1F446, 0x1F3FD, + 3, 0x1F446, 0x1F3FE, + 3, 0x1F446, 0x1F3FF, + 3, 0x1F447, 0x1F3FB, + 3, 0x1F447, 0x1F3FC, + 3, 0x1F447, 0x1F3FD, + 3, 0x1F447, 0x1F3FE, + 3, 0x1F447, 0x1F3FF, + 3, 0x1F448, 0x1F3FB, + 3, 0x1F448, 0x1F3FC, + 3, 0x1F448, 0x1F3FD, + 3, 0x1F448, 0x1F3FE, + 3, 0x1F448, 0x1F3FF, + 3, 0x1F449, 0x1F3FB, + 3, 0x1F449, 0x1F3FC, + 3, 0x1F449, 0x1F3FD, + 3, 0x1F449, 0x1F3FE, + 3, 0x1F449, 0x1F3FF, + 3, 0x1F44A, 0x1F3FB, + 3, 0x1F44A, 0x1F3FC, + 3, 0x1F44A, 0x1F3FD, + 3, 0x1F44A, 0x1F3FE, + 3, 0x1F44A, 0x1F3FF, + 3, 0x1F44B, 0x1F3FB, + 3, 0x1F44B, 0x1F3FC, + 3, 0x1F44B, 0x1F3FD, + 3, 0x1F44B, 0x1F3FE, + 3, 0x1F44B, 0x1F3FF, + 3, 0x1F44C, 0x1F3FB, + 3, 0x1F44C, 0x1F3FC, + 3, 0x1F44C, 0x1F3FD, + 3, 0x1F44C, 0x1F3FE, + 3, 0x1F44C, 0x1F3FF, + 3, 0x1F44D, 0x1F3FB, + 3, 0x1F44D, 0x1F3FC, + 3, 0x1F44D, 0x1F3FD, + 3, 0x1F44D, 0x1F3FE, + 3, 0x1F44D, 0x1F3FF, + 3, 0x1F44E, 0x1F3FB, + 3, 0x1F44E, 0x1F3FC, + 3, 0x1F44E, 0x1F3FD, + 3, 0x1F44E, 0x1F3FE, + 3, 0x1F44E, 0x1F3FF, + 3, 0x1F44F, 0x1F3FB, + 3, 0x1F44F, 0x1F3FC, + 3, 0x1F44F, 0x1F3FD, + 3, 0x1F44F, 0x1F3FE, + 3, 0x1F44F, 0x1F3FF, + 3, 0x1F450, 0x1F3FB, + 3, 0x1F450, 0x1F3FC, + 3, 0x1F450, 0x1F3FD, + 3, 0x1F450, 0x1F3FE, + 3, 0x1F450, 0x1F3FF, + 3, 0x1F466, 0x1F3FB, + 3, 0x1F466, 0x1F3FC, + 3, 0x1F466, 0x1F3FD, + 3, 0x1F466, 0x1F3FE, + 3, 0x1F466, 0x1F3FF, + 3, 0x1F467, 0x1F3FB, + 3, 0x1F467, 0x1F3FC, + 3, 0x1F467, 0x1F3FD, + 3, 0x1F467, 0x1F3FE, + 3, 0x1F467, 0x1F3FF, + 3, 0x1F468, 0x1F3FB, + 3, 0x1F468, 0x1F3FC, + 3, 0x1F468, 0x1F3FD, + 3, 0x1F468, 0x1F3FE, + 3, 0x1F468, 0x1F3FF, + 3, 0x1F469, 0x1F3FB, + 3, 0x1F469, 0x1F3FC, + 3, 0x1F469, 0x1F3FD, + 3, 0x1F469, 0x1F3FE, + 3, 0x1F469, 0x1F3FF, + 3, 0x1F46B, 0x1F3FB, + 3, 0x1F46B, 0x1F3FC, + 3, 0x1F46B, 0x1F3FD, + 3, 0x1F46B, 0x1F3FE, + 3, 0x1F46B, 0x1F3FF, + 3, 0x1F46C, 0x1F3FB, + 3, 0x1F46C, 0x1F3FC, + 3, 0x1F46C, 0x1F3FD, + 3, 0x1F46C, 0x1F3FE, + 3, 0x1F46C, 0x1F3FF, + 3, 0x1F46D, 0x1F3FB, + 3, 0x1F46D, 0x1F3FC, + 3, 0x1F46D, 0x1F3FD, + 3, 0x1F46D, 0x1F3FE, + 3, 0x1F46D, 0x1F3FF, + 3, 0x1F46E, 0x1F3FB, + 3, 0x1F46E, 0x1F3FC, + 3, 0x1F46E, 0x1F3FD, + 3, 0x1F46E, 0x1F3FE, + 3, 0x1F46E, 0x1F3FF, + 3, 0x1F470, 0x1F3FB, + 3, 0x1F470, 0x1F3FC, + 3, 0x1F470, 0x1F3FD, + 3, 0x1F470, 0x1F3FE, + 3, 0x1F470, 0x1F3FF, + 3, 0x1F471, 0x1F3FB, + 3, 0x1F471, 0x1F3FC, + 3, 0x1F471, 0x1F3FD, + 3, 0x1F471, 0x1F3FE, + 3, 0x1F471, 0x1F3FF, + 3, 0x1F472, 0x1F3FB, + 3, 0x1F472, 0x1F3FC, + 3, 0x1F472, 0x1F3FD, + 3, 0x1F472, 0x1F3FE, + 3, 0x1F472, 0x1F3FF, + 3, 0x1F473, 0x1F3FB, + 3, 0x1F473, 0x1F3FC, + 3, 0x1F473, 0x1F3FD, + 3, 0x1F473, 0x1F3FE, + 3, 0x1F473, 0x1F3FF, + 3, 0x1F474, 0x1F3FB, + 3, 0x1F474, 0x1F3FC, + 3, 0x1F474, 0x1F3FD, + 3, 0x1F474, 0x1F3FE, + 3, 0x1F474, 0x1F3FF, + 3, 0x1F475, 0x1F3FB, + 3, 0x1F475, 0x1F3FC, + 3, 0x1F475, 0x1F3FD, + 3, 0x1F475, 0x1F3FE, + 3, 0x1F475, 0x1F3FF, + 3, 0x1F476, 0x1F3FB, + 3, 0x1F476, 0x1F3FC, + 3, 0x1F476, 0x1F3FD, + 3, 0x1F476, 0x1F3FE, + 3, 0x1F476, 0x1F3FF, + 3, 0x1F477, 0x1F3FB, + 3, 0x1F477, 0x1F3FC, + 3, 0x1F477, 0x1F3FD, + 3, 0x1F477, 0x1F3FE, + 3, 0x1F477, 0x1F3FF, + 3, 0x1F478, 0x1F3FB, + 3, 0x1F478, 0x1F3FC, + 3, 0x1F478, 0x1F3FD, + 3, 0x1F478, 0x1F3FE, + 3, 0x1F478, 0x1F3FF, + 3, 0x1F47C, 0x1F3FB, + 3, 0x1F47C, 0x1F3FC, + 3, 0x1F47C, 0x1F3FD, + 3, 0x1F47C, 0x1F3FE, + 3, 0x1F47C, 0x1F3FF, + 3, 0x1F481, 0x1F3FB, + 3, 0x1F481, 0x1F3FC, + 3, 0x1F481, 0x1F3FD, + 3, 0x1F481, 0x1F3FE, + 3, 0x1F481, 0x1F3FF, + 3, 0x1F482, 0x1F3FB, + 3, 0x1F482, 0x1F3FC, + 3, 0x1F482, 0x1F3FD, + 3, 0x1F482, 0x1F3FE, + 3, 0x1F482, 0x1F3FF, + 3, 0x1F483, 0x1F3FB, + 3, 0x1F483, 0x1F3FC, + 3, 0x1F483, 0x1F3FD, + 3, 0x1F483, 0x1F3FE, + 3, 0x1F483, 0x1F3FF, + 3, 0x1F485, 0x1F3FB, + 3, 0x1F485, 0x1F3FC, + 3, 0x1F485, 0x1F3FD, + 3, 0x1F485, 0x1F3FE, + 3, 0x1F485, 0x1F3FF, + 3, 0x1F486, 0x1F3FB, + 3, 0x1F486, 0x1F3FC, + 3, 0x1F486, 0x1F3FD, + 3, 0x1F486, 0x1F3FE, + 3, 0x1F486, 0x1F3FF, + 3, 0x1F487, 0x1F3FB, + 3, 0x1F487, 0x1F3FC, + 3, 0x1F487, 0x1F3FD, + 3, 0x1F487, 0x1F3FE, + 3, 0x1F487, 0x1F3FF, + 3, 0x1F48F, 0x1F3FB, + 3, 0x1F48F, 0x1F3FC, + 3, 0x1F48F, 0x1F3FD, + 3, 0x1F48F, 0x1F3FE, + 3, 0x1F48F, 0x1F3FF, + 3, 0x1F491, 0x1F3FB, + 3, 0x1F491, 0x1F3FC, + 3, 0x1F491, 0x1F3FD, + 3, 0x1F491, 0x1F3FE, + 3, 0x1F491, 0x1F3FF, + 3, 0x1F4AA, 0x1F3FB, + 3, 0x1F4AA, 0x1F3FC, + 3, 0x1F4AA, 0x1F3FD, + 3, 0x1F4AA, 0x1F3FE, + 3, 0x1F4AA, 0x1F3FF, + 3, 0x1F574, 0x1F3FB, + 3, 0x1F574, 0x1F3FC, + 3, 0x1F574, 0x1F3FD, + 3, 0x1F574, 0x1F3FE, + 3, 0x1F574, 0x1F3FF, + 3, 0x1F575, 0x1F3FB, + 3, 0x1F575, 0x1F3FC, + 3, 0x1F575, 0x1F3FD, + 3, 0x1F575, 0x1F3FE, + 3, 0x1F575, 0x1F3FF, + 3, 0x1F57A, 0x1F3FB, + 3, 0x1F57A, 0x1F3FC, + 3, 0x1F57A, 0x1F3FD, + 3, 0x1F57A, 0x1F3FE, + 3, 0x1F57A, 0x1F3FF, + 3, 0x1F590, 0x1F3FB, + 3, 0x1F590, 0x1F3FC, + 3, 0x1F590, 0x1F3FD, + 3, 0x1F590, 0x1F3FE, + 3, 0x1F590, 0x1F3FF, + 3, 0x1F595, 0x1F3FB, + 3, 0x1F595, 0x1F3FC, + 3, 0x1F595, 0x1F3FD, + 3, 0x1F595, 0x1F3FE, + 3, 0x1F595, 0x1F3FF, + 3, 0x1F596, 0x1F3FB, + 3, 0x1F596, 0x1F3FC, + 3, 0x1F596, 0x1F3FD, + 3, 0x1F596, 0x1F3FE, + 3, 0x1F596, 0x1F3FF, + 3, 0x1F645, 0x1F3FB, + 3, 0x1F645, 0x1F3FC, + 3, 0x1F645, 0x1F3FD, + 3, 0x1F645, 0x1F3FE, + 3, 0x1F645, 0x1F3FF, + 3, 0x1F646, 0x1F3FB, + 3, 0x1F646, 0x1F3FC, + 3, 0x1F646, 0x1F3FD, + 3, 0x1F646, 0x1F3FE, + 3, 0x1F646, 0x1F3FF, + 3, 0x1F647, 0x1F3FB, + 3, 0x1F647, 0x1F3FC, + 3, 0x1F647, 0x1F3FD, + 3, 0x1F647, 0x1F3FE, + 3, 0x1F647, 0x1F3FF, + 3, 0x1F64B, 0x1F3FB, + 3, 0x1F64B, 0x1F3FC, + 3, 0x1F64B, 0x1F3FD, + 3, 0x1F64B, 0x1F3FE, + 3, 0x1F64B, 0x1F3FF, + 3, 0x1F64C, 0x1F3FB, + 3, 0x1F64C, 0x1F3FC, + 3, 0x1F64C, 0x1F3FD, + 3, 0x1F64C, 0x1F3FE, + 3, 0x1F64C, 0x1F3FF, + 3, 0x1F64D, 0x1F3FB, + 3, 0x1F64D, 0x1F3FC, + 3, 0x1F64D, 0x1F3FD, + 3, 0x1F64D, 0x1F3FE, + 3, 0x1F64D, 0x1F3FF, + 3, 0x1F64E, 0x1F3FB, + 3, 0x1F64E, 0x1F3FC, + 3, 0x1F64E, 0x1F3FD, + 3, 0x1F64E, 0x1F3FE, + 3, 0x1F64E, 0x1F3FF, + 3, 0x1F64F, 0x1F3FB, + 3, 0x1F64F, 0x1F3FC, + 3, 0x1F64F, 0x1F3FD, + 3, 0x1F64F, 0x1F3FE, + 3, 0x1F64F, 0x1F3FF, + 3, 0x1F6A3, 0x1F3FB, + 3, 0x1F6A3, 0x1F3FC, + 3, 0x1F6A3, 0x1F3FD, + 3, 0x1F6A3, 0x1F3FE, + 3, 0x1F6A3, 0x1F3FF, + 3, 0x1F6B4, 0x1F3FB, + 3, 0x1F6B4, 0x1F3FC, + 3, 0x1F6B4, 0x1F3FD, + 3, 0x1F6B4, 0x1F3FE, + 3, 0x1F6B4, 0x1F3FF, + 3, 0x1F6B5, 0x1F3FB, + 3, 0x1F6B5, 0x1F3FC, + 3, 0x1F6B5, 0x1F3FD, + 3, 0x1F6B5, 0x1F3FE, + 3, 0x1F6B5, 0x1F3FF, + 3, 0x1F6B6, 0x1F3FB, + 3, 0x1F6B6, 0x1F3FC, + 3, 0x1F6B6, 0x1F3FD, + 3, 0x1F6B6, 0x1F3FE, + 3, 0x1F6B6, 0x1F3FF, + 3, 0x1F6C0, 0x1F3FB, + 3, 0x1F6C0, 0x1F3FC, + 3, 0x1F6C0, 0x1F3FD, + 3, 0x1F6C0, 0x1F3FE, + 3, 0x1F6C0, 0x1F3FF, + 3, 0x1F6CC, 0x1F3FB, + 3, 0x1F6CC, 0x1F3FC, + 3, 0x1F6CC, 0x1F3FD, + 3, 0x1F6CC, 0x1F3FE, + 3, 0x1F6CC, 0x1F3FF, + 3, 0x1F90C, 0x1F3FB, + 3, 0x1F90C, 0x1F3FC, + 3, 0x1F90C, 0x1F3FD, + 3, 0x1F90C, 0x1F3FE, + 3, 0x1F90C, 0x1F3FF, + 3, 0x1F90F, 0x1F3FB, + 3, 0x1F90F, 0x1F3FC, + 3, 0x1F90F, 0x1F3FD, + 3, 0x1F90F, 0x1F3FE, + 3, 0x1F90F, 0x1F3FF, + 3, 0x1F918, 0x1F3FB, + 3, 0x1F918, 0x1F3FC, + 3, 0x1F918, 0x1F3FD, + 3, 0x1F918, 0x1F3FE, + 3, 0x1F918, 0x1F3FF, + 3, 0x1F919, 0x1F3FB, + 3, 0x1F919, 0x1F3FC, + 3, 0x1F919, 0x1F3FD, + 3, 0x1F919, 0x1F3FE, + 3, 0x1F919, 0x1F3FF, + 3, 0x1F91A, 0x1F3FB, + 3, 0x1F91A, 0x1F3FC, + 3, 0x1F91A, 0x1F3FD, + 3, 0x1F91A, 0x1F3FE, + 3, 0x1F91A, 0x1F3FF, + 3, 0x1F91B, 0x1F3FB, + 3, 0x1F91B, 0x1F3FC, + 3, 0x1F91B, 0x1F3FD, + 3, 0x1F91B, 0x1F3FE, + 3, 0x1F91B, 0x1F3FF, + 3, 0x1F91C, 0x1F3FB, + 3, 0x1F91C, 0x1F3FC, + 3, 0x1F91C, 0x1F3FD, + 3, 0x1F91C, 0x1F3FE, + 3, 0x1F91C, 0x1F3FF, + 3, 0x1F91D, 0x1F3FB, + 3, 0x1F91D, 0x1F3FC, + 3, 0x1F91D, 0x1F3FD, + 3, 0x1F91D, 0x1F3FE, + 3, 0x1F91D, 0x1F3FF, + 3, 0x1F91E, 0x1F3FB, + 3, 0x1F91E, 0x1F3FC, + 3, 0x1F91E, 0x1F3FD, + 3, 0x1F91E, 0x1F3FE, + 3, 0x1F91E, 0x1F3FF, + 3, 0x1F91F, 0x1F3FB, + 3, 0x1F91F, 0x1F3FC, + 3, 0x1F91F, 0x1F3FD, + 3, 0x1F91F, 0x1F3FE, + 3, 0x1F91F, 0x1F3FF, + 3, 0x1F926, 0x1F3FB, + 3, 0x1F926, 0x1F3FC, + 3, 0x1F926, 0x1F3FD, + 3, 0x1F926, 0x1F3FE, + 3, 0x1F926, 0x1F3FF, + 3, 0x1F930, 0x1F3FB, + 3, 0x1F930, 0x1F3FC, + 3, 0x1F930, 0x1F3FD, + 3, 0x1F930, 0x1F3FE, + 3, 0x1F930, 0x1F3FF, + 3, 0x1F931, 0x1F3FB, + 3, 0x1F931, 0x1F3FC, + 3, 0x1F931, 0x1F3FD, + 3, 0x1F931, 0x1F3FE, + 3, 0x1F931, 0x1F3FF, + 3, 0x1F932, 0x1F3FB, + 3, 0x1F932, 0x1F3FC, + 3, 0x1F932, 0x1F3FD, + 3, 0x1F932, 0x1F3FE, + 3, 0x1F932, 0x1F3FF, + 3, 0x1F933, 0x1F3FB, + 3, 0x1F933, 0x1F3FC, + 3, 0x1F933, 0x1F3FD, + 3, 0x1F933, 0x1F3FE, + 3, 0x1F933, 0x1F3FF, + 3, 0x1F934, 0x1F3FB, + 3, 0x1F934, 0x1F3FC, + 3, 0x1F934, 0x1F3FD, + 3, 0x1F934, 0x1F3FE, + 3, 0x1F934, 0x1F3FF, + 3, 0x1F935, 0x1F3FB, + 3, 0x1F935, 0x1F3FC, + 3, 0x1F935, 0x1F3FD, + 3, 0x1F935, 0x1F3FE, + 3, 0x1F935, 0x1F3FF, + 3, 0x1F936, 0x1F3FB, + 3, 0x1F936, 0x1F3FC, + 3, 0x1F936, 0x1F3FD, + 3, 0x1F936, 0x1F3FE, + 3, 0x1F936, 0x1F3FF, + 3, 0x1F937, 0x1F3FB, + 3, 0x1F937, 0x1F3FC, + 3, 0x1F937, 0x1F3FD, + 3, 0x1F937, 0x1F3FE, + 3, 0x1F937, 0x1F3FF, + 3, 0x1F938, 0x1F3FB, + 3, 0x1F938, 0x1F3FC, + 3, 0x1F938, 0x1F3FD, + 3, 0x1F938, 0x1F3FE, + 3, 0x1F938, 0x1F3FF, + 3, 0x1F939, 0x1F3FB, + 3, 0x1F939, 0x1F3FC, + 3, 0x1F939, 0x1F3FD, + 3, 0x1F939, 0x1F3FE, + 3, 0x1F939, 0x1F3FF, + 3, 0x1F93D, 0x1F3FB, + 3, 0x1F93D, 0x1F3FC, + 3, 0x1F93D, 0x1F3FD, + 3, 0x1F93D, 0x1F3FE, + 3, 0x1F93D, 0x1F3FF, + 3, 0x1F93E, 0x1F3FB, + 3, 0x1F93E, 0x1F3FC, + 3, 0x1F93E, 0x1F3FD, + 3, 0x1F93E, 0x1F3FE, + 3, 0x1F93E, 0x1F3FF, + 3, 0x1F977, 0x1F3FB, + 3, 0x1F977, 0x1F3FC, + 3, 0x1F977, 0x1F3FD, + 3, 0x1F977, 0x1F3FE, + 3, 0x1F977, 0x1F3FF, + 3, 0x1F9B5, 0x1F3FB, + 3, 0x1F9B5, 0x1F3FC, + 3, 0x1F9B5, 0x1F3FD, + 3, 0x1F9B5, 0x1F3FE, + 3, 0x1F9B5, 0x1F3FF, + 3, 0x1F9B6, 0x1F3FB, + 3, 0x1F9B6, 0x1F3FC, + 3, 0x1F9B6, 0x1F3FD, + 3, 0x1F9B6, 0x1F3FE, + 3, 0x1F9B6, 0x1F3FF, + 3, 0x1F9B8, 0x1F3FB, + 3, 0x1F9B8, 0x1F3FC, + 3, 0x1F9B8, 0x1F3FD, + 3, 0x1F9B8, 0x1F3FE, + 3, 0x1F9B8, 0x1F3FF, + 3, 0x1F9B9, 0x1F3FB, + 3, 0x1F9B9, 0x1F3FC, + 3, 0x1F9B9, 0x1F3FD, + 3, 0x1F9B9, 0x1F3FE, + 3, 0x1F9B9, 0x1F3FF, + 3, 0x1F9BB, 0x1F3FB, + 3, 0x1F9BB, 0x1F3FC, + 3, 0x1F9BB, 0x1F3FD, + 3, 0x1F9BB, 0x1F3FE, + 3, 0x1F9BB, 0x1F3FF, + 3, 0x1F9CD, 0x1F3FB, + 3, 0x1F9CD, 0x1F3FC, + 3, 0x1F9CD, 0x1F3FD, + 3, 0x1F9CD, 0x1F3FE, + 3, 0x1F9CD, 0x1F3FF, + 3, 0x1F9CE, 0x1F3FB, + 3, 0x1F9CE, 0x1F3FC, + 3, 0x1F9CE, 0x1F3FD, + 3, 0x1F9CE, 0x1F3FE, + 3, 0x1F9CE, 0x1F3FF, + 3, 0x1F9CF, 0x1F3FB, + 3, 0x1F9CF, 0x1F3FC, + 3, 0x1F9CF, 0x1F3FD, + 3, 0x1F9CF, 0x1F3FE, + 3, 0x1F9CF, 0x1F3FF, + 3, 0x1F9D1, 0x1F3FB, + 3, 0x1F9D1, 0x1F3FC, + 3, 0x1F9D1, 0x1F3FD, + 3, 0x1F9D1, 0x1F3FE, + 3, 0x1F9D1, 0x1F3FF, + 3, 0x1F9D2, 0x1F3FB, + 3, 0x1F9D2, 0x1F3FC, + 3, 0x1F9D2, 0x1F3FD, + 3, 0x1F9D2, 0x1F3FE, + 3, 0x1F9D2, 0x1F3FF, + 3, 0x1F9D3, 0x1F3FB, + 3, 0x1F9D3, 0x1F3FC, + 3, 0x1F9D3, 0x1F3FD, + 3, 0x1F9D3, 0x1F3FE, + 3, 0x1F9D3, 0x1F3FF, + 3, 0x1F9D4, 0x1F3FB, + 3, 0x1F9D4, 0x1F3FC, + 3, 0x1F9D4, 0x1F3FD, + 3, 0x1F9D4, 0x1F3FE, + 3, 0x1F9D4, 0x1F3FF, + 3, 0x1F9D5, 0x1F3FB, + 3, 0x1F9D5, 0x1F3FC, + 3, 0x1F9D5, 0x1F3FD, + 3, 0x1F9D5, 0x1F3FE, + 3, 0x1F9D5, 0x1F3FF, + 3, 0x1F9D6, 0x1F3FB, + 3, 0x1F9D6, 0x1F3FC, + 3, 0x1F9D6, 0x1F3FD, + 3, 0x1F9D6, 0x1F3FE, + 3, 0x1F9D6, 0x1F3FF, + 3, 0x1F9D7, 0x1F3FB, + 3, 0x1F9D7, 0x1F3FC, + 3, 0x1F9D7, 0x1F3FD, + 3, 0x1F9D7, 0x1F3FE, + 3, 0x1F9D7, 0x1F3FF, + 3, 0x1F9D8, 0x1F3FB, + 3, 0x1F9D8, 0x1F3FC, + 3, 0x1F9D8, 0x1F3FD, + 3, 0x1F9D8, 0x1F3FE, + 3, 0x1F9D8, 0x1F3FF, + 3, 0x1F9D9, 0x1F3FB, + 3, 0x1F9D9, 0x1F3FC, + 3, 0x1F9D9, 0x1F3FD, + 3, 0x1F9D9, 0x1F3FE, + 3, 0x1F9D9, 0x1F3FF, + 3, 0x1F9DA, 0x1F3FB, + 3, 0x1F9DA, 0x1F3FC, + 3, 0x1F9DA, 0x1F3FD, + 3, 0x1F9DA, 0x1F3FE, + 3, 0x1F9DA, 0x1F3FF, + 3, 0x1F9DB, 0x1F3FB, + 3, 0x1F9DB, 0x1F3FC, + 3, 0x1F9DB, 0x1F3FD, + 3, 0x1F9DB, 0x1F3FE, + 3, 0x1F9DB, 0x1F3FF, + 3, 0x1F9DC, 0x1F3FB, + 3, 0x1F9DC, 0x1F3FC, + 3, 0x1F9DC, 0x1F3FD, + 3, 0x1F9DC, 0x1F3FE, + 3, 0x1F9DC, 0x1F3FF, + 3, 0x1F9DD, 0x1F3FB, + 3, 0x1F9DD, 0x1F3FC, + 3, 0x1F9DD, 0x1F3FD, + 3, 0x1F9DD, 0x1F3FE, + 3, 0x1F9DD, 0x1F3FF, + 3, 0x1FAC3, 0x1F3FB, + 3, 0x1FAC3, 0x1F3FC, + 3, 0x1FAC3, 0x1F3FD, + 3, 0x1FAC3, 0x1F3FE, + 3, 0x1FAC3, 0x1F3FF, + 3, 0x1FAC4, 0x1F3FB, + 3, 0x1FAC4, 0x1F3FC, + 3, 0x1FAC4, 0x1F3FD, + 3, 0x1FAC4, 0x1F3FE, + 3, 0x1FAC4, 0x1F3FF, + 3, 0x1FAC5, 0x1F3FB, + 3, 0x1FAC5, 0x1F3FC, + 3, 0x1FAC5, 0x1F3FD, + 3, 0x1FAC5, 0x1F3FE, + 3, 0x1FAC5, 0x1F3FF, + 3, 0x1FAF0, 0x1F3FB, + 3, 0x1FAF0, 0x1F3FC, + 3, 0x1FAF0, 0x1F3FD, + 3, 0x1FAF0, 0x1F3FE, + 3, 0x1FAF0, 0x1F3FF, + 3, 0x1FAF1, 0x1F3FB, + 3, 0x1FAF1, 0x1F3FC, + 3, 0x1FAF1, 0x1F3FD, + 3, 0x1FAF1, 0x1F3FE, + 3, 0x1FAF1, 0x1F3FF, + 3, 0x1FAF2, 0x1F3FB, + 3, 0x1FAF2, 0x1F3FC, + 3, 0x1FAF2, 0x1F3FD, + 3, 0x1FAF2, 0x1F3FE, + 3, 0x1FAF2, 0x1F3FF, + 3, 0x1FAF3, 0x1F3FB, + 3, 0x1FAF3, 0x1F3FC, + 3, 0x1FAF3, 0x1F3FD, + 3, 0x1FAF3, 0x1F3FE, + 3, 0x1FAF3, 0x1F3FF, + 3, 0x1FAF4, 0x1F3FB, + 3, 0x1FAF4, 0x1F3FC, + 3, 0x1FAF4, 0x1F3FD, + 3, 0x1FAF4, 0x1F3FE, + 3, 0x1FAF4, 0x1F3FF, + 3, 0x1FAF5, 0x1F3FB, + 3, 0x1FAF5, 0x1F3FC, + 3, 0x1FAF5, 0x1F3FD, + 3, 0x1FAF5, 0x1F3FE, + 3, 0x1FAF5, 0x1F3FF, + 3, 0x1FAF6, 0x1F3FB, + 3, 0x1FAF6, 0x1F3FC, + 3, 0x1FAF6, 0x1F3FD, + 3, 0x1FAF6, 0x1F3FE, + 3, 0x1FAF6, 0x1F3FF, + 0, // Padding. + // #327 (18769+774/2): bp=RGI_Emoji_Flag_Sequence + 3, 0x1F1E6, 0x1F1E8, + 3, 0x1F1E6, 0x1F1E9, + 3, 0x1F1E6, 0x1F1EA, + 3, 0x1F1E6, 0x1F1EB, + 3, 0x1F1E6, 0x1F1EC, + 3, 0x1F1E6, 0x1F1EE, + 3, 0x1F1E6, 0x1F1F1, + 3, 0x1F1E6, 0x1F1F2, + 3, 0x1F1E6, 0x1F1F4, + 3, 0x1F1E6, 0x1F1F6, + 3, 0x1F1E6, 0x1F1F7, + 3, 0x1F1E6, 0x1F1F8, + 3, 0x1F1E6, 0x1F1F9, + 3, 0x1F1E6, 0x1F1FA, + 3, 0x1F1E6, 0x1F1FC, + 3, 0x1F1E6, 0x1F1FD, + 3, 0x1F1E6, 0x1F1FF, + 3, 0x1F1E7, 0x1F1E6, + 3, 0x1F1E7, 0x1F1E7, + 3, 0x1F1E7, 0x1F1E9, + 3, 0x1F1E7, 0x1F1EA, + 3, 0x1F1E7, 0x1F1EB, + 3, 0x1F1E7, 0x1F1EC, + 3, 0x1F1E7, 0x1F1ED, + 3, 0x1F1E7, 0x1F1EE, + 3, 0x1F1E7, 0x1F1EF, + 3, 0x1F1E7, 0x1F1F1, + 3, 0x1F1E7, 0x1F1F2, + 3, 0x1F1E7, 0x1F1F3, + 3, 0x1F1E7, 0x1F1F4, + 3, 0x1F1E7, 0x1F1F6, + 3, 0x1F1E7, 0x1F1F7, + 3, 0x1F1E7, 0x1F1F8, + 3, 0x1F1E7, 0x1F1F9, + 3, 0x1F1E7, 0x1F1FB, + 3, 0x1F1E7, 0x1F1FC, + 3, 0x1F1E7, 0x1F1FE, + 3, 0x1F1E7, 0x1F1FF, + 3, 0x1F1E8, 0x1F1E6, + 3, 0x1F1E8, 0x1F1E8, + 3, 0x1F1E8, 0x1F1E9, + 3, 0x1F1E8, 0x1F1EB, + 3, 0x1F1E8, 0x1F1EC, + 3, 0x1F1E8, 0x1F1ED, + 3, 0x1F1E8, 0x1F1EE, + 3, 0x1F1E8, 0x1F1F0, + 3, 0x1F1E8, 0x1F1F1, + 3, 0x1F1E8, 0x1F1F2, + 3, 0x1F1E8, 0x1F1F3, + 3, 0x1F1E8, 0x1F1F4, + 3, 0x1F1E8, 0x1F1F5, + 3, 0x1F1E8, 0x1F1F7, + 3, 0x1F1E8, 0x1F1FA, + 3, 0x1F1E8, 0x1F1FB, + 3, 0x1F1E8, 0x1F1FC, + 3, 0x1F1E8, 0x1F1FD, + 3, 0x1F1E8, 0x1F1FE, + 3, 0x1F1E8, 0x1F1FF, + 3, 0x1F1E9, 0x1F1EA, + 3, 0x1F1E9, 0x1F1EC, + 3, 0x1F1E9, 0x1F1EF, + 3, 0x1F1E9, 0x1F1F0, + 3, 0x1F1E9, 0x1F1F2, + 3, 0x1F1E9, 0x1F1F4, + 3, 0x1F1E9, 0x1F1FF, + 3, 0x1F1EA, 0x1F1E6, + 3, 0x1F1EA, 0x1F1E8, + 3, 0x1F1EA, 0x1F1EA, + 3, 0x1F1EA, 0x1F1EC, + 3, 0x1F1EA, 0x1F1ED, + 3, 0x1F1EA, 0x1F1F7, + 3, 0x1F1EA, 0x1F1F8, + 3, 0x1F1EA, 0x1F1F9, + 3, 0x1F1EA, 0x1F1FA, + 3, 0x1F1EB, 0x1F1EE, + 3, 0x1F1EB, 0x1F1EF, + 3, 0x1F1EB, 0x1F1F0, + 3, 0x1F1EB, 0x1F1F2, + 3, 0x1F1EB, 0x1F1F4, + 3, 0x1F1EB, 0x1F1F7, + 3, 0x1F1EC, 0x1F1E6, + 3, 0x1F1EC, 0x1F1E7, + 3, 0x1F1EC, 0x1F1E9, + 3, 0x1F1EC, 0x1F1EA, + 3, 0x1F1EC, 0x1F1EB, + 3, 0x1F1EC, 0x1F1EC, + 3, 0x1F1EC, 0x1F1ED, + 3, 0x1F1EC, 0x1F1EE, + 3, 0x1F1EC, 0x1F1F1, + 3, 0x1F1EC, 0x1F1F2, + 3, 0x1F1EC, 0x1F1F3, + 3, 0x1F1EC, 0x1F1F5, + 3, 0x1F1EC, 0x1F1F6, + 3, 0x1F1EC, 0x1F1F7, + 3, 0x1F1EC, 0x1F1F8, + 3, 0x1F1EC, 0x1F1F9, + 3, 0x1F1EC, 0x1F1FA, + 3, 0x1F1EC, 0x1F1FC, + 3, 0x1F1EC, 0x1F1FE, + 3, 0x1F1ED, 0x1F1F0, + 3, 0x1F1ED, 0x1F1F2, + 3, 0x1F1ED, 0x1F1F3, + 3, 0x1F1ED, 0x1F1F7, + 3, 0x1F1ED, 0x1F1F9, + 3, 0x1F1ED, 0x1F1FA, + 3, 0x1F1EE, 0x1F1E8, + 3, 0x1F1EE, 0x1F1E9, + 3, 0x1F1EE, 0x1F1EA, + 3, 0x1F1EE, 0x1F1F1, + 3, 0x1F1EE, 0x1F1F2, + 3, 0x1F1EE, 0x1F1F3, + 3, 0x1F1EE, 0x1F1F4, + 3, 0x1F1EE, 0x1F1F6, + 3, 0x1F1EE, 0x1F1F7, + 3, 0x1F1EE, 0x1F1F8, + 3, 0x1F1EE, 0x1F1F9, + 3, 0x1F1EF, 0x1F1EA, + 3, 0x1F1EF, 0x1F1F2, + 3, 0x1F1EF, 0x1F1F4, + 3, 0x1F1EF, 0x1F1F5, + 3, 0x1F1F0, 0x1F1EA, + 3, 0x1F1F0, 0x1F1EC, + 3, 0x1F1F0, 0x1F1ED, + 3, 0x1F1F0, 0x1F1EE, + 3, 0x1F1F0, 0x1F1F2, + 3, 0x1F1F0, 0x1F1F3, + 3, 0x1F1F0, 0x1F1F5, + 3, 0x1F1F0, 0x1F1F7, + 3, 0x1F1F0, 0x1F1FC, + 3, 0x1F1F0, 0x1F1FE, + 3, 0x1F1F0, 0x1F1FF, + 3, 0x1F1F1, 0x1F1E6, + 3, 0x1F1F1, 0x1F1E7, + 3, 0x1F1F1, 0x1F1E8, + 3, 0x1F1F1, 0x1F1EE, + 3, 0x1F1F1, 0x1F1F0, + 3, 0x1F1F1, 0x1F1F7, + 3, 0x1F1F1, 0x1F1F8, + 3, 0x1F1F1, 0x1F1F9, + 3, 0x1F1F1, 0x1F1FA, + 3, 0x1F1F1, 0x1F1FB, + 3, 0x1F1F1, 0x1F1FE, + 3, 0x1F1F2, 0x1F1E6, + 3, 0x1F1F2, 0x1F1E8, + 3, 0x1F1F2, 0x1F1E9, + 3, 0x1F1F2, 0x1F1EA, + 3, 0x1F1F2, 0x1F1EB, + 3, 0x1F1F2, 0x1F1EC, + 3, 0x1F1F2, 0x1F1ED, + 3, 0x1F1F2, 0x1F1F0, + 3, 0x1F1F2, 0x1F1F1, + 3, 0x1F1F2, 0x1F1F2, + 3, 0x1F1F2, 0x1F1F3, + 3, 0x1F1F2, 0x1F1F4, + 3, 0x1F1F2, 0x1F1F5, + 3, 0x1F1F2, 0x1F1F6, + 3, 0x1F1F2, 0x1F1F7, + 3, 0x1F1F2, 0x1F1F8, + 3, 0x1F1F2, 0x1F1F9, + 3, 0x1F1F2, 0x1F1FA, + 3, 0x1F1F2, 0x1F1FB, + 3, 0x1F1F2, 0x1F1FC, + 3, 0x1F1F2, 0x1F1FD, + 3, 0x1F1F2, 0x1F1FE, + 3, 0x1F1F2, 0x1F1FF, + 3, 0x1F1F3, 0x1F1E6, + 3, 0x1F1F3, 0x1F1E8, + 3, 0x1F1F3, 0x1F1EA, + 3, 0x1F1F3, 0x1F1EB, + 3, 0x1F1F3, 0x1F1EC, + 3, 0x1F1F3, 0x1F1EE, + 3, 0x1F1F3, 0x1F1F1, + 3, 0x1F1F3, 0x1F1F4, + 3, 0x1F1F3, 0x1F1F5, + 3, 0x1F1F3, 0x1F1F7, + 3, 0x1F1F3, 0x1F1FA, + 3, 0x1F1F3, 0x1F1FF, + 3, 0x1F1F4, 0x1F1F2, + 3, 0x1F1F5, 0x1F1E6, + 3, 0x1F1F5, 0x1F1EA, + 3, 0x1F1F5, 0x1F1EB, + 3, 0x1F1F5, 0x1F1EC, + 3, 0x1F1F5, 0x1F1ED, + 3, 0x1F1F5, 0x1F1F0, + 3, 0x1F1F5, 0x1F1F1, + 3, 0x1F1F5, 0x1F1F2, + 3, 0x1F1F5, 0x1F1F3, + 3, 0x1F1F5, 0x1F1F7, + 3, 0x1F1F5, 0x1F1F8, + 3, 0x1F1F5, 0x1F1F9, + 3, 0x1F1F5, 0x1F1FC, + 3, 0x1F1F5, 0x1F1FE, + 3, 0x1F1F6, 0x1F1E6, + 3, 0x1F1F7, 0x1F1EA, + 3, 0x1F1F7, 0x1F1F4, + 3, 0x1F1F7, 0x1F1F8, + 3, 0x1F1F7, 0x1F1FA, + 3, 0x1F1F7, 0x1F1FC, + 3, 0x1F1F8, 0x1F1E6, + 3, 0x1F1F8, 0x1F1E7, + 3, 0x1F1F8, 0x1F1E8, + 3, 0x1F1F8, 0x1F1E9, + 3, 0x1F1F8, 0x1F1EA, + 3, 0x1F1F8, 0x1F1EC, + 3, 0x1F1F8, 0x1F1ED, + 3, 0x1F1F8, 0x1F1EE, + 3, 0x1F1F8, 0x1F1EF, + 3, 0x1F1F8, 0x1F1F0, + 3, 0x1F1F8, 0x1F1F1, + 3, 0x1F1F8, 0x1F1F2, + 3, 0x1F1F8, 0x1F1F3, + 3, 0x1F1F8, 0x1F1F4, + 3, 0x1F1F8, 0x1F1F7, + 3, 0x1F1F8, 0x1F1F8, + 3, 0x1F1F8, 0x1F1F9, + 3, 0x1F1F8, 0x1F1FB, + 3, 0x1F1F8, 0x1F1FD, + 3, 0x1F1F8, 0x1F1FE, + 3, 0x1F1F8, 0x1F1FF, + 3, 0x1F1F9, 0x1F1E6, + 3, 0x1F1F9, 0x1F1E8, + 3, 0x1F1F9, 0x1F1E9, + 3, 0x1F1F9, 0x1F1EB, + 3, 0x1F1F9, 0x1F1EC, + 3, 0x1F1F9, 0x1F1ED, + 3, 0x1F1F9, 0x1F1EF, + 3, 0x1F1F9, 0x1F1F0, + 3, 0x1F1F9, 0x1F1F1, + 3, 0x1F1F9, 0x1F1F2, + 3, 0x1F1F9, 0x1F1F3, + 3, 0x1F1F9, 0x1F1F4, + 3, 0x1F1F9, 0x1F1F7, + 3, 0x1F1F9, 0x1F1F9, + 3, 0x1F1F9, 0x1F1FB, + 3, 0x1F1F9, 0x1F1FC, + 3, 0x1F1F9, 0x1F1FF, + 3, 0x1F1FA, 0x1F1E6, + 3, 0x1F1FA, 0x1F1EC, + 3, 0x1F1FA, 0x1F1F2, + 3, 0x1F1FA, 0x1F1F3, + 3, 0x1F1FA, 0x1F1F8, + 3, 0x1F1FA, 0x1F1FE, + 3, 0x1F1FA, 0x1F1FF, + 3, 0x1F1FB, 0x1F1E6, + 3, 0x1F1FB, 0x1F1E8, + 3, 0x1F1FB, 0x1F1EA, + 3, 0x1F1FB, 0x1F1EC, + 3, 0x1F1FB, 0x1F1EE, + 3, 0x1F1FB, 0x1F1F3, + 3, 0x1F1FB, 0x1F1FA, + 3, 0x1F1FC, 0x1F1EB, + 3, 0x1F1FC, 0x1F1F8, + 3, 0x1F1FD, 0x1F1F0, + 3, 0x1F1FE, 0x1F1EA, + 3, 0x1F1FE, 0x1F1F9, + 3, 0x1F1FF, 0x1F1E6, + 3, 0x1F1FF, 0x1F1F2, + 3, 0x1F1FF, 0x1F1FC, + // #328 (19156+24/2): bp=RGI_Emoji_Tag_Sequence + 8, 0x1F3F4, 0xE0067, 0xE0062, 0xE0065, 0xE006E, 0xE0067, 0xE007F, + 8, 0x1F3F4, 0xE0067, 0xE0062, 0xE0073, 0xE0063, 0xE0074, 0xE007F, + 8, 0x1F3F4, 0xE0067, 0xE0062, 0xE0077, 0xE006C, 0xE0073, 0xE007F, + // #329 (19168+8482/2): bp=RGI_Emoji_ZWJ_Sequence + 7, 0x1F468, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, + 9, 0x1F468, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, + 4, 0x1F468, 0x200D, 0x1F466, + 6, 0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466, + 4, 0x1F468, 0x200D, 0x1F467, + 6, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466, + 6, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467, + 6, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F466, + 8, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466, + 6, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467, + 8, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466, + 8, 0x1F468, 0x200D, 0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467, + 6, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F466, + 8, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466, + 6, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, + 8, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466, + 8, 0x1F468, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467, + 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F468, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 8, 0x1F468, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F468, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 8, 0x1F468, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F468, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 8, 0x1F468, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F468, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F468, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F468, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F468, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 7, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, + 7, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, + 9, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, + 9, 0x1F469, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, + 4, 0x1F469, 0x200D, 0x1F466, + 6, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466, + 4, 0x1F469, 0x200D, 0x1F467, + 6, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466, + 6, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467, + 6, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F466, + 8, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466, + 6, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467, + 8, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466, + 8, 0x1F469, 0x200D, 0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE, + 9, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE, + 11, 0x1F469, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE, + 8, 0x1F469, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE, + 9, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE, + 11, 0x1F469, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE, + 8, 0x1F469, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE, + 9, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE, + 11, 0x1F469, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE, + 8, 0x1F469, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE, + 9, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE, + 11, 0x1F469, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FF, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD, + 8, 0x1F469, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FF, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FB, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FC, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FD, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FE, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F468, 0x1F3FF, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FB, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FC, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FD, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FE, + 9, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F469, 0x1F3FF, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FB, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FC, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FD, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FE, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F468, 0x1F3FF, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FB, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FC, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FD, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FE, + 11, 0x1F469, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F469, 0x1F3FF, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FB, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FC, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FD, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F468, 0x1F3FE, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FB, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FC, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FD, + 8, 0x1F469, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F469, 0x1F3FE, + 6, 0x1F9D1, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, + 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC, + 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD, + 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE, + 11, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF, + 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC, + 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD, + 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE, + 9, 0x1F9D1, 0x1F3FB, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F384, + 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB, + 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC, + 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD, + 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE, + 8, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF, + 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB, + 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD, + 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE, + 11, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF, + 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB, + 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD, + 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE, + 9, 0x1F9D1, 0x1F3FC, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F384, + 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB, + 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC, + 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD, + 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE, + 8, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF, + 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB, + 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC, + 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE, + 11, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF, + 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB, + 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC, + 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE, + 9, 0x1F9D1, 0x1F3FD, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F384, + 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB, + 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC, + 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD, + 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE, + 8, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF, + 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB, + 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC, + 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD, + 11, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FF, + 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB, + 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC, + 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD, + 9, 0x1F9D1, 0x1F3FE, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FF, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F384, + 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB, + 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC, + 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD, + 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE, + 8, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF, + 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FB, + 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FC, + 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FD, + 11, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F48B, 0x200D, 0x1F9D1, 0x1F3FE, + 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FB, + 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FC, + 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FD, + 9, 0x1F9D1, 0x1F3FF, 0x200D, 0x2764, 0xFE0F, 0x200D, 0x1F9D1, 0x1F3FE, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F384, + 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FB, + 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FC, + 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FD, + 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FE, + 8, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F91D, 0x200D, 0x1F9D1, 0x1F3FF, + 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FC, + 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FD, + 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FE, + 6, 0x1FAF1, 0x1F3FB, 0x200D, 0x1FAF2, 0x1F3FF, + 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FB, + 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FD, + 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FE, + 6, 0x1FAF1, 0x1F3FC, 0x200D, 0x1FAF2, 0x1F3FF, + 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FB, + 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FC, + 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FE, + 6, 0x1FAF1, 0x1F3FD, 0x200D, 0x1FAF2, 0x1F3FF, + 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FB, + 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FC, + 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FD, + 6, 0x1FAF1, 0x1F3FE, 0x200D, 0x1FAF2, 0x1F3FF, + 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FB, + 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FC, + 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FD, + 6, 0x1FAF1, 0x1F3FF, 0x200D, 0x1FAF2, 0x1F3FE, + 5, 0x1F468, 0x200D, 0x2695, 0xFE0F, + 5, 0x1F468, 0x200D, 0x2696, 0xFE0F, + 5, 0x1F468, 0x200D, 0x2708, 0xFE0F, + 4, 0x1F468, 0x200D, 0x1F33E, + 4, 0x1F468, 0x200D, 0x1F373, + 4, 0x1F468, 0x200D, 0x1F37C, + 4, 0x1F468, 0x200D, 0x1F393, + 4, 0x1F468, 0x200D, 0x1F3A4, + 4, 0x1F468, 0x200D, 0x1F3A8, + 4, 0x1F468, 0x200D, 0x1F3EB, + 4, 0x1F468, 0x200D, 0x1F3ED, + 4, 0x1F468, 0x200D, 0x1F4BB, + 4, 0x1F468, 0x200D, 0x1F4BC, + 4, 0x1F468, 0x200D, 0x1F527, + 4, 0x1F468, 0x200D, 0x1F52C, + 4, 0x1F468, 0x200D, 0x1F680, + 4, 0x1F468, 0x200D, 0x1F692, + 4, 0x1F468, 0x200D, 0x1F9AF, + 4, 0x1F468, 0x200D, 0x1F9BC, + 4, 0x1F468, 0x200D, 0x1F9BD, + 6, 0x1F468, 0x1F3FB, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F468, 0x1F3FB, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F468, 0x1F3FB, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F33E, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F373, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F37C, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F393, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3A4, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3A8, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3EB, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F3ED, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F4BB, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F4BC, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F527, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F52C, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F680, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F692, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9AF, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9BC, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9BD, + 6, 0x1F468, 0x1F3FC, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F468, 0x1F3FC, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F468, 0x1F3FC, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F33E, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F373, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F37C, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F393, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3A4, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3A8, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3EB, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F3ED, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F4BB, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F4BC, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F527, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F52C, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F680, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F692, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9AF, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9BC, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9BD, + 6, 0x1F468, 0x1F3FD, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F468, 0x1F3FD, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F468, 0x1F3FD, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F33E, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F373, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F37C, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F393, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3A4, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3A8, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3EB, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F3ED, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F4BB, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F4BC, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F527, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F52C, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F680, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F692, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9AF, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9BC, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9BD, + 6, 0x1F468, 0x1F3FE, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F468, 0x1F3FE, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F468, 0x1F3FE, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F33E, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F373, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F37C, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F393, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3A4, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3A8, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3EB, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F3ED, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F4BB, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F4BC, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F527, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F52C, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F680, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F692, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9AF, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9BC, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9BD, + 6, 0x1F468, 0x1F3FF, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F468, 0x1F3FF, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F468, 0x1F3FF, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F33E, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F373, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F37C, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F393, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3A4, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3A8, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3EB, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F3ED, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F4BB, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F4BC, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F527, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F52C, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F680, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F692, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9AF, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9BC, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9BD, + 5, 0x1F469, 0x200D, 0x2695, 0xFE0F, + 5, 0x1F469, 0x200D, 0x2696, 0xFE0F, + 5, 0x1F469, 0x200D, 0x2708, 0xFE0F, + 4, 0x1F469, 0x200D, 0x1F33E, + 4, 0x1F469, 0x200D, 0x1F373, + 4, 0x1F469, 0x200D, 0x1F37C, + 4, 0x1F469, 0x200D, 0x1F393, + 4, 0x1F469, 0x200D, 0x1F3A4, + 4, 0x1F469, 0x200D, 0x1F3A8, + 4, 0x1F469, 0x200D, 0x1F3EB, + 4, 0x1F469, 0x200D, 0x1F3ED, + 4, 0x1F469, 0x200D, 0x1F4BB, + 4, 0x1F469, 0x200D, 0x1F4BC, + 4, 0x1F469, 0x200D, 0x1F527, + 4, 0x1F469, 0x200D, 0x1F52C, + 4, 0x1F469, 0x200D, 0x1F680, + 4, 0x1F469, 0x200D, 0x1F692, + 4, 0x1F469, 0x200D, 0x1F9AF, + 4, 0x1F469, 0x200D, 0x1F9BC, + 4, 0x1F469, 0x200D, 0x1F9BD, + 6, 0x1F469, 0x1F3FB, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F469, 0x1F3FB, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F469, 0x1F3FB, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F33E, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F373, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F37C, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F393, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3A4, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3A8, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3EB, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F3ED, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F4BB, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F4BC, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F527, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F52C, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F680, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F692, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9AF, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9BC, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9BD, + 6, 0x1F469, 0x1F3FC, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F469, 0x1F3FC, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F469, 0x1F3FC, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F33E, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F373, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F37C, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F393, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3A4, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3A8, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3EB, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F3ED, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F4BB, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F4BC, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F527, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F52C, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F680, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F692, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9AF, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9BC, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9BD, + 6, 0x1F469, 0x1F3FD, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F469, 0x1F3FD, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F469, 0x1F3FD, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F33E, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F373, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F37C, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F393, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3A4, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3A8, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3EB, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F3ED, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F4BB, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F4BC, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F527, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F52C, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F680, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F692, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9AF, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9BC, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9BD, + 6, 0x1F469, 0x1F3FE, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F469, 0x1F3FE, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F469, 0x1F3FE, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F33E, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F373, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F37C, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F393, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3A4, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3A8, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3EB, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F3ED, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F4BB, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F4BC, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F527, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F52C, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F680, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F692, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9AF, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9BC, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9BD, + 6, 0x1F469, 0x1F3FF, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F469, 0x1F3FF, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F469, 0x1F3FF, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F33E, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F373, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F37C, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F393, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3A4, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3A8, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3EB, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F3ED, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F4BB, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F4BC, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F527, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F52C, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F680, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F692, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9AF, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9BC, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9BD, + 5, 0x1F9D1, 0x200D, 0x2695, 0xFE0F, + 5, 0x1F9D1, 0x200D, 0x2696, 0xFE0F, + 5, 0x1F9D1, 0x200D, 0x2708, 0xFE0F, + 4, 0x1F9D1, 0x200D, 0x1F33E, + 4, 0x1F9D1, 0x200D, 0x1F373, + 4, 0x1F9D1, 0x200D, 0x1F37C, + 4, 0x1F9D1, 0x200D, 0x1F393, + 4, 0x1F9D1, 0x200D, 0x1F3A4, + 4, 0x1F9D1, 0x200D, 0x1F3A8, + 4, 0x1F9D1, 0x200D, 0x1F3EB, + 4, 0x1F9D1, 0x200D, 0x1F3ED, + 4, 0x1F9D1, 0x200D, 0x1F4BB, + 4, 0x1F9D1, 0x200D, 0x1F4BC, + 4, 0x1F9D1, 0x200D, 0x1F527, + 4, 0x1F9D1, 0x200D, 0x1F52C, + 4, 0x1F9D1, 0x200D, 0x1F680, + 4, 0x1F9D1, 0x200D, 0x1F692, + 4, 0x1F9D1, 0x200D, 0x1F9AF, + 4, 0x1F9D1, 0x200D, 0x1F9BC, + 4, 0x1F9D1, 0x200D, 0x1F9BD, + 6, 0x1F9D1, 0x1F3FB, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F9D1, 0x1F3FB, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F9D1, 0x1F3FB, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F33E, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F373, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F37C, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F393, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3A4, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3A8, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3EB, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F3ED, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F4BB, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F4BC, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F527, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F52C, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F680, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F692, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9AF, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9BC, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9BD, + 6, 0x1F9D1, 0x1F3FC, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F9D1, 0x1F3FC, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F9D1, 0x1F3FC, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F33E, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F373, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F37C, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F393, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3A4, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3A8, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3EB, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F3ED, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F4BB, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F4BC, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F527, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F52C, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F680, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F692, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9AF, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9BC, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9BD, + 6, 0x1F9D1, 0x1F3FD, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F9D1, 0x1F3FD, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F9D1, 0x1F3FD, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F33E, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F373, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F37C, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F393, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3A4, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3A8, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3EB, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F3ED, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F4BB, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F4BC, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F527, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F52C, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F680, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F692, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9AF, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9BC, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9BD, + 6, 0x1F9D1, 0x1F3FE, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F9D1, 0x1F3FE, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F9D1, 0x1F3FE, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F33E, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F373, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F37C, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F393, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3A4, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3A8, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3EB, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F3ED, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F4BB, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F4BC, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F527, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F52C, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F680, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F692, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9AF, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9BC, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9BD, + 6, 0x1F9D1, 0x1F3FF, 0x200D, 0x2695, 0xFE0F, + 6, 0x1F9D1, 0x1F3FF, 0x200D, 0x2696, 0xFE0F, + 6, 0x1F9D1, 0x1F3FF, 0x200D, 0x2708, 0xFE0F, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F33E, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F373, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F37C, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F393, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3A4, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3A8, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3EB, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F3ED, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F4BB, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F4BC, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F527, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F52C, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F680, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F692, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9AF, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9BC, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9BD, + 6, 0x26F9, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x26F9, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x26F9, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x26F9, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x26F9, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x26F9, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x26F9, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x26F9, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x26F9, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x26F9, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 6, 0x26F9, 0xFE0F, 0x200D, 0x2640, 0xFE0F, + 6, 0x26F9, 0xFE0F, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F3C3, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F3C3, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C3, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C3, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C3, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C3, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C3, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C3, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C3, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C3, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C3, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C3, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F3C4, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F3C4, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C4, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C4, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C4, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C4, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C4, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C4, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C4, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C4, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3C4, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3C4, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F3CA, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F3CA, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CA, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CA, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CA, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CA, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CA, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CA, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CA, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CA, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CA, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CA, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CB, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CB, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CB, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CB, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CB, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CB, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CB, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CB, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CB, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CB, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CB, 0xFE0F, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CB, 0xFE0F, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CC, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CC, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CC, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CC, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CC, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CC, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CC, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CC, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CC, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CC, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F3CC, 0xFE0F, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F3CC, 0xFE0F, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F46E, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F46E, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F46E, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F46E, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F46E, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F46E, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F46E, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F46E, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F46E, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F46E, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F46E, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F46E, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F46F, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F46F, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F470, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F470, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F470, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F470, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F470, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F470, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F470, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F470, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F470, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F470, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F470, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F470, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F471, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F471, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F471, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F471, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F471, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F471, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F471, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F471, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F471, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F471, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F471, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F471, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F473, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F473, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F473, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F473, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F473, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F473, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F473, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F473, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F473, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F473, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F473, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F473, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F477, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F477, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F477, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F477, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F477, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F477, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F477, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F477, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F477, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F477, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F477, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F477, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F481, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F481, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F481, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F481, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F481, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F481, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F481, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F481, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F481, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F481, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F481, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F481, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F482, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F482, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F482, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F482, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F482, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F482, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F482, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F482, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F482, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F482, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F482, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F482, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F486, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F486, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F486, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F486, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F486, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F486, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F486, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F486, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F486, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F486, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F486, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F486, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F487, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F487, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F487, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F487, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F487, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F487, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F487, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F487, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F487, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F487, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F487, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F487, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F575, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F575, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F575, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F575, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F575, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F575, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F575, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F575, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F575, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F575, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F575, 0xFE0F, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F575, 0xFE0F, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F645, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F645, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F645, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F645, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F645, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F645, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F645, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F645, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F645, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F645, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F645, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F645, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F646, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F646, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F646, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F646, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F646, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F646, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F646, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F646, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F646, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F646, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F646, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F646, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F647, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F647, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F647, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F647, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F647, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F647, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F647, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F647, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F647, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F647, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F647, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F647, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F64B, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F64B, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64B, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64B, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64B, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64B, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64B, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64B, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64B, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64B, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64B, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64B, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F64D, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F64D, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64D, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64D, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64D, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64D, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64D, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64D, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64D, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64D, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64D, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64D, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F64E, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F64E, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64E, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64E, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64E, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64E, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64E, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64E, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64E, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64E, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F64E, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F64E, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F6A3, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F6A3, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6A3, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6A3, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6A3, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6A3, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6A3, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6A3, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6A3, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6A3, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6A3, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6A3, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F6B4, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F6B4, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B4, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B4, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B4, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B4, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B4, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B4, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B4, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B4, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B4, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B4, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F6B5, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F6B5, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B5, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B5, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B5, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B5, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B5, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B5, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B5, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B5, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B5, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B5, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F6B6, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F6B6, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B6, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B6, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B6, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B6, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B6, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B6, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B6, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B6, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F6B6, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F6B6, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F926, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F926, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F926, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F926, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F926, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F926, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F926, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F926, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F926, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F926, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F926, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F926, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F935, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F935, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F935, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F935, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F935, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F935, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F935, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F935, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F935, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F935, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F935, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F935, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F937, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F937, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F937, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F937, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F937, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F937, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F937, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F937, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F937, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F937, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F937, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F937, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F938, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F938, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F938, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F938, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F938, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F938, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F938, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F938, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F938, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F938, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F938, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F938, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F939, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F939, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F939, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F939, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F939, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F939, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F939, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F939, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F939, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F939, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F939, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F939, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F93C, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F93C, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F93D, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F93D, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93D, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93D, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93D, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93D, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93D, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93D, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93D, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93D, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93D, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93D, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F93E, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F93E, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93E, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93E, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93E, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93E, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93E, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93E, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93E, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93E, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F93E, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F93E, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9B8, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9B8, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B8, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B8, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B8, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B8, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B8, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B8, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B8, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B8, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B8, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B8, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9B9, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9B9, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B9, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B9, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B9, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B9, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B9, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B9, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B9, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B9, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9B9, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9B9, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9CD, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9CD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CD, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CD, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CD, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CD, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CD, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CD, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CD, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CD, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CD, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CD, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9CE, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9CE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CE, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CE, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CE, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CE, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CE, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CE, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CE, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CE, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CE, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CE, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9CF, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9CF, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CF, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CF, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CF, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CF, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CF, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CF, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CF, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CF, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9CF, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9CF, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9D4, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9D4, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D4, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D4, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D4, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D4, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D4, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D4, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D4, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D4, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D4, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D4, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9D6, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9D6, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D6, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D6, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D6, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D6, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D6, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D6, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D6, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D6, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D6, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D6, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9D7, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9D7, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D7, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D7, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D7, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D7, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D7, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D7, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D7, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D7, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D7, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D7, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9D8, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9D8, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D8, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D8, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D8, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D8, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D8, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D8, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D8, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D8, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D8, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D8, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9D9, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9D9, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D9, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D9, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D9, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D9, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D9, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D9, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D9, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D9, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9D9, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9D9, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9DA, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9DA, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DA, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DA, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DA, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DA, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DA, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DA, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DA, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DA, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DA, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DA, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9DB, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9DB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DB, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DB, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DB, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DB, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DB, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DB, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DB, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DB, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DB, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DB, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9DC, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9DC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DC, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DC, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DC, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DC, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DC, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DC, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DC, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DC, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DC, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DC, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9DD, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9DD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DD, 0x1F3FB, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DD, 0x1F3FB, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DD, 0x1F3FC, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DD, 0x1F3FC, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DD, 0x1F3FD, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DD, 0x1F3FD, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DD, 0x1F3FE, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DD, 0x1F3FE, 0x200D, 0x2642, 0xFE0F, + 6, 0x1F9DD, 0x1F3FF, 0x200D, 0x2640, 0xFE0F, + 6, 0x1F9DD, 0x1F3FF, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9DE, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9DE, 0x200D, 0x2642, 0xFE0F, + 5, 0x1F9DF, 0x200D, 0x2640, 0xFE0F, + 5, 0x1F9DF, 0x200D, 0x2642, 0xFE0F, + 4, 0x1F468, 0x200D, 0x1F9B0, + 4, 0x1F468, 0x200D, 0x1F9B1, + 4, 0x1F468, 0x200D, 0x1F9B2, + 4, 0x1F468, 0x200D, 0x1F9B3, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B0, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B1, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B2, + 5, 0x1F468, 0x1F3FB, 0x200D, 0x1F9B3, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B0, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B1, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B2, + 5, 0x1F468, 0x1F3FC, 0x200D, 0x1F9B3, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B0, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B1, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B2, + 5, 0x1F468, 0x1F3FD, 0x200D, 0x1F9B3, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B0, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B1, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B2, + 5, 0x1F468, 0x1F3FE, 0x200D, 0x1F9B3, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B0, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B1, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B2, + 5, 0x1F468, 0x1F3FF, 0x200D, 0x1F9B3, + 4, 0x1F469, 0x200D, 0x1F9B0, + 4, 0x1F469, 0x200D, 0x1F9B1, + 4, 0x1F469, 0x200D, 0x1F9B2, + 4, 0x1F469, 0x200D, 0x1F9B3, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B0, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B1, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B2, + 5, 0x1F469, 0x1F3FB, 0x200D, 0x1F9B3, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B0, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B1, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B2, + 5, 0x1F469, 0x1F3FC, 0x200D, 0x1F9B3, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B0, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B1, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B2, + 5, 0x1F469, 0x1F3FD, 0x200D, 0x1F9B3, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B0, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B1, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B2, + 5, 0x1F469, 0x1F3FE, 0x200D, 0x1F9B3, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B0, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B1, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B2, + 5, 0x1F469, 0x1F3FF, 0x200D, 0x1F9B3, + 4, 0x1F9D1, 0x200D, 0x1F9B0, + 4, 0x1F9D1, 0x200D, 0x1F9B1, + 4, 0x1F9D1, 0x200D, 0x1F9B2, + 4, 0x1F9D1, 0x200D, 0x1F9B3, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B0, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B1, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B2, + 5, 0x1F9D1, 0x1F3FB, 0x200D, 0x1F9B3, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B0, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B1, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B2, + 5, 0x1F9D1, 0x1F3FC, 0x200D, 0x1F9B3, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B0, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B1, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B2, + 5, 0x1F9D1, 0x1F3FD, 0x200D, 0x1F9B3, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B0, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B1, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B2, + 5, 0x1F9D1, 0x1F3FE, 0x200D, 0x1F9B3, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B0, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B1, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B2, + 5, 0x1F9D1, 0x1F3FF, 0x200D, 0x1F9B3, + 5, 0x2764, 0xFE0F, 0x200D, 0x1F525, + 5, 0x2764, 0xFE0F, 0x200D, 0x1FA79, + 6, 0x1F3F3, 0xFE0F, 0x200D, 0x26A7, 0xFE0F, + 5, 0x1F3F3, 0xFE0F, 0x200D, 0x1F308, + 5, 0x1F3F4, 0x200D, 0x2620, 0xFE0F, + 4, 0x1F408, 0x200D, 0x2B1B, + 4, 0x1F415, 0x200D, 0x1F9BA, + 5, 0x1F43B, 0x200D, 0x2744, 0xFE0F, + 6, 0x1F441, 0xFE0F, 0x200D, 0x1F5E8, 0xFE0F, + 4, 0x1F62E, 0x200D, 0x1F4A8, + 4, 0x1F635, 0x200D, 0x1F4AB, + 5, 0x1F636, 0x200D, 0x1F32B, 0xFE0F, + 4, 0x1F9D1, 0x200D, 0x1F384, + 0 // Padding. +#endif // !defined(SRELL_NO_UNICODE_POS) +}; + +template +const T5 unicode_property_data::rangenumbertable[] = +{ + { uptype_unknown, 0, "*" }, // #0 + { uptype_general_category, 1, "Other:C" }, // #1 + { uptype_general_category, 2, "Control:Cc:cntrl" }, // #2 + { uptype_general_category, 3, "Format:Cf" }, // #3 + { uptype_general_category, 4, "Unassigned:Cn" }, // #4 + { uptype_general_category, 5, "Private_Use:Co" }, // #5 + { uptype_general_category, 6, "Surrogate:Cs" }, // #6 + { uptype_general_category, 7, "Letter:L" }, // #7 + { uptype_general_category, 8, "Cased_Letter:LC" }, // #8 + { uptype_general_category, 9, "Lowercase_Letter:Ll" }, // #9 + { uptype_general_category, 10, "Titlecase_Letter:Lt" }, // #10 + { uptype_general_category, 11, "Uppercase_Letter:Lu" }, // #11 + { uptype_general_category, 12, "Modifier_Letter:Lm" }, // #12 + { uptype_general_category, 13, "Other_Letter:Lo" }, // #13 + { uptype_general_category, 14, "Mark:M:Combining_Mark" }, // #14 + { uptype_general_category, 15, "Spacing_Mark:Mc" }, // #15 + { uptype_general_category, 16, "Enclosing_Mark:Me" }, // #16 + { uptype_general_category, 17, "Nonspacing_Mark:Mn" }, // #17 + { uptype_general_category, 18, "Number:N" }, // #18 + { uptype_general_category, 19, "Decimal_Number:Nd:digit" }, // #19 + { uptype_general_category, 20, "Letter_Number:Nl" }, // #20 + { uptype_general_category, 21, "Other_Number:No" }, // #21 + { uptype_general_category, 22, "Punctuation:P:punct" }, // #22 + { uptype_general_category, 23, "Connector_Punctuation:Pc" }, // #23 + { uptype_general_category, 24, "Dash_Punctuation:Pd" }, // #24 + { uptype_general_category, 25, "Close_Punctuation:Pe" }, // #25 + { uptype_general_category, 26, "Final_Punctuation:Pf" }, // #26 + { uptype_general_category, 27, "Initial_Punctuation:Pi" }, // #27 + { uptype_general_category, 28, "Other_Punctuation:Po" }, // #28 + { uptype_general_category, 29, "Open_Punctuation:Ps" }, // #29 + { uptype_general_category, 30, "Symbol:S" }, // #30 + { uptype_general_category, 31, "Currency_Symbol:Sc" }, // #31 + { uptype_general_category, 32, "Modifier_Symbol:Sk" }, // #32 + { uptype_general_category, 33, "Math_Symbol:Sm" }, // #33 + { uptype_general_category, 34, "Other_Symbol:So" }, // #34 + { uptype_general_category, 35, "Separator:Z" }, // #35 + { uptype_general_category, 36, "Line_Separator:Zl" }, // #36 + { uptype_general_category, 37, "Paragraph_Separator:Zp" }, // #37 + { uptype_general_category, 38, "Space_Separator:Zs" }, // #38 + { uptype_binary, 39, "ASCII" }, // #39 + { uptype_binary, 40, "ASCII_Hex_Digit:AHex" }, // #40 + { uptype_binary, 41, "Alphabetic:Alpha" }, // #41 + { uptype_binary, 42, "Any" }, // #42 + { uptype_binary, 43, "Assigned" }, // #43 + { uptype_binary, 44, "Bidi_Control:Bidi_C" }, // #44 + { uptype_binary, 45, "Bidi_Mirrored:Bidi_M" }, // #45 + { uptype_binary, 46, "Case_Ignorable:CI" }, // #46 + { uptype_binary, 47, "Cased" }, // #47 + { uptype_binary, 48, "Changes_When_Casefolded:CWCF" }, // #48 + { uptype_binary, 49, "Changes_When_Casemapped:CWCM" }, // #49 + { uptype_binary, 50, "Changes_When_Lowercased:CWL" }, // #50 + { uptype_binary, 51, "Changes_When_NFKC_Casefolded:CWKCF" }, // #51 + { uptype_binary, 52, "Changes_When_Titlecased:CWT" }, // #52 + { uptype_binary, 53, "Changes_When_Uppercased:CWU" }, // #53 + { uptype_binary, 54, "Dash" }, // #54 + { uptype_binary, 55, "Default_Ignorable_Code_Point:DI" }, // #55 + { uptype_binary, 56, "Deprecated:Dep" }, // #56 + { uptype_binary, 57, "Diacritic:Dia" }, // #57 + { uptype_binary, 58, "Emoji" }, // #58 + { uptype_binary, 59, "Emoji_Component:EComp" }, // #59 + { uptype_binary, 60, "Emoji_Modifier:EMod" }, // #60 + { uptype_binary, 61, "Emoji_Modifier_Base:EBase" }, // #61 + { uptype_binary, 62, "Emoji_Presentation:EPres" }, // #62 + { uptype_binary, 63, "Extended_Pictographic:ExtPict" }, // #63 + { uptype_binary, 64, "Extender:Ext" }, // #64 + { uptype_binary, 65, "Grapheme_Base:Gr_Base" }, // #65 + { uptype_binary, 66, "Grapheme_Extend:Gr_Ext" }, // #66 + { uptype_binary, 67, "Hex_Digit:Hex" }, // #67 + { uptype_binary, 68, "IDS_Binary_Operator:IDSB" }, // #68 + { uptype_binary, 69, "IDS_Trinary_Operator:IDST" }, // #69 + { uptype_binary, 70, "ID_Continue:IDC" }, // #70 + { uptype_binary, 71, "ID_Start:IDS" }, // #71 + { uptype_binary, 72, "Ideographic:Ideo" }, // #72 + { uptype_binary, 73, "Join_Control:Join_C" }, // #73 + { uptype_binary, 74, "Logical_Order_Exception:LOE" }, // #74 + { uptype_binary, 75, "Lowercase:Lower" }, // #75 + { uptype_binary, 76, "Math" }, // #76 + { uptype_binary, 77, "Noncharacter_Code_Point:NChar" }, // #77 + { uptype_binary, 78, "Pattern_Syntax:Pat_Syn" }, // #78 + { uptype_binary, 79, "Pattern_White_Space:Pat_WS" }, // #79 + { uptype_binary, 80, "Quotation_Mark:QMark" }, // #80 + { uptype_binary, 81, "Radical" }, // #81 + { uptype_binary, 82, "Regional_Indicator:RI" }, // #82 + { uptype_binary, 83, "Sentence_Terminal:STerm" }, // #83 + { uptype_binary, 84, "Soft_Dotted:SD" }, // #84 + { uptype_binary, 85, "Terminal_Punctuation:Term" }, // #85 + { uptype_binary, 86, "Unified_Ideograph:UIdeo" }, // #86 + { uptype_binary, 87, "Uppercase:Upper" }, // #87 + { uptype_binary, 88, "Variation_Selector:VS" }, // #88 + { uptype_binary, 89, "White_Space:space" }, // #89 + { uptype_binary, 90, "XID_Continue:XIDC" }, // #90 + { uptype_binary, 91, "XID_Start:XIDS" }, // #91 + { uptype_script, 92, "Adlam:Adlm" }, // #92 + { uptype_script, 93, "Ahom:Ahom" }, // #93 + { uptype_script, 94, "Anatolian_Hieroglyphs:Hluw" }, // #94 + { uptype_script, 95, "Arabic:Arab" }, // #95 + { uptype_script, 96, "Armenian:Armn" }, // #96 + { uptype_script, 97, "Avestan:Avst" }, // #97 + { uptype_script, 98, "Balinese:Bali" }, // #98 + { uptype_script, 99, "Bamum:Bamu" }, // #99 + { uptype_script, 100, "Bassa_Vah:Bass" }, // #100 + { uptype_script, 101, "Batak:Batk" }, // #101 + { uptype_script, 102, "Bengali:Beng" }, // #102 + { uptype_script, 103, "Bhaiksuki:Bhks" }, // #103 + { uptype_script, 104, "Bopomofo:Bopo" }, // #104 + { uptype_script, 105, "Brahmi:Brah" }, // #105 + { uptype_script, 106, "Braille:Brai" }, // #106 + { uptype_script, 107, "Buginese:Bugi" }, // #107 + { uptype_script, 108, "Buhid:Buhd" }, // #108 + { uptype_script, 109, "Canadian_Aboriginal:Cans" }, // #109 + { uptype_script, 110, "Carian:Cari" }, // #110 + { uptype_script, 111, "Caucasian_Albanian:Aghb" }, // #111 + { uptype_script, 112, "Chakma:Cakm" }, // #112 + { uptype_script, 113, "Cham:Cham" }, // #113 + { uptype_script, 114, "Cherokee:Cher" }, // #114 + { uptype_script, 115, "Chorasmian:Chrs" }, // #115 + { uptype_script, 116, "Common:Zyyy" }, // #116 + { uptype_script, 117, "Coptic:Copt:Qaac" }, // #117 + { uptype_script, 118, "Cypro_Minoan:Cpmn" }, // #118 + { uptype_script, 119, "Cuneiform:Xsux" }, // #119 + { uptype_script, 120, "Cypriot:Cprt" }, // #120 + { uptype_script, 121, "Cyrillic:Cyrl" }, // #121 + { uptype_script, 122, "Deseret:Dsrt" }, // #122 + { uptype_script, 123, "Devanagari:Deva" }, // #123 + { uptype_script, 124, "Dives_Akuru:Diak" }, // #124 + { uptype_script, 125, "Dogra:Dogr" }, // #125 + { uptype_script, 126, "Duployan:Dupl" }, // #126 + { uptype_script, 127, "Egyptian_Hieroglyphs:Egyp" }, // #127 + { uptype_script, 128, "Elbasan:Elba" }, // #128 + { uptype_script, 129, "Elymaic:Elym" }, // #129 + { uptype_script, 130, "Ethiopic:Ethi" }, // #130 + { uptype_script, 131, "Georgian:Geor" }, // #131 + { uptype_script, 132, "Glagolitic:Glag" }, // #132 + { uptype_script, 133, "Gothic:Goth" }, // #133 + { uptype_script, 134, "Grantha:Gran" }, // #134 + { uptype_script, 135, "Greek:Grek" }, // #135 + { uptype_script, 136, "Gujarati:Gujr" }, // #136 + { uptype_script, 137, "Gunjala_Gondi:Gong" }, // #137 + { uptype_script, 138, "Gurmukhi:Guru" }, // #138 + { uptype_script, 139, "Han:Hani" }, // #139 + { uptype_script, 140, "Hangul:Hang" }, // #140 + { uptype_script, 141, "Hanifi_Rohingya:Rohg" }, // #141 + { uptype_script, 142, "Hanunoo:Hano" }, // #142 + { uptype_script, 143, "Hatran:Hatr" }, // #143 + { uptype_script, 144, "Hebrew:Hebr" }, // #144 + { uptype_script, 145, "Hiragana:Hira" }, // #145 + { uptype_script, 146, "Imperial_Aramaic:Armi" }, // #146 + { uptype_script, 147, "Inherited:Zinh:Qaai" }, // #147 + { uptype_script, 148, "Inscriptional_Pahlavi:Phli" }, // #148 + { uptype_script, 149, "Inscriptional_Parthian:Prti" }, // #149 + { uptype_script, 150, "Javanese:Java" }, // #150 + { uptype_script, 151, "Kaithi:Kthi" }, // #151 + { uptype_script, 152, "Kannada:Knda" }, // #152 + { uptype_script, 153, "Katakana:Kana" }, // #153 + { uptype_script, 154, "Kayah_Li:Kali" }, // #154 + { uptype_script, 155, "Kharoshthi:Khar" }, // #155 + { uptype_script, 156, "Khitan_Small_Script:Kits" }, // #156 + { uptype_script, 157, "Khmer:Khmr" }, // #157 + { uptype_script, 158, "Khojki:Khoj" }, // #158 + { uptype_script, 159, "Khudawadi:Sind" }, // #159 + { uptype_script, 160, "Lao:Laoo" }, // #160 + { uptype_script, 161, "Latin:Latn" }, // #161 + { uptype_script, 162, "Lepcha:Lepc" }, // #162 + { uptype_script, 163, "Limbu:Limb" }, // #163 + { uptype_script, 164, "Linear_A:Lina" }, // #164 + { uptype_script, 165, "Linear_B:Linb" }, // #165 + { uptype_script, 166, "Lisu:Lisu" }, // #166 + { uptype_script, 167, "Lycian:Lyci" }, // #167 + { uptype_script, 168, "Lydian:Lydi" }, // #168 + { uptype_script, 169, "Mahajani:Mahj" }, // #169 + { uptype_script, 170, "Makasar:Maka" }, // #170 + { uptype_script, 171, "Malayalam:Mlym" }, // #171 + { uptype_script, 172, "Mandaic:Mand" }, // #172 + { uptype_script, 173, "Manichaean:Mani" }, // #173 + { uptype_script, 174, "Marchen:Marc" }, // #174 + { uptype_script, 175, "Masaram_Gondi:Gonm" }, // #175 + { uptype_script, 176, "Medefaidrin:Medf" }, // #176 + { uptype_script, 177, "Meetei_Mayek:Mtei" }, // #177 + { uptype_script, 178, "Mende_Kikakui:Mend" }, // #178 + { uptype_script, 179, "Meroitic_Cursive:Merc" }, // #179 + { uptype_script, 180, "Meroitic_Hieroglyphs:Mero" }, // #180 + { uptype_script, 181, "Miao:Plrd" }, // #181 + { uptype_script, 182, "Modi:Modi" }, // #182 + { uptype_script, 183, "Mongolian:Mong" }, // #183 + { uptype_script, 184, "Mro:Mroo" }, // #184 + { uptype_script, 185, "Multani:Mult" }, // #185 + { uptype_script, 186, "Myanmar:Mymr" }, // #186 + { uptype_script, 187, "Nabataean:Nbat" }, // #187 + { uptype_script, 188, "Nandinagari:Nand" }, // #188 + { uptype_script, 189, "New_Tai_Lue:Talu" }, // #189 + { uptype_script, 190, "Newa:Newa" }, // #190 + { uptype_script, 191, "Nko:Nkoo" }, // #191 + { uptype_script, 192, "Nushu:Nshu" }, // #192 + { uptype_script, 193, "Nyiakeng_Puachue_Hmong:Hmnp" }, // #193 + { uptype_script, 194, "Ogham:Ogam" }, // #194 + { uptype_script, 195, "Ol_Chiki:Olck" }, // #195 + { uptype_script, 196, "Old_Hungarian:Hung" }, // #196 + { uptype_script, 197, "Old_Italic:Ital" }, // #197 + { uptype_script, 198, "Old_North_Arabian:Narb" }, // #198 + { uptype_script, 199, "Old_Permic:Perm" }, // #199 + { uptype_script, 200, "Old_Persian:Xpeo" }, // #200 + { uptype_script, 201, "Old_Sogdian:Sogo" }, // #201 + { uptype_script, 202, "Old_South_Arabian:Sarb" }, // #202 + { uptype_script, 203, "Old_Turkic:Orkh" }, // #203 + { uptype_script, 204, "Old_Uyghur:Ougr" }, // #204 + { uptype_script, 205, "Oriya:Orya" }, // #205 + { uptype_script, 206, "Osage:Osge" }, // #206 + { uptype_script, 207, "Osmanya:Osma" }, // #207 + { uptype_script, 208, "Pahawh_Hmong:Hmng" }, // #208 + { uptype_script, 209, "Palmyrene:Palm" }, // #209 + { uptype_script, 210, "Pau_Cin_Hau:Pauc" }, // #210 + { uptype_script, 211, "Phags_Pa:Phag" }, // #211 + { uptype_script, 212, "Phoenician:Phnx" }, // #212 + { uptype_script, 213, "Psalter_Pahlavi:Phlp" }, // #213 + { uptype_script, 214, "Rejang:Rjng" }, // #214 + { uptype_script, 215, "Runic:Runr" }, // #215 + { uptype_script, 216, "Samaritan:Samr" }, // #216 + { uptype_script, 217, "Saurashtra:Saur" }, // #217 + { uptype_script, 218, "Sharada:Shrd" }, // #218 + { uptype_script, 219, "Shavian:Shaw" }, // #219 + { uptype_script, 220, "Siddham:Sidd" }, // #220 + { uptype_script, 221, "SignWriting:Sgnw" }, // #221 + { uptype_script, 222, "Sinhala:Sinh" }, // #222 + { uptype_script, 223, "Sogdian:Sogd" }, // #223 + { uptype_script, 224, "Sora_Sompeng:Sora" }, // #224 + { uptype_script, 225, "Soyombo:Soyo" }, // #225 + { uptype_script, 226, "Sundanese:Sund" }, // #226 + { uptype_script, 227, "Syloti_Nagri:Sylo" }, // #227 + { uptype_script, 228, "Syriac:Syrc" }, // #228 + { uptype_script, 229, "Tagalog:Tglg" }, // #229 + { uptype_script, 230, "Tagbanwa:Tagb" }, // #230 + { uptype_script, 231, "Tai_Le:Tale" }, // #231 + { uptype_script, 232, "Tai_Tham:Lana" }, // #232 + { uptype_script, 233, "Tai_Viet:Tavt" }, // #233 + { uptype_script, 234, "Takri:Takr" }, // #234 + { uptype_script, 235, "Tamil:Taml" }, // #235 + { uptype_script, 236, "Tangsa:Tnsa" }, // #236 + { uptype_script, 237, "Tangut:Tang" }, // #237 + { uptype_script, 238, "Telugu:Telu" }, // #238 + { uptype_script, 239, "Thaana:Thaa" }, // #239 + { uptype_script, 240, "Thai:Thai" }, // #240 + { uptype_script, 241, "Tibetan:Tibt" }, // #241 + { uptype_script, 242, "Tifinagh:Tfng" }, // #242 + { uptype_script, 243, "Tirhuta:Tirh" }, // #243 + { uptype_script, 244, "Toto" }, // #244 + { uptype_script, 245, "Ugaritic:Ugar" }, // #245 + { uptype_script, 246, "Vai:Vaii" }, // #246 + { uptype_script, 247, "Vithkuqi:Vith" }, // #247 + { uptype_script, 248, "Wancho:Wcho" }, // #248 + { uptype_script, 249, "Warang_Citi:Wara" }, // #249 + { uptype_script, 250, "Yezidi:Yezi" }, // #250 + { uptype_script, 251, "Yi:Yiii" }, // #251 + { uptype_script, 252, "Zanabazar_Square:Zanb" }, // #252 + { uptype_script_extensions, 253, "Adlam:Adlm" }, // #253 + { uptype_script_extensions, 93, "Ahom:Ahom" }, // #254 + { uptype_script_extensions, 94, "Anatolian_Hieroglyphs:Hluw" }, // #255 + { uptype_script_extensions, 254, "Arabic:Arab" }, // #256 + { uptype_script_extensions, 96, "Armenian:Armn" }, // #257 + { uptype_script_extensions, 97, "Avestan:Avst" }, // #258 + { uptype_script_extensions, 98, "Balinese:Bali" }, // #259 + { uptype_script_extensions, 99, "Bamum:Bamu" }, // #260 + { uptype_script_extensions, 100, "Bassa_Vah:Bass" }, // #261 + { uptype_script_extensions, 101, "Batak:Batk" }, // #262 + { uptype_script_extensions, 255, "Bengali:Beng" }, // #263 + { uptype_script_extensions, 103, "Bhaiksuki:Bhks" }, // #264 + { uptype_script_extensions, 256, "Bopomofo:Bopo" }, // #265 + { uptype_script_extensions, 105, "Brahmi:Brah" }, // #266 + { uptype_script_extensions, 106, "Braille:Brai" }, // #267 + { uptype_script_extensions, 257, "Buginese:Bugi" }, // #268 + { uptype_script_extensions, 258, "Buhid:Buhd" }, // #269 + { uptype_script_extensions, 109, "Canadian_Aboriginal:Cans" }, // #270 + { uptype_script_extensions, 110, "Carian:Cari" }, // #271 + { uptype_script_extensions, 111, "Caucasian_Albanian:Aghb" }, // #272 + { uptype_script_extensions, 259, "Chakma:Cakm" }, // #273 + { uptype_script_extensions, 113, "Cham:Cham" }, // #274 + { uptype_script_extensions, 114, "Cherokee:Cher" }, // #275 + { uptype_script_extensions, 115, "Chorasmian:Chrs" }, // #276 + { uptype_script_extensions, 260, "Common:Zyyy" }, // #277 + { uptype_script_extensions, 261, "Coptic:Copt:Qaac" }, // #278 + { uptype_script_extensions, 262, "Cypro_Minoan:Cpmn" }, // #279 + { uptype_script_extensions, 119, "Cuneiform:Xsux" }, // #280 + { uptype_script_extensions, 263, "Cypriot:Cprt" }, // #281 + { uptype_script_extensions, 264, "Cyrillic:Cyrl" }, // #282 + { uptype_script_extensions, 122, "Deseret:Dsrt" }, // #283 + { uptype_script_extensions, 265, "Devanagari:Deva" }, // #284 + { uptype_script_extensions, 124, "Dives_Akuru:Diak" }, // #285 + { uptype_script_extensions, 266, "Dogra:Dogr" }, // #286 + { uptype_script_extensions, 267, "Duployan:Dupl" }, // #287 + { uptype_script_extensions, 127, "Egyptian_Hieroglyphs:Egyp" }, // #288 + { uptype_script_extensions, 128, "Elbasan:Elba" }, // #289 + { uptype_script_extensions, 129, "Elymaic:Elym" }, // #290 + { uptype_script_extensions, 130, "Ethiopic:Ethi" }, // #291 + { uptype_script_extensions, 268, "Georgian:Geor" }, // #292 + { uptype_script_extensions, 269, "Glagolitic:Glag" }, // #293 + { uptype_script_extensions, 133, "Gothic:Goth" }, // #294 + { uptype_script_extensions, 270, "Grantha:Gran" }, // #295 + { uptype_script_extensions, 271, "Greek:Grek" }, // #296 + { uptype_script_extensions, 272, "Gujarati:Gujr" }, // #297 + { uptype_script_extensions, 273, "Gunjala_Gondi:Gong" }, // #298 + { uptype_script_extensions, 274, "Gurmukhi:Guru" }, // #299 + { uptype_script_extensions, 275, "Han:Hani" }, // #300 + { uptype_script_extensions, 276, "Hangul:Hang" }, // #301 + { uptype_script_extensions, 277, "Hanifi_Rohingya:Rohg" }, // #302 + { uptype_script_extensions, 278, "Hanunoo:Hano" }, // #303 + { uptype_script_extensions, 143, "Hatran:Hatr" }, // #304 + { uptype_script_extensions, 144, "Hebrew:Hebr" }, // #305 + { uptype_script_extensions, 279, "Hiragana:Hira" }, // #306 + { uptype_script_extensions, 146, "Imperial_Aramaic:Armi" }, // #307 + { uptype_script_extensions, 280, "Inherited:Zinh:Qaai" }, // #308 + { uptype_script_extensions, 148, "Inscriptional_Pahlavi:Phli" }, // #309 + { uptype_script_extensions, 149, "Inscriptional_Parthian:Prti" }, // #310 + { uptype_script_extensions, 281, "Javanese:Java" }, // #311 + { uptype_script_extensions, 282, "Kaithi:Kthi" }, // #312 + { uptype_script_extensions, 283, "Kannada:Knda" }, // #313 + { uptype_script_extensions, 284, "Katakana:Kana" }, // #314 + { uptype_script_extensions, 285, "Kayah_Li:Kali" }, // #315 + { uptype_script_extensions, 155, "Kharoshthi:Khar" }, // #316 + { uptype_script_extensions, 156, "Khitan_Small_Script:Kits" }, // #317 + { uptype_script_extensions, 157, "Khmer:Khmr" }, // #318 + { uptype_script_extensions, 286, "Khojki:Khoj" }, // #319 + { uptype_script_extensions, 287, "Khudawadi:Sind" }, // #320 + { uptype_script_extensions, 160, "Lao:Laoo" }, // #321 + { uptype_script_extensions, 288, "Latin:Latn" }, // #322 + { uptype_script_extensions, 162, "Lepcha:Lepc" }, // #323 + { uptype_script_extensions, 289, "Limbu:Limb" }, // #324 + { uptype_script_extensions, 290, "Linear_A:Lina" }, // #325 + { uptype_script_extensions, 291, "Linear_B:Linb" }, // #326 + { uptype_script_extensions, 166, "Lisu:Lisu" }, // #327 + { uptype_script_extensions, 167, "Lycian:Lyci" }, // #328 + { uptype_script_extensions, 168, "Lydian:Lydi" }, // #329 + { uptype_script_extensions, 292, "Mahajani:Mahj" }, // #330 + { uptype_script_extensions, 170, "Makasar:Maka" }, // #331 + { uptype_script_extensions, 293, "Malayalam:Mlym" }, // #332 + { uptype_script_extensions, 294, "Mandaic:Mand" }, // #333 + { uptype_script_extensions, 295, "Manichaean:Mani" }, // #334 + { uptype_script_extensions, 174, "Marchen:Marc" }, // #335 + { uptype_script_extensions, 296, "Masaram_Gondi:Gonm" }, // #336 + { uptype_script_extensions, 176, "Medefaidrin:Medf" }, // #337 + { uptype_script_extensions, 177, "Meetei_Mayek:Mtei" }, // #338 + { uptype_script_extensions, 178, "Mende_Kikakui:Mend" }, // #339 + { uptype_script_extensions, 179, "Meroitic_Cursive:Merc" }, // #340 + { uptype_script_extensions, 180, "Meroitic_Hieroglyphs:Mero" }, // #341 + { uptype_script_extensions, 181, "Miao:Plrd" }, // #342 + { uptype_script_extensions, 297, "Modi:Modi" }, // #343 + { uptype_script_extensions, 298, "Mongolian:Mong" }, // #344 + { uptype_script_extensions, 184, "Mro:Mroo" }, // #345 + { uptype_script_extensions, 299, "Multani:Mult" }, // #346 + { uptype_script_extensions, 300, "Myanmar:Mymr" }, // #347 + { uptype_script_extensions, 187, "Nabataean:Nbat" }, // #348 + { uptype_script_extensions, 301, "Nandinagari:Nand" }, // #349 + { uptype_script_extensions, 189, "New_Tai_Lue:Talu" }, // #350 + { uptype_script_extensions, 190, "Newa:Newa" }, // #351 + { uptype_script_extensions, 302, "Nko:Nkoo" }, // #352 + { uptype_script_extensions, 192, "Nushu:Nshu" }, // #353 + { uptype_script_extensions, 193, "Nyiakeng_Puachue_Hmong:Hmnp" }, // #354 + { uptype_script_extensions, 194, "Ogham:Ogam" }, // #355 + { uptype_script_extensions, 195, "Ol_Chiki:Olck" }, // #356 + { uptype_script_extensions, 196, "Old_Hungarian:Hung" }, // #357 + { uptype_script_extensions, 197, "Old_Italic:Ital" }, // #358 + { uptype_script_extensions, 198, "Old_North_Arabian:Narb" }, // #359 + { uptype_script_extensions, 303, "Old_Permic:Perm" }, // #360 + { uptype_script_extensions, 200, "Old_Persian:Xpeo" }, // #361 + { uptype_script_extensions, 201, "Old_Sogdian:Sogo" }, // #362 + { uptype_script_extensions, 202, "Old_South_Arabian:Sarb" }, // #363 + { uptype_script_extensions, 203, "Old_Turkic:Orkh" }, // #364 + { uptype_script_extensions, 304, "Old_Uyghur:Ougr" }, // #365 + { uptype_script_extensions, 305, "Oriya:Orya" }, // #366 + { uptype_script_extensions, 206, "Osage:Osge" }, // #367 + { uptype_script_extensions, 207, "Osmanya:Osma" }, // #368 + { uptype_script_extensions, 208, "Pahawh_Hmong:Hmng" }, // #369 + { uptype_script_extensions, 209, "Palmyrene:Palm" }, // #370 + { uptype_script_extensions, 210, "Pau_Cin_Hau:Pauc" }, // #371 + { uptype_script_extensions, 306, "Phags_Pa:Phag" }, // #372 + { uptype_script_extensions, 212, "Phoenician:Phnx" }, // #373 + { uptype_script_extensions, 307, "Psalter_Pahlavi:Phlp" }, // #374 + { uptype_script_extensions, 214, "Rejang:Rjng" }, // #375 + { uptype_script_extensions, 215, "Runic:Runr" }, // #376 + { uptype_script_extensions, 216, "Samaritan:Samr" }, // #377 + { uptype_script_extensions, 217, "Saurashtra:Saur" }, // #378 + { uptype_script_extensions, 308, "Sharada:Shrd" }, // #379 + { uptype_script_extensions, 219, "Shavian:Shaw" }, // #380 + { uptype_script_extensions, 220, "Siddham:Sidd" }, // #381 + { uptype_script_extensions, 221, "SignWriting:Sgnw" }, // #382 + { uptype_script_extensions, 309, "Sinhala:Sinh" }, // #383 + { uptype_script_extensions, 310, "Sogdian:Sogd" }, // #384 + { uptype_script_extensions, 224, "Sora_Sompeng:Sora" }, // #385 + { uptype_script_extensions, 225, "Soyombo:Soyo" }, // #386 + { uptype_script_extensions, 226, "Sundanese:Sund" }, // #387 + { uptype_script_extensions, 311, "Syloti_Nagri:Sylo" }, // #388 + { uptype_script_extensions, 312, "Syriac:Syrc" }, // #389 + { uptype_script_extensions, 313, "Tagalog:Tglg" }, // #390 + { uptype_script_extensions, 314, "Tagbanwa:Tagb" }, // #391 + { uptype_script_extensions, 315, "Tai_Le:Tale" }, // #392 + { uptype_script_extensions, 232, "Tai_Tham:Lana" }, // #393 + { uptype_script_extensions, 233, "Tai_Viet:Tavt" }, // #394 + { uptype_script_extensions, 316, "Takri:Takr" }, // #395 + { uptype_script_extensions, 317, "Tamil:Taml" }, // #396 + { uptype_script_extensions, 236, "Tangsa:Tnsa" }, // #397 + { uptype_script_extensions, 237, "Tangut:Tang" }, // #398 + { uptype_script_extensions, 318, "Telugu:Telu" }, // #399 + { uptype_script_extensions, 319, "Thaana:Thaa" }, // #400 + { uptype_script_extensions, 240, "Thai:Thai" }, // #401 + { uptype_script_extensions, 241, "Tibetan:Tibt" }, // #402 + { uptype_script_extensions, 242, "Tifinagh:Tfng" }, // #403 + { uptype_script_extensions, 320, "Tirhuta:Tirh" }, // #404 + { uptype_script_extensions, 244, "Toto" }, // #405 + { uptype_script_extensions, 245, "Ugaritic:Ugar" }, // #406 + { uptype_script_extensions, 246, "Vai:Vaii" }, // #407 + { uptype_script_extensions, 247, "Vithkuqi:Vith" }, // #408 + { uptype_script_extensions, 248, "Wancho:Wcho" }, // #409 + { uptype_script_extensions, 249, "Warang_Citi:Wara" }, // #410 + { uptype_script_extensions, 321, "Yezidi:Yezi" }, // #411 + { uptype_script_extensions, 322, "Yi:Yiii" }, // #412 + { uptype_script_extensions, 252, "Zanabazar_Square:Zanb" }, // #413 +#if !defined(SRELL_NO_UNICODE_POS) + { uptype_binary, 323, "RGI_Emoji" }, // #414 + { uptype_binary, 324, "Basic_Emoji" }, // #415 + { uptype_binary, 325, "Emoji_Keycap_Sequence" }, // #416 + { uptype_binary, 326, "RGI_Emoji_Modifier_Sequence" }, // #417 + { uptype_binary, 327, "RGI_Emoji_Flag_Sequence" }, // #418 + { uptype_binary, 328, "RGI_Emoji_Tag_Sequence" }, // #419 + { uptype_binary, 329, "RGI_Emoji_ZWJ_Sequence" }, // #420 +#endif // !defined(SRELL_NO_UNICODE_POS) + { uptype_unknown, 0, "" } +}; + +template +const T6 unicode_property_data::positiontable[] = +{ + { 0, 0 }, // #0 unknown + { 0, 725 }, // #1 gc=Other:C + { 0, 2 }, // #2 gc=Control:Cc:cntrl + { 2, 21 }, // #3 gc=Format:Cf + { 23, 698 }, // #4 gc=Unassigned:Cn + { 721, 3 }, // #5 gc=Private_Use:Co + { 724, 1 }, // #6 gc=Surrogate:Cs + { 725, 1883 }, // #7 gc=Letter:L + { 725, 1313 }, // #8 gc=Cased_Letter:LC + { 725, 657 }, // #9 gc=Lowercase_Letter:Ll + { 1382, 10 }, // #10 gc=Titlecase_Letter:Lt + { 1392, 646 }, // #11 gc=Uppercase_Letter:Lu + { 2038, 69 }, // #12 gc=Modifier_Letter:Lm + { 2107, 501 }, // #13 gc=Other_Letter:Lo + { 2608, 518 }, // #14 gc=Mark:M:Combining_Mark + { 2608, 177 }, // #15 gc=Spacing_Mark:Mc + { 2785, 5 }, // #16 gc=Enclosing_Mark:Me + { 2790, 336 }, // #17 gc=Nonspacing_Mark:Mn + { 3126, 145 }, // #18 gc=Number:N + { 3126, 62 }, // #19 gc=Decimal_Number:Nd:digit + { 3188, 12 }, // #20 gc=Letter_Number:Nl + { 3200, 71 }, // #21 gc=Other_Number:No + { 3271, 386 }, // #22 gc=Punctuation:P:punct + { 3271, 6 }, // #23 gc=Connector_Punctuation:Pc + { 3277, 19 }, // #24 gc=Dash_Punctuation:Pd + { 3296, 76 }, // #25 gc=Close_Punctuation:Pe + { 3372, 10 }, // #26 gc=Final_Punctuation:Pf + { 3382, 11 }, // #27 gc=Initial_Punctuation:Pi + { 3393, 185 }, // #28 gc=Other_Punctuation:Po + { 3578, 79 }, // #29 gc=Open_Punctuation:Ps + { 3657, 302 }, // #30 gc=Symbol:S + { 3657, 21 }, // #31 gc=Currency_Symbol:Sc + { 3678, 31 }, // #32 gc=Modifier_Symbol:Sk + { 3709, 64 }, // #33 gc=Math_Symbol:Sm + { 3773, 186 }, // #34 gc=Other_Symbol:So + { 3959, 9 }, // #35 gc=Separator:Z + { 3959, 1 }, // #36 gc=Line_Separator:Zl + { 3960, 1 }, // #37 gc=Paragraph_Separator:Zp + { 3961, 7 }, // #38 gc=Space_Separator:Zs + { 3968, 1 }, // #39 bp=ASCII + { 3969, 3 }, // #40 bp=ASCII_Hex_Digit:AHex + { 3972, 722 }, // #41 bp=Alphabetic:Alpha + { 4694, 1 }, // #42 bp=Any + { 4695, 0 }, // #43 bp=Assigned + { 4695, 4 }, // #44 bp=Bidi_Control:Bidi_C + { 4699, 114 }, // #45 bp=Bidi_Mirrored:Bidi_M + { 4813, 427 }, // #46 bp=Case_Ignorable:CI + { 5240, 155 }, // #47 bp=Cased + { 5395, 622 }, // #48 bp=Changes_When_Casefolded:CWCF + { 6017, 131 }, // #49 bp=Changes_When_Casemapped:CWCM + { 6148, 609 }, // #50 bp=Changes_When_Lowercased:CWL + { 6757, 838 }, // #51 bp=Changes_When_NFKC_Casefolded:CWKCF + { 7595, 626 }, // #52 bp=Changes_When_Titlecased:CWT + { 8221, 627 }, // #53 bp=Changes_When_Uppercased:CWU + { 8848, 23 }, // #54 bp=Dash + { 8871, 17 }, // #55 bp=Default_Ignorable_Code_Point:DI + { 8888, 8 }, // #56 bp=Deprecated:Dep + { 8896, 192 }, // #57 bp=Diacritic:Dia + { 9088, 153 }, // #58 bp=Emoji + { 9241, 10 }, // #59 bp=Emoji_Component:EComp + { 9251, 1 }, // #60 bp=Emoji_Modifier:EMod + { 9252, 40 }, // #61 bp=Emoji_Modifier_Base:EBase + { 9292, 83 }, // #62 bp=Emoji_Presentation:EPres + { 9375, 78 }, // #63 bp=Extended_Pictographic:ExtPict + { 9453, 33 }, // #64 bp=Extender:Ext + { 9486, 861 }, // #65 bp=Grapheme_Base:Gr_Base + { 10347, 353 }, // #66 bp=Grapheme_Extend:Gr_Ext + { 10700, 6 }, // #67 bp=Hex_Digit:Hex + { 10706, 2 }, // #68 bp=IDS_Binary_Operator:IDSB + { 10708, 1 }, // #69 bp=IDS_Trinary_Operator:IDST + { 10709, 756 }, // #70 bp=ID_Continue:IDC + { 11465, 648 }, // #71 bp=ID_Start:IDS + { 12113, 19 }, // #72 bp=Ideographic:Ideo + { 12132, 1 }, // #73 bp=Join_Control:Join_C + { 12133, 7 }, // #74 bp=Logical_Order_Exception:LOE + { 12140, 668 }, // #75 bp=Lowercase:Lower + { 12808, 138 }, // #76 bp=Math + { 12946, 18 }, // #77 bp=Noncharacter_Code_Point:NChar + { 12964, 28 }, // #78 bp=Pattern_Syntax:Pat_Syn + { 12992, 5 }, // #79 bp=Pattern_White_Space:Pat_WS + { 12997, 13 }, // #80 bp=Quotation_Mark:QMark + { 13010, 3 }, // #81 bp=Radical + { 13013, 1 }, // #82 bp=Regional_Indicator:RI + { 13014, 79 }, // #83 bp=Sentence_Terminal:STerm + { 13093, 32 }, // #84 bp=Soft_Dotted:SD + { 13125, 107 }, // #85 bp=Terminal_Punctuation:Term + { 13232, 15 }, // #86 bp=Unified_Ideograph:UIdeo + { 13247, 651 }, // #87 bp=Uppercase:Upper + { 13898, 4 }, // #88 bp=Variation_Selector:VS + { 13902, 10 }, // #89 bp=White_Space:space + { 13912, 763 }, // #90 bp=XID_Continue:XIDC + { 14675, 655 }, // #91 bp=XID_Start:XIDS + { 15330, 3 }, // #92 sc=Adlam:Adlm + { 15333, 3 }, // #93 sc=Ahom:Ahom scx=Ahom:Ahom + { 15336, 1 }, // #94 sc=Anatolian_Hieroglyphs:Hluw scx=Anatolian_Hieroglyphs:Hluw + { 15337, 57 }, // #95 sc=Arabic:Arab + { 15394, 4 }, // #96 sc=Armenian:Armn scx=Armenian:Armn + { 15398, 2 }, // #97 sc=Avestan:Avst scx=Avestan:Avst + { 15400, 2 }, // #98 sc=Balinese:Bali scx=Balinese:Bali + { 15402, 2 }, // #99 sc=Bamum:Bamu scx=Bamum:Bamu + { 15404, 2 }, // #100 sc=Bassa_Vah:Bass scx=Bassa_Vah:Bass + { 15406, 2 }, // #101 sc=Batak:Batk scx=Batak:Batk + { 15408, 14 }, // #102 sc=Bengali:Beng + { 15422, 4 }, // #103 sc=Bhaiksuki:Bhks scx=Bhaiksuki:Bhks + { 15426, 3 }, // #104 sc=Bopomofo:Bopo + { 15429, 3 }, // #105 sc=Brahmi:Brah scx=Brahmi:Brah + { 15432, 1 }, // #106 sc=Braille:Brai scx=Braille:Brai + { 15433, 2 }, // #107 sc=Buginese:Bugi + { 15435, 1 }, // #108 sc=Buhid:Buhd + { 15436, 3 }, // #109 sc=Canadian_Aboriginal:Cans scx=Canadian_Aboriginal:Cans + { 15439, 1 }, // #110 sc=Carian:Cari scx=Carian:Cari + { 15440, 2 }, // #111 sc=Caucasian_Albanian:Aghb scx=Caucasian_Albanian:Aghb + { 15442, 2 }, // #112 sc=Chakma:Cakm + { 15444, 4 }, // #113 sc=Cham:Cham scx=Cham:Cham + { 15448, 3 }, // #114 sc=Cherokee:Cher scx=Cherokee:Cher + { 15451, 1 }, // #115 sc=Chorasmian:Chrs scx=Chorasmian:Chrs + { 15452, 174 }, // #116 sc=Common:Zyyy + { 15626, 3 }, // #117 sc=Coptic:Copt:Qaac + { 15629, 1 }, // #118 sc=Cypro_Minoan:Cpmn + { 15630, 4 }, // #119 sc=Cuneiform:Xsux scx=Cuneiform:Xsux + { 15634, 6 }, // #120 sc=Cypriot:Cprt + { 15640, 8 }, // #121 sc=Cyrillic:Cyrl + { 15648, 1 }, // #122 sc=Deseret:Dsrt scx=Deseret:Dsrt + { 15649, 4 }, // #123 sc=Devanagari:Deva + { 15653, 8 }, // #124 sc=Dives_Akuru:Diak scx=Dives_Akuru:Diak + { 15661, 1 }, // #125 sc=Dogra:Dogr + { 15662, 5 }, // #126 sc=Duployan:Dupl + { 15667, 2 }, // #127 sc=Egyptian_Hieroglyphs:Egyp scx=Egyptian_Hieroglyphs:Egyp + { 15669, 1 }, // #128 sc=Elbasan:Elba scx=Elbasan:Elba + { 15670, 1 }, // #129 sc=Elymaic:Elym scx=Elymaic:Elym + { 15671, 36 }, // #130 sc=Ethiopic:Ethi scx=Ethiopic:Ethi + { 15707, 10 }, // #131 sc=Georgian:Geor + { 15717, 6 }, // #132 sc=Glagolitic:Glag + { 15723, 1 }, // #133 sc=Gothic:Goth scx=Gothic:Goth + { 15724, 15 }, // #134 sc=Grantha:Gran + { 15739, 36 }, // #135 sc=Greek:Grek + { 15775, 14 }, // #136 sc=Gujarati:Gujr + { 15789, 6 }, // #137 sc=Gunjala_Gondi:Gong + { 15795, 16 }, // #138 sc=Gurmukhi:Guru + { 15811, 20 }, // #139 sc=Han:Hani + { 15831, 14 }, // #140 sc=Hangul:Hang + { 15845, 2 }, // #141 sc=Hanifi_Rohingya:Rohg + { 15847, 1 }, // #142 sc=Hanunoo:Hano + { 15848, 3 }, // #143 sc=Hatran:Hatr scx=Hatran:Hatr + { 15851, 9 }, // #144 sc=Hebrew:Hebr scx=Hebrew:Hebr + { 15860, 5 }, // #145 sc=Hiragana:Hira + { 15865, 2 }, // #146 sc=Imperial_Aramaic:Armi scx=Imperial_Aramaic:Armi + { 15867, 29 }, // #147 sc=Inherited:Zinh:Qaai + { 15896, 2 }, // #148 sc=Inscriptional_Pahlavi:Phli scx=Inscriptional_Pahlavi:Phli + { 15898, 2 }, // #149 sc=Inscriptional_Parthian:Prti scx=Inscriptional_Parthian:Prti + { 15900, 3 }, // #150 sc=Javanese:Java + { 15903, 2 }, // #151 sc=Kaithi:Kthi + { 15905, 13 }, // #152 sc=Kannada:Knda + { 15918, 13 }, // #153 sc=Katakana:Kana + { 15931, 2 }, // #154 sc=Kayah_Li:Kali + { 15933, 8 }, // #155 sc=Kharoshthi:Khar scx=Kharoshthi:Khar + { 15941, 2 }, // #156 sc=Khitan_Small_Script:Kits scx=Khitan_Small_Script:Kits + { 15943, 4 }, // #157 sc=Khmer:Khmr scx=Khmer:Khmr + { 15947, 2 }, // #158 sc=Khojki:Khoj + { 15949, 2 }, // #159 sc=Khudawadi:Sind + { 15951, 11 }, // #160 sc=Lao:Laoo scx=Lao:Laoo + { 15962, 38 }, // #161 sc=Latin:Latn + { 16000, 3 }, // #162 sc=Lepcha:Lepc scx=Lepcha:Lepc + { 16003, 5 }, // #163 sc=Limbu:Limb + { 16008, 3 }, // #164 sc=Linear_A:Lina + { 16011, 7 }, // #165 sc=Linear_B:Linb + { 16018, 2 }, // #166 sc=Lisu:Lisu scx=Lisu:Lisu + { 16020, 1 }, // #167 sc=Lycian:Lyci scx=Lycian:Lyci + { 16021, 2 }, // #168 sc=Lydian:Lydi scx=Lydian:Lydi + { 16023, 1 }, // #169 sc=Mahajani:Mahj + { 16024, 1 }, // #170 sc=Makasar:Maka scx=Makasar:Maka + { 16025, 7 }, // #171 sc=Malayalam:Mlym + { 16032, 2 }, // #172 sc=Mandaic:Mand + { 16034, 2 }, // #173 sc=Manichaean:Mani + { 16036, 3 }, // #174 sc=Marchen:Marc scx=Marchen:Marc + { 16039, 7 }, // #175 sc=Masaram_Gondi:Gonm + { 16046, 1 }, // #176 sc=Medefaidrin:Medf scx=Medefaidrin:Medf + { 16047, 3 }, // #177 sc=Meetei_Mayek:Mtei scx=Meetei_Mayek:Mtei + { 16050, 2 }, // #178 sc=Mende_Kikakui:Mend scx=Mende_Kikakui:Mend + { 16052, 3 }, // #179 sc=Meroitic_Cursive:Merc scx=Meroitic_Cursive:Merc + { 16055, 1 }, // #180 sc=Meroitic_Hieroglyphs:Mero scx=Meroitic_Hieroglyphs:Mero + { 16056, 3 }, // #181 sc=Miao:Plrd scx=Miao:Plrd + { 16059, 2 }, // #182 sc=Modi:Modi + { 16061, 6 }, // #183 sc=Mongolian:Mong + { 16067, 3 }, // #184 sc=Mro:Mroo scx=Mro:Mroo + { 16070, 5 }, // #185 sc=Multani:Mult + { 16075, 3 }, // #186 sc=Myanmar:Mymr + { 16078, 2 }, // #187 sc=Nabataean:Nbat scx=Nabataean:Nbat + { 16080, 3 }, // #188 sc=Nandinagari:Nand + { 16083, 4 }, // #189 sc=New_Tai_Lue:Talu scx=New_Tai_Lue:Talu + { 16087, 2 }, // #190 sc=Newa:Newa scx=Newa:Newa + { 16089, 2 }, // #191 sc=Nko:Nkoo + { 16091, 2 }, // #192 sc=Nushu:Nshu scx=Nushu:Nshu + { 16093, 4 }, // #193 sc=Nyiakeng_Puachue_Hmong:Hmnp scx=Nyiakeng_Puachue_Hmong:Hmnp + { 16097, 1 }, // #194 sc=Ogham:Ogam scx=Ogham:Ogam + { 16098, 1 }, // #195 sc=Ol_Chiki:Olck scx=Ol_Chiki:Olck + { 16099, 3 }, // #196 sc=Old_Hungarian:Hung scx=Old_Hungarian:Hung + { 16102, 2 }, // #197 sc=Old_Italic:Ital scx=Old_Italic:Ital + { 16104, 1 }, // #198 sc=Old_North_Arabian:Narb scx=Old_North_Arabian:Narb + { 16105, 1 }, // #199 sc=Old_Permic:Perm + { 16106, 2 }, // #200 sc=Old_Persian:Xpeo scx=Old_Persian:Xpeo + { 16108, 1 }, // #201 sc=Old_Sogdian:Sogo scx=Old_Sogdian:Sogo + { 16109, 1 }, // #202 sc=Old_South_Arabian:Sarb scx=Old_South_Arabian:Sarb + { 16110, 1 }, // #203 sc=Old_Turkic:Orkh scx=Old_Turkic:Orkh + { 16111, 1 }, // #204 sc=Old_Uyghur:Ougr + { 16112, 14 }, // #205 sc=Oriya:Orya + { 16126, 2 }, // #206 sc=Osage:Osge scx=Osage:Osge + { 16128, 2 }, // #207 sc=Osmanya:Osma scx=Osmanya:Osma + { 16130, 5 }, // #208 sc=Pahawh_Hmong:Hmng scx=Pahawh_Hmong:Hmng + { 16135, 1 }, // #209 sc=Palmyrene:Palm scx=Palmyrene:Palm + { 16136, 1 }, // #210 sc=Pau_Cin_Hau:Pauc scx=Pau_Cin_Hau:Pauc + { 16137, 1 }, // #211 sc=Phags_Pa:Phag + { 16138, 2 }, // #212 sc=Phoenician:Phnx scx=Phoenician:Phnx + { 16140, 3 }, // #213 sc=Psalter_Pahlavi:Phlp + { 16143, 2 }, // #214 sc=Rejang:Rjng scx=Rejang:Rjng + { 16145, 2 }, // #215 sc=Runic:Runr scx=Runic:Runr + { 16147, 2 }, // #216 sc=Samaritan:Samr scx=Samaritan:Samr + { 16149, 2 }, // #217 sc=Saurashtra:Saur scx=Saurashtra:Saur + { 16151, 1 }, // #218 sc=Sharada:Shrd + { 16152, 1 }, // #219 sc=Shavian:Shaw scx=Shavian:Shaw + { 16153, 2 }, // #220 sc=Siddham:Sidd scx=Siddham:Sidd + { 16155, 3 }, // #221 sc=SignWriting:Sgnw scx=SignWriting:Sgnw + { 16158, 13 }, // #222 sc=Sinhala:Sinh + { 16171, 1 }, // #223 sc=Sogdian:Sogd + { 16172, 2 }, // #224 sc=Sora_Sompeng:Sora scx=Sora_Sompeng:Sora + { 16174, 1 }, // #225 sc=Soyombo:Soyo scx=Soyombo:Soyo + { 16175, 2 }, // #226 sc=Sundanese:Sund scx=Sundanese:Sund + { 16177, 1 }, // #227 sc=Syloti_Nagri:Sylo + { 16178, 4 }, // #228 sc=Syriac:Syrc + { 16182, 2 }, // #229 sc=Tagalog:Tglg + { 16184, 3 }, // #230 sc=Tagbanwa:Tagb + { 16187, 2 }, // #231 sc=Tai_Le:Tale + { 16189, 5 }, // #232 sc=Tai_Tham:Lana scx=Tai_Tham:Lana + { 16194, 2 }, // #233 sc=Tai_Viet:Tavt scx=Tai_Viet:Tavt + { 16196, 2 }, // #234 sc=Takri:Takr + { 16198, 18 }, // #235 sc=Tamil:Taml + { 16216, 2 }, // #236 sc=Tangsa:Tnsa scx=Tangsa:Tnsa + { 16218, 4 }, // #237 sc=Tangut:Tang scx=Tangut:Tang + { 16222, 13 }, // #238 sc=Telugu:Telu + { 16235, 1 }, // #239 sc=Thaana:Thaa + { 16236, 2 }, // #240 sc=Thai:Thai scx=Thai:Thai + { 16238, 7 }, // #241 sc=Tibetan:Tibt scx=Tibetan:Tibt + { 16245, 3 }, // #242 sc=Tifinagh:Tfng scx=Tifinagh:Tfng + { 16248, 2 }, // #243 sc=Tirhuta:Tirh + { 16250, 1 }, // #244 sc=Toto scx=Toto + { 16251, 2 }, // #245 sc=Ugaritic:Ugar scx=Ugaritic:Ugar + { 16253, 1 }, // #246 sc=Vai:Vaii scx=Vai:Vaii + { 16254, 8 }, // #247 sc=Vithkuqi:Vith scx=Vithkuqi:Vith + { 16262, 2 }, // #248 sc=Wancho:Wcho scx=Wancho:Wcho + { 16264, 2 }, // #249 sc=Warang_Citi:Wara scx=Warang_Citi:Wara + { 16266, 3 }, // #250 sc=Yezidi:Yezi + { 16269, 2 }, // #251 sc=Yi:Yiii + { 16271, 1 }, // #252 sc=Zanabazar_Square:Zanb scx=Zanabazar_Square:Zanb + { 16272, 5 }, // #253 scx=Adlam:Adlm + { 16277, 51 }, // #254 scx=Arabic:Arab + { 16328, 26 }, // #255 scx=Bengali:Beng + { 16354, 12 }, // #256 scx=Bopomofo:Bopo + { 16366, 3 }, // #257 scx=Buginese:Bugi + { 16369, 2 }, // #258 scx=Buhid:Buhd + { 16371, 4 }, // #259 scx=Chakma:Cakm + { 16375, 148 }, // #260 scx=Common:Zyyy + { 16523, 4 }, // #261 scx=Coptic:Copt:Qaac + { 16527, 2 }, // #262 scx=Cypro_Minoan:Cpmn + { 16529, 9 }, // #263 scx=Cypriot:Cprt + { 16538, 9 }, // #264 scx=Cyrillic:Cyrl + { 16547, 7 }, // #265 scx=Devanagari:Deva + { 16554, 3 }, // #266 scx=Dogra:Dogr + { 16557, 5 }, // #267 scx=Duployan:Dupl + { 16562, 9 }, // #268 scx=Georgian:Geor + { 16571, 10 }, // #269 scx=Glagolitic:Glag + { 16581, 25 }, // #270 scx=Grantha:Gran + { 16606, 38 }, // #271 scx=Greek:Grek + { 16644, 17 }, // #272 scx=Gujarati:Gujr + { 16661, 7 }, // #273 scx=Gunjala_Gondi:Gong + { 16668, 19 }, // #274 scx=Gurmukhi:Guru + { 16687, 37 }, // #275 scx=Han:Hani + { 16724, 21 }, // #276 scx=Hangul:Hang + { 16745, 7 }, // #277 scx=Hanifi_Rohingya:Rohg + { 16752, 1 }, // #278 scx=Hanunoo:Hano + { 16753, 16 }, // #279 scx=Hiragana:Hira + { 16769, 20 }, // #280 scx=Inherited:Zinh:Qaai + { 16789, 3 }, // #281 scx=Javanese:Java + { 16792, 4 }, // #282 scx=Kaithi:Kthi + { 16796, 21 }, // #283 scx=Kannada:Knda + { 16817, 19 }, // #284 scx=Katakana:Kana + { 16836, 1 }, // #285 scx=Kayah_Li:Kali + { 16837, 4 }, // #286 scx=Khojki:Khoj + { 16841, 4 }, // #287 scx=Khudawadi:Sind + { 16845, 46 }, // #288 scx=Latin:Latn + { 16891, 6 }, // #289 scx=Limbu:Limb + { 16897, 4 }, // #290 scx=Linear_A:Lina + { 16901, 10 }, // #291 scx=Linear_B:Linb + { 16911, 3 }, // #292 scx=Mahajani:Mahj + { 16914, 11 }, // #293 scx=Malayalam:Mlym + { 16925, 3 }, // #294 scx=Mandaic:Mand + { 16928, 3 }, // #295 scx=Manichaean:Mani + { 16931, 8 }, // #296 scx=Masaram_Gondi:Gonm + { 16939, 3 }, // #297 scx=Modi:Modi + { 16942, 5 }, // #298 scx=Mongolian:Mong + { 16947, 6 }, // #299 scx=Multani:Mult + { 16953, 4 }, // #300 scx=Myanmar:Mymr + { 16957, 9 }, // #301 scx=Nandinagari:Nand + { 16966, 6 }, // #302 scx=Nko:Nkoo + { 16972, 2 }, // #303 scx=Old_Permic:Perm + { 16974, 3 }, // #304 scx=Old_Uyghur:Ougr + { 16977, 18 }, // #305 scx=Oriya:Orya + { 16995, 3 }, // #306 scx=Phags_Pa:Phag + { 16998, 4 }, // #307 scx=Psalter_Pahlavi:Phlp + { 17002, 6 }, // #308 scx=Sharada:Shrd + { 17008, 14 }, // #309 scx=Sinhala:Sinh + { 17022, 2 }, // #310 scx=Sogdian:Sogd + { 17024, 3 }, // #311 scx=Syloti_Nagri:Sylo + { 17027, 12 }, // #312 scx=Syriac:Syrc + { 17039, 3 }, // #313 scx=Tagalog:Tglg + { 17042, 4 }, // #314 scx=Tagbanwa:Tagb + { 17046, 3 }, // #315 scx=Tai_Le:Tale + { 17049, 4 }, // #316 scx=Takri:Takr + { 17053, 25 }, // #317 scx=Tamil:Taml + { 17078, 17 }, // #318 scx=Telugu:Telu + { 17095, 7 }, // #319 scx=Thaana:Thaa + { 17102, 6 }, // #320 scx=Tirhuta:Tirh + { 17108, 7 }, // #321 scx=Yezidi:Yezi + { 17115, 7 }, // #322 scx=Yi:Yiii + { 17122, 6287 }, // #323 bp=RGI_Emoji + { 17122, 655 }, // #324 bp=Basic_Emoji + { 17777, 24 }, // #325 bp=Emoji_Keycap_Sequence + { 17801, 968 }, // #326 bp=RGI_Emoji_Modifier_Sequence + { 18769, 387 }, // #327 bp=RGI_Emoji_Flag_Sequence + { 19156, 12 }, // #328 bp=RGI_Emoji_Tag_Sequence + { 19168, 4241 } // #329 bp=RGI_Emoji_ZWJ_Sequence +}; +#define SRELL_UPDATA_VERSION 201