From 1a012475d7bd764b07be2ecf61c7af465f622915 Mon Sep 17 00:00:00 2001 From: Apple Date: Tue, 10 Apr 2001 11:07:52 +0000 Subject: [PATCH 1/1] hfs-106.tar.gz --- Makefile | 47 + Makefile.postamble | 100 + Makefile.preamble | 125 + PB.project | 25 + hfs_japanese/CustomInfo.xml | 15 + hfs_japanese/Makefile | 43 + hfs_japanese/Makefile.postamble | 108 + hfs_japanese/Makefile.preamble | 137 + hfs_japanese/PB.project | 17 + hfs_japanese/hfs_japanese.kmodproj/CFStub.h | 72 + .../hfs_japanese.kmodproj/CustomInfo.xml | 23 + .../hfs_japanese.kmodproj/JapaneseConverter.c | 2066 ++++++++++++++ hfs_japanese/hfs_japanese.kmodproj/Makefile | 50 + .../hfs_japanese.kmodproj/Makefile.postamble | 100 + .../hfs_japanese.kmodproj/Makefile.preamble | 137 + hfs_japanese/hfs_japanese.kmodproj/PB.project | 25 + .../hfs_japanese.kmodproj/hfs_japanese.c | 92 + hfs_util/Info.plist | 126 + hfs_util/InfoPlist.strings | 21 + hfs_util/Makefile | 50 + hfs_util/Makefile.postamble | 112 + hfs_util/Makefile.preamble | 127 + hfs_util/PB.project | 51 + hfs_util/PkgInfo | 1 + hfs_util/hfs_CD.fs.tiff | Bin 0 -> 7686 bytes hfs_util/hfs_CD.openfs.tiff | Bin 0 -> 7686 bytes hfs_util/hfs_FD.fs.tiff | Bin 0 -> 5372 bytes hfs_util/hfs_FD.openfs.tiff | Bin 0 -> 5372 bytes hfs_util/hfs_HD.fs.tiff | Bin 0 -> 3938 bytes hfs_util/hfs_HD.openfs.tiff | Bin 0 -> 4016 bytes hfs_util/hfs_RHD.fs.tiff | Bin 0 -> 3796 bytes hfs_util/hfs_RHD.openfs.tiff | Bin 0 -> 3854 bytes hfs_util/hfsutil_main.c | 2530 +++++++++++++++++ hfs_util/version.plist | 10 + 34 files changed, 6210 insertions(+) create mode 100644 Makefile create mode 100644 Makefile.postamble create mode 100644 Makefile.preamble create mode 100644 PB.project create mode 100644 hfs_japanese/CustomInfo.xml create mode 100644 hfs_japanese/Makefile create mode 100644 hfs_japanese/Makefile.postamble create mode 100644 hfs_japanese/Makefile.preamble create mode 100644 hfs_japanese/PB.project create mode 100644 hfs_japanese/hfs_japanese.kmodproj/CFStub.h create mode 100644 hfs_japanese/hfs_japanese.kmodproj/CustomInfo.xml create mode 100644 hfs_japanese/hfs_japanese.kmodproj/JapaneseConverter.c create mode 100644 hfs_japanese/hfs_japanese.kmodproj/Makefile create mode 100644 hfs_japanese/hfs_japanese.kmodproj/Makefile.postamble create mode 100644 hfs_japanese/hfs_japanese.kmodproj/Makefile.preamble create mode 100644 hfs_japanese/hfs_japanese.kmodproj/PB.project create mode 100644 hfs_japanese/hfs_japanese.kmodproj/hfs_japanese.c create mode 100644 hfs_util/Info.plist create mode 100644 hfs_util/InfoPlist.strings create mode 100644 hfs_util/Makefile create mode 100644 hfs_util/Makefile.postamble create mode 100644 hfs_util/Makefile.preamble create mode 100644 hfs_util/PB.project create mode 100644 hfs_util/PkgInfo create mode 100644 hfs_util/hfs_CD.fs.tiff create mode 100644 hfs_util/hfs_CD.openfs.tiff create mode 100644 hfs_util/hfs_FD.fs.tiff create mode 100644 hfs_util/hfs_FD.openfs.tiff create mode 100644 hfs_util/hfs_HD.fs.tiff create mode 100644 hfs_util/hfs_HD.openfs.tiff create mode 100644 hfs_util/hfs_RHD.fs.tiff create mode 100644 hfs_util/hfs_RHD.openfs.tiff create mode 100644 hfs_util/hfsutil_main.c create mode 100644 hfs_util/version.plist diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0d79b06 --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +# +# Generated by the Apple Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = hfs + +PROJECTVERSION = 2.8 +PROJECT_TYPE = Aggregate + +BUNDLES = hfs_japanese + +TOOLS = hfs_util + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble + +MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = aggregate.make +LIBS = +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) + + +NEXTSTEP_PB_CFLAGS = -Wno-four-char-constants + + +NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc +WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc +PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc +NEXTSTEP_JAVA_COMPILER = /usr/bin/javac +WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe +PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/Makefile.postamble b/Makefile.postamble new file mode 100644 index 0000000..db6b4a2 --- /dev/null +++ b/Makefile.postamble @@ -0,0 +1,100 @@ +############################################################################### +# Makefile.postamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile, which is imported after all other makefiles, to +# override attributes for a project's Makefile environment. This allows you +# to take advantage of the environment set up by the other Makefiles. +# You can also define custom rules at the end of this file. +# +############################################################################### +# +# These variables are exported by the standard makefiles and can be +# used in any customizations you make. They are *outputs* of +# the Makefiles and should be used, not set. +# +# PRODUCTS: products to install. All of these products will be placed in +# the directory $(DSTROOT)$(INSTALLDIR) +# GLOBAL_RESOURCE_DIR: The directory to which resources are copied. +# LOCAL_RESOURCE_DIR: The directory to which localized resources are copied. +# OFILE_DIR: Directory into which .o object files are generated. +# DERIVED_SRC_DIR: Directory used for all other derived files +# +# ALL_CFLAGS: flags to pass when compiling .c files +# ALL_MFLAGS: flags to pass when compiling .m files +# ALL_CCFLAGS: flags to pass when compiling .cc, .cxx, and .C files +# ALL_MMFLAGS: flags to pass when compiling .mm, .mxx, and .M files +# ALL_PRECOMPFLAGS: flags to pass when precompiling .h files +# ALL_LDFLAGS: flags to pass when linking object files +# ALL_LIBTOOL_FLAGS: flags to pass when libtooling object files +# ALL_PSWFLAGS: flags to pass when processing .psw and .pswm (pswrap) files +# ALL_RPCFLAGS: flags to pass when processing .rpc (rpcgen) files +# ALL_YFLAGS: flags to pass when processing .y (yacc) files +# ALL_LFLAGS: flags to pass when processing .l (lex) files +# +# NAME: name of application, bundle, subproject, palette, etc. +# LANGUAGE: langage in which the project is written (default "English") +# LOCAL_RESOURCES: localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES: non-localized resources of project +# +# SRCROOT: base directory in which to place the new source files +# SRCPATH: relative path from SRCROOT to present subdirectory +# +# INSTALLDIR: Directory the product will be installed into by 'install' target +# PUBLIC_HDR_INSTALLDIR: where to install public headers. Don't forget +# to prefix this with DSTROOT when you use it. +# PRIVATE_HDR_INSTALLDIR: where to install private headers. Don't forget +# to prefix this with DSTROOT when you use it. +# +# EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows) +# +############################################################################### + +# Some compiler flags can be overridden here for certain build situations. +# +# WARNING_CFLAGS: flag used to set warning level (defaults to -Wmost) +# DEBUG_SYMBOLS_CFLAGS: debug-symbol flag passed to all builds (defaults +# to -g) +# DEBUG_BUILD_CFLAGS: flags passed during debug builds (defaults to -DDEBUG) +# OPTIMIZE_BUILD_CFLAGS: flags passed during optimized builds (defaults +# to -O) +# PROFILE_BUILD_CFLAGS: flags passed during profile builds (defaults +# to -pg -DPROFILE) +# LOCAL_DIR_INCLUDE_DIRECTIVE: flag used to add current directory to +# the include path (defaults to -I.) +# DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags +# passed to ld/libtool (defaults to nothing) + + +# Library and Framework projects only: +# INSTALL_NAME_DIRECTIVE: This directive ensures that executables linked +# against the framework will run against the correct version even if +# the current version of the framework changes. You may override this +# to "" as an alternative to using the DYLD_LIBRARY_PATH during your +# development cycle, but be sure to restore it before installing. + + +# Ownership and permissions of files installed by 'install' target + +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + + +# Options to strip. Note: -S strips debugging symbols (executables can be stripped +# down further with -x or, if they load no bundles, with no options at all). + +#STRIPFLAGS = -S + + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. Include them in +# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble. +# +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# diff --git a/Makefile.preamble b/Makefile.preamble new file mode 100644 index 0000000..c0dd6ee --- /dev/null +++ b/Makefile.preamble @@ -0,0 +1,125 @@ +############################################################################### +# Makefile.preamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile for configuring the standard application makefiles +# associated with ProjectBuilder. It is included before the main makefile. +# In Makefile.preamble you set attributes for a project, so they are available +# to the project's makefiles. In contrast, you typically write additional rules or +# override built-in behavior in the Makefile.postamble. +# +# Each directory in a project tree (main project plus subprojects) should +# have its own Makefile.preamble and Makefile.postamble. +############################################################################### +# +# Before the main makefile is included for this project, you may set: +# +# MAKEFILEDIR: Directory in which to find $(MAKEFILE) +# MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make) + +# Compiler/linker flags added to the defaults: The OTHER_* variables will be +# inherited by all nested sub-projects, but the LOCAL_ versions of the same +# variables will not. Put your -I, -D, -U, and -L flags in ProjectBuilder's +# Build Attributes inspector if at all possible. To override the default flags +# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble. The +# variables below are *inputs* to the build process and distinct from the override +# settings done (less often) in the Makefile.postamble. +# +# OTHER_CFLAGS, LOCAL_CFLAGS: additional flags to pass to the compiler +# Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m, +# .cc, .cxx, .C, and .M files. There is no need to respecify the +# flags in OTHER_MFLAGS, etc. +# OTHER_MFLAGS, LOCAL_MFLAGS: additional flags for .m files +# OTHER_CCFLAGS, LOCAL_CCFLAGS: additional flags for .cc, .cxx, and ...C files +# OTHER_MMFLAGS, LOCAL_MMFLAGS: additional flags for .mm and .M files +# OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS: additional flags used when +# precompiling header files +# OTHER_LDFLAGS, LOCAL_LDFLAGS: additional flags passed to ld and libtool +# OTHER_PSWFLAGS, LOCAL_PSWFLAGS: additional flags passed to pswrap +# OTHER_RPCFLAGS, LOCAL_RPCFLAGS: additional flags passed to rpcgen +# OTHER_YFLAGS, LOCAL_YFLAGS: additional flags passed to yacc +# OTHER_LFLAGS, LOCAL_LFLAGS: additional flags passed to lex + +OTHER_CFLAGS = -Wno-precomp + +# These variables provide hooks enabling you to add behavior at almost every +# stage of the make: +# +# BEFORE_PREBUILD: targets to build before installing headers for a subproject +# AFTER_PREBUILD: targets to build after installing headers for a subproject +# BEFORE_BUILD_RECURSION: targets to make before building subprojects +# BEFORE_BUILD: targets to make before a build, but after subprojects +# AFTER_BUILD: targets to make after a build +# +# BEFORE_INSTALL: targets to build before installing the product +# AFTER_INSTALL: targets to build after installing the product +# BEFORE_POSTINSTALL: targets to build before postinstalling every subproject +# AFTER_POSTINSTALL: targts to build after postinstalling every subproject +# +# BEFORE_INSTALLHDRS: targets to build before installing headers for a +# subproject +# AFTER_INSTALLHDRS: targets to build after installing headers for a subproject +# BEFORE_INSTALLSRC: targets to build before installing source for a subproject +# AFTER_INSTALLSRC: targets to build after installing source for a subproject +# +# BEFORE_DEPEND: targets to build before building dependencies for a +# subproject +# AFTER_DEPEND: targets to build after building dependencies for a +# subproject +# +# AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is +# updated every time the project is built. If NO, the dependency +# file is only built when the depend target is invoked. + +# Framework-related variables: +# FRAMEWORK_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the framework's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables + +# Library-related variables: +# PUBLIC_HEADER_DIR: Determines where public exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. +# PRIVATE_HEADER_DIR: Determines where private exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. +# LIBRARY_STYLE: This may be either STATIC or DYNAMIC, and determines +# whether the libraries produced are statically linked when they +# are used or if they are dynamically loadable. <> +# LIBRARY_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the library's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables +# +# INSTALL_AS_USER: owner of the intalled products (default root) +# INSTALL_AS_GROUP: group of the installed products (default wheel) +# INSTALL_PERMISSION: permissions of the installed product (default o+rX) +# +# OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be +# passed on the command line to recursive invocations of make. Note that +# the values in OTHER_*FLAGS are inherited by subprojects automatically -- +# you do not have to (and shouldn't) add OTHER_*FLAGS to +# OTHER_RECURSIVE_VARIABLES. + +# Additional headers to export beyond those in the PB.project: +# OTHER_PUBLIC_HEADERS +# OTHER_PROJECT_HEADERS +# OTHER_PRIVATE_HEADERS + +# Additional files for the project's product: <> +# OTHER_RESOURCES: (non-localized) resources for this project +# OTHER_OFILES: relocatables to be linked into this project +# OTHER_LIBS: more libraries to link against +# OTHER_PRODUCT_DEPENDS: other dependencies of this project +# OTHER_SOURCEFILES: other source files maintained by .pre/postamble +# OTHER_GARBAGE: additional files to be removed by `make clean' + +# Set this to YES if you don't want a final libtool call for a library/framework. +# BUILD_OFILES_LIST_ONLY + +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO diff --git a/PB.project b/PB.project new file mode 100644 index 0000000..ed9431d --- /dev/null +++ b/PB.project @@ -0,0 +1,25 @@ +{ + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + H_FILES = (HFSVolumes.h); + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble); + SUBPROJECTS = (hfs_util, hfs_japanese); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = {}; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_COMPILEROPTIONS = "-Wno-four-char-constants"; + NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; + NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; + PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; + PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; + PROJECTNAME = hfs; + PROJECTTYPE = Aggregate; + PROJECTVERSION = 2.8; + TARGETS = (); + WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; + WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; + WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; +} diff --git a/hfs_japanese/CustomInfo.xml b/hfs_japanese/CustomInfo.xml new file mode 100644 index 0000000..6d239da --- /dev/null +++ b/hfs_japanese/CustomInfo.xml @@ -0,0 +1,15 @@ + + + + + Name + HFS_Japanese.kmod + Vendor + Apple + Version + 0.1 + Date + January 31, 2000 + + + diff --git a/hfs_japanese/Makefile b/hfs_japanese/Makefile new file mode 100644 index 0000000..a328bd5 --- /dev/null +++ b/hfs_japanese/Makefile @@ -0,0 +1,43 @@ +# +# Generated by the Apple Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = hfs_japanese + +PROJECTVERSION = 2.8 +PROJECT_TYPE = Kernel Extension + +TOOLS = hfs_japanese.kmodproj + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble\ + CustomInfo.xml + +MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = kext.make +NEXTSTEP_INSTALLDIR = /System/Library/Extensions +LIBS = +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) +BUNDLE_EXTENSION = kext + + + + +NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc +NEXTSTEP_JAVA_COMPILER = /usr/bin/javac + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/hfs_japanese/Makefile.postamble b/hfs_japanese/Makefile.postamble new file mode 100644 index 0000000..e82b537 --- /dev/null +++ b/hfs_japanese/Makefile.postamble @@ -0,0 +1,108 @@ +############################################################################### +# Makefile.postamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile, which is imported after all other makefiles, to +# override attributes for a project's Makefile environment. This allows you +# to take advantage of the environment set up by the other Makefiles. +# You can also define custom rules at the end of this file. +# +############################################################################### +# +# These variables are exported by the standard makefiles and can be +# used in any customizations you make. They are *outputs* of +# the Makefiles and should be used, not set. +# +# PRODUCTS: products to install. All of these products will be placed in +# the directory $(DSTROOT)$(INSTALLDIR) +# GLOBAL_RESOURCE_DIR: The directory to which resources are copied. +# LOCAL_RESOURCE_DIR: The directory to which localized resources are copied. +# OFILE_DIR: Directory into which .o object files are generated. +# DERIVED_SRC_DIR: Directory used for all other derived files +# +# ALL_CFLAGS: flags to pass when compiling .c files +# ALL_MFLAGS: flags to pass when compiling .m files +# ALL_CCFLAGS: flags to pass when compiling .cc, .cxx, and .C files +# ALL_MMFLAGS: flags to pass when compiling .mm, .mxx, and .M files +# ALL_PRECOMPFLAGS: flags to pass when precompiling .h files +# ALL_LDFLAGS: flags to pass when linking object files +# ALL_LIBTOOL_FLAGS: flags to pass when libtooling object files +# ALL_PSWFLAGS: flags to pass when processing .psw and .pswm (pswrap) files +# ALL_RPCFLAGS: flags to pass when processing .rpc (rpcgen) files +# ALL_YFLAGS: flags to pass when processing .y (yacc) files +# ALL_LFLAGS: flags to pass when processing .l (lex) files +# +# NAME: name of application, bundle, subproject, palette, etc. +# LANGUAGES: langages in which the project is written (default "English") +# English_RESOURCES: localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES: non-localized resources of project +# +# SRCROOT: base directory in which to place the new source files +# SRCPATH: relative path from SRCROOT to present subdirectory +# +# INSTALLDIR: Directory the product will be installed into by 'install' target +# PUBLIC_HDR_INSTALLDIR: where to install public headers. Don't forget +# to prefix this with DSTROOT when you use it. +# PRIVATE_HDR_INSTALLDIR: where to install private headers. Don't forget +# to prefix this with DSTROOT when you use it. +# +# EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows) +# +############################################################################### + +# Some compiler flags can be overridden here for certain build situations. +# +# WARNING_CFLAGS: flag used to set warning level (defaults to -Wmost) +# DEBUG_SYMBOLS_CFLAGS: debug-symbol flag passed to all builds (defaults +# to -g) +# DEBUG_BUILD_CFLAGS: flags passed during debug builds (defaults to -DDEBUG) +# OPTIMIZE_BUILD_CFLAGS: flags passed during optimized builds (defaults +# to -O) +# PROFILE_BUILD_CFLAGS: flags passed during profile builds (defaults +# to -pg -DPROFILE) +# LOCAL_DIR_INCLUDE_DIRECTIVE: flag used to add current directory to +# the include path (defaults to -I.) +# DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags +# passed to ld/libtool (defaults to nothing) + + +# Library and Framework projects only: +# INSTALL_NAME_DIRECTIVE: This directive ensures that executables linked +# against the framework will run against the correct version even if +# the current version of the framework changes. You may override this +# to "" as an alternative to using the DYLD_LIBRARY_PATH during your +# development cycle, but be sure to restore it before installing. + + +# Ownership and permissions of files installed by 'install' target + +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + + +# Options to strip. Note: -S strips debugging symbols (executables can be stripped +# down further with -x or, if they load no bundles, with no options at all). + +#STRIPFLAGS = -S + + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. Include them in +# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble. +# +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# + +SYS_EXTENSIONS_DIR = /System/Library/Extensions +HFS_ENCODINGS_DIR = /System/Library/Filesystems/hfs.fs/Encodings + +after_install: + $(MKDIRS) $(DSTROOT)/$(HFS_ENCODINGS_DIR) + $(CP) $(DSTROOT)/$(SYS_EXTENSIONS_DIR)/hfs_japanese.kext/HFS_Japanese.kmod $(DSTROOT)/$(HFS_ENCODINGS_DIR)/ + $(RM) -rf $(DSTROOT)/$(SYS_EXTENSIONS_DIR)/hfs_japanese.kext diff --git a/hfs_japanese/Makefile.preamble b/hfs_japanese/Makefile.preamble new file mode 100644 index 0000000..c1624b4 --- /dev/null +++ b/hfs_japanese/Makefile.preamble @@ -0,0 +1,137 @@ +############################################################################### +# Makefile.preamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile for configuring the standard application makefiles +# associated with ProjectBuilder. It is included before the main makefile. +# In Makefile.preamble you set attributes for a project, so they are available +# to the project's makefiles. In contrast, you typically write additional rules or +# override built-in behavior in the Makefile.postamble. +# +# Each directory in a project tree (main project plus subprojects) should +# have its own Makefile.preamble and Makefile.postamble. +############################################################################### +# +# Before the main makefile is included for this project, you may set: +# +# MAKEFILEDIR: Directory in which to find $(MAKEFILE) +# MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make) + +# Compiler/linker flags added to the defaults: The OTHER_* variables will be +# inherited by all nested sub-projects, but the LOCAL_ versions of the same +# variables will not. Put your -I, -D, -U, and -L flags in ProjectBuilder's +# Build Attributes inspector if at all possible. To override the default flags +# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble. The +# variables below are *inputs* to the build process and distinct from the override +# settings done (less often) in the Makefile.postamble. +# +# OTHER_CFLAGS, LOCAL_CFLAGS: additional flags to pass to the compiler +# Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m, +# .cc, .cxx, .C, and .M files. There is no need to respecify the +# flags in OTHER_MFLAGS, etc. +# OTHER_MFLAGS, LOCAL_MFLAGS: additional flags for .m files +# OTHER_CCFLAGS, LOCAL_CCFLAGS: additional flags for .cc, .cxx, and ...C files +# OTHER_MMFLAGS, LOCAL_MMFLAGS: additional flags for .mm and .M files +# OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS: additional flags used when +# precompiling header files +# OTHER_LDFLAGS, LOCAL_LDFLAGS: additional flags passed to ld and libtool +# OTHER_PSWFLAGS, LOCAL_PSWFLAGS: additional flags passed to pswrap +# OTHER_RPCFLAGS, LOCAL_RPCFLAGS: additional flags passed to rpcgen +# OTHER_YFLAGS, LOCAL_YFLAGS: additional flags passed to yacc +# OTHER_LFLAGS, LOCAL_LFLAGS: additional flags passed to lex + +# These variables provide hooks enabling you to add behavior at almost every +# stage of the make: +# +# BEFORE_PREBUILD: targets to build before installing headers for a subproject +# AFTER_PREBUILD: targets to build after installing headers for a subproject +# BEFORE_BUILD_RECURSION: targets to make before building subprojects +# BEFORE_BUILD: targets to make before a build, but after subprojects +# AFTER_BUILD: targets to make after a build +# +# BEFORE_INSTALL: targets to build before installing the product +# AFTER_INSTALL: targets to build after installing the product +# BEFORE_POSTINSTALL: targets to build before postinstalling every subproject +# AFTER_POSTINSTALL: targts to build after postinstalling every subproject +# +# BEFORE_INSTALLHDRS: targets to build before installing headers for a +# subproject +# AFTER_INSTALLHDRS: targets to build after installing headers for a subproject +# BEFORE_INSTALLSRC: targets to build before installing source for a subproject +# AFTER_INSTALLSRC: targets to build after installing source for a subproject +# +# BEFORE_DEPEND: targets to build before building dependencies for a +# subproject +# AFTER_DEPEND: targets to build after building dependencies for a +# subproject +# +# AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is +# updated every time the project is built. If NO, the dependency +# file is only built when the depend target is invoked. + +# Framework-related variables: +# FRAMEWORK_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the framework's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables + +# Library-related variables: +# PUBLIC_HEADER_DIR: Determines where public exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. For library projects you should +# set this to something like /Developer/Headers/$(NAME). Do not set +# this variable for framework projects unless you do not want the +# header files included in the framework. +# PRIVATE_HEADER_DIR: Determines where private exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. +# LIBRARY_STYLE: This may be either STATIC or DYNAMIC, and determines +# whether the libraries produced are statically linked when they +# are used or if they are dynamically loadable. This defaults to +# DYNAMIC. +# LIBRARY_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the library's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables +# +# INSTALL_AS_USER: owner of the intalled products (default root) +# INSTALL_AS_GROUP: group of the installed products (default wheel) +# INSTALL_PERMISSIONS: permissions of the installed product (default o+rX) +# +# OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be +# passed on the command line to recursive invocations of make. Note that +# the values in OTHER_*FLAGS are inherited by subprojects automatically -- +# you do not have to (and shouldn't) add OTHER_*FLAGS to +# OTHER_RECURSIVE_VARIABLES. + +# Additional headers to export beyond those in the PB.project: +# OTHER_PUBLIC_HEADERS +# OTHER_PROJECT_HEADERS +# OTHER_PRIVATE_HEADERS + +# Additional files for the project's product: <> +# OTHER_RESOURCES: (non-localized) resources for this project +# OTHER_OFILES: relocatables to be linked into this project +# OTHER_LIBS: more libraries to link against +# OTHER_PRODUCT_DEPENDS: other dependencies of this project +# OTHER_SOURCEFILES: other source files maintained by .pre/postamble +# OTHER_GARBAGE: additional files to be removed by `make clean' + +# Set this to YES if you don't want a final libtool call for a library/framework. +# BUILD_OFILES_LIST_ONLY + +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +# Uncomment to suppress generation of a KeyValueCoding index when installing +# frameworks (This index is used by WOB and IB to determine keys available +# for an object). Set to YES by default. +# PREINDEX_FRAMEWORK = NO + +# Change this definition to install projects somewhere other than the +# standard locations. NEXT_ROOT defaults to "C:/Apple" on Windows systems +# and "" on other systems. +DSTROOT = $(HOME) diff --git a/hfs_japanese/PB.project b/hfs_japanese/PB.project new file mode 100644 index 0000000..56f70cb --- /dev/null +++ b/hfs_japanese/PB.project @@ -0,0 +1,17 @@ +{ + BUNDLE_EXTENSION = kext; + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, CustomInfo.xml); + SUBPROJECTS = (hfs_japanese.kmodproj); + }; + LANGUAGE = English; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_INSTALLDIR = /System/Library/Extensions; + NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; + NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; + PROJECTNAME = hfs_japanese; + PROJECTTYPE = "Kernel Extension"; + PROJECTVERSION = 2.8; +} diff --git a/hfs_japanese/hfs_japanese.kmodproj/CFStub.h b/hfs_japanese/hfs_japanese.kmodproj/CFStub.h new file mode 100644 index 0000000..001a073 --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/CFStub.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#include + +#if !defined(TRUE) + #define TRUE 1 +#endif + +#if !defined(FALSE) + #define FALSE 0 +#endif + +typedef u_int8_t UInt8; +typedef u_int16_t UniChar; +typedef u_int16_t UInt16; +typedef u_int32_t UInt32; +typedef u_int32_t UniCharCount; +typedef unsigned char Boolean; +typedef unsigned char Str31[32]; + + +#define kCFStringEncodingMacJapanese 1 + +/* Values for flags argument for the conversion functions below. These can be combined, but the three NonSpacing behavior flags are exclusive. +*/ +enum { + kCFStringEncodingAllowLossyConversion = 1, // Uses fallback functions to substitutes non mappable chars + kCFStringEncodingBasicDirectionLeftToRight = (1 << 1), // Converted with original direction left-to-right. + kCFStringEncodingBasicDirectionRightToLeft = (1 << 2), // Converted with original direction right-to-left. + kCFStringEncodingSubstituteCombinings = (1 << 3), // Uses fallback function to combining chars. + kCFStringEncodingComposeCombinings = (1 << 4), // Checks mappable precomposed equivalents for decomposed sequences. This is the default behavior. + kCFStringEncodingIgnoreCombinings = (1 << 5), // Ignores combining chars. + kCFStringEncodingUseCanonical = (1 << 6), // Always use canonical form + kCFStringEncodingUseHFSPlusCanonical = (1 << 7), // Always use canonical form but leaves 0x2000 ranges + kCFStringEncodingPrependBOM = (1 << 8), // Prepend BOM sequence (i.e. ISO2022KR) + kCFStringEncodingDisableCorporateArea = (1 << 9), // Disable the usage of 0xF8xx area for Apple proprietary chars in converting to UniChar, resulting loosely mapping. +}; + +enum { + kCFStringEncodingConversionSuccess = 0, + kCFStringEncodingInvalidInputStream = 1, + kCFStringEncodingInsufficientOutputBufferLength = 2, + kCFStringEncodingConverterUnavailable = 3, +}; + + +extern UInt32 __CFToMacJapanese(UInt32 flags, const UniChar *characters, + UInt32 numChars, UInt8 *bytes, UInt32 maxByteLen, UInt32 *usedByteLen); + +extern UInt32 __CFFromMacJapanese(UInt32 flags, const UInt8 *bytes, UInt32 numBytes, + UniChar *characters, UInt32 maxCharLen, UInt32 *usedCharLen); + diff --git a/hfs_japanese/hfs_japanese.kmodproj/CustomInfo.xml b/hfs_japanese/hfs_japanese.kmodproj/CustomInfo.xml new file mode 100644 index 0000000..bffd52d --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/CustomInfo.xml @@ -0,0 +1,23 @@ + + + + +Module + + Name + HFS_Japanese.kmod + File + HFS_Japanese.kmod + Requires + + Initialize + hfs_japanese_start + Finalize + hfs_japanese_stop + Target + Kernel + Format + mach-o + + + diff --git a/hfs_japanese/hfs_japanese.kmodproj/JapaneseConverter.c b/hfs_japanese/hfs_japanese.kmodproj/JapaneseConverter.c new file mode 100644 index 0000000..bcf92b1 --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/JapaneseConverter.c @@ -0,0 +1,2066 @@ +/* JapaneseConverter.c + * Copyright 1998, Apple Computer, Inc. All rights reserved. + * Responsibility: Aki Inoue + */ + +#include +#include "CFStub.h" + +/* Convenience functions for converter development */ +typedef struct _CFStringEncodingUnicodeTo8BitCharMap { + UniChar _u; + UInt8 _c; +} CFStringEncodingUnicodeTo8BitCharMap; + + +#define CFCharMappingDefinitionWithSize(theSize) \ +typedef struct _CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize {\ + UniChar startChar;\ + UInt16 bytes[theSize];\ +} CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize;\ +static __inline__ UInt16 CFStringEncodingUnicodeTo16BitEncodingWithArray##theSize(const CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize *theTable, UInt32 numElem, UniChar character) {\ + const CFStringEncodingUnicodeTo16BitCharMapWithArray##theSize *p, *q, *divider;\ + if ((character < theTable[0].startChar) || (character > theTable[numElem-1].startChar + theSize)) {\ + return 0;\ + }\ + p = theTable;\ + q = p + (numElem-1);\ + while (p <= q) {\ + divider = p + ((q - p) >> 1); /* divide by 2 */\ + if (character < divider->startChar) { q = divider - 1; }\ + else if (character < (divider->startChar + theSize)) { return divider->bytes[character - divider->startChar]; }\ + else { p = divider + 1; }\ + }\ + return 0;\ +} + + +Boolean CFStringEncodingIsDecomposableCharacter(UniChar character, Boolean isHFSPlusCanonical) { + /* Japanese codepoints 0x3000 ~ 0x30FF */ + static const unsigned long __JapaneseDecompBitmap[] = { + 0x00000000, 0x00000000, 0x000AAAAA, 0xA540DB6C, /* 0x3000 */ + 0x00000802, 0x000AAAAA, 0xA540DB6C, 0x000009E2, /* 0x3080 */ + }; + return ((character > 0x3000) && (character < 0x3100) && (__JapaneseDecompBitmap[(character - 0x3000) / 32] & (1 << (31 - ((character - 0x3000) % 32)))) ? TRUE : FALSE); +} + +UInt32 CFStringEncodingDecomposeCharacter(UInt32 flags, UniChar character, UniChar *characters) { + /* Handle HIRAGANA LETTERs */ + switch(character) { + case 0x3071: *characters = 0x306F; *(characters + 1) = 0x309A; break; /* PA */ + case 0x3074: *characters = 0x3072; *(characters + 1) = 0x309A; break; /* PI */ + case 0x3077: *characters = 0x3075; *(characters + 1) = 0x309A; break; /* PU */ + case 0x307A: *characters = 0x3078; *(characters + 1) = 0x309A; break; /* PE */ + + case 0x307D: *characters = 0x307B; *(characters + 1) = 0x309A; break; /* PO */ + case 0x3094: *characters = 0x3046; *(characters + 1) = 0x3099; break; /* VU */ + case 0x30D1: *characters = 0x30CF; *(characters + 1) = 0x309A; break; /* PA */ + case 0x30D4: *characters = 0x30D2; *(characters + 1) = 0x309A; break; /* PI */ + + case 0x30D7: *characters = 0x30D5; *(characters + 1) = 0x309A; break; /* PU */ + case 0x30DA: *characters = 0x30D8; *(characters + 1) = 0x309A; break; /* PE */ + case 0x30DD: *characters = 0x30DB; *(characters + 1) = 0x309A; break; /* PO */ + case 0x30F4: *characters = 0x30A6; *(characters + 1) = 0x3099; break; /* VU */ + + case 0x30F7: *characters = 0x30EF; *(characters + 1) = 0x3099; break; /* VA */ + case 0x30F8: *characters = 0x30F0; *(characters + 1) = 0x3099; break; /* VI */ + case 0x30F9: *characters = 0x30F1; *(characters + 1) = 0x3099; break; /* VE */ + case 0x30FA: *characters = 0x30F2; *(characters + 1) = 0x3099; break; /* VO */ + + default: + /* the rest (41 of them) have a simple conversion */ + *characters = character - 1; + *(characters + 1) = 0x3099; + break; + } + return 2; +} + +#if 0 +CFCharMappingDefinitionWithSize(4); +#endif +CFCharMappingDefinitionWithSize(16); +CFCharMappingDefinitionWithSize(32); + +#define NUM_TOJIS_CHARMAP 1182 +static CFStringEncodingUnicodeTo16BitCharMapWithArray16 __CFToJISCharMap [NUM_TOJIS_CHARMAP] = { + {0xA0, {0xA0, 0x0, 0x2171, 0x2172, 0x0, 0x5C, 0x0, 0x2178, 0x212F, 0xFD, 0x0, 0x0, 0x224C, 0x0, 0x0, 0x0, }}, + {0xB0, {0x216B, 0x215E, 0x0, 0x0, 0x212D, 0x0, 0x2279, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0xC5, {0x2272, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0xD7, {0x215F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0xF7, {0x2160, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x391, {0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627, 0x2628, 0x2629, 0x262A, 0x262B, 0x262C, 0x262D, 0x262E, 0x262F, 0x2630, }}, + {0x3A1, {0x2631, 0x0, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, 0x2637, 0x2638, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x3B1, {0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, 0x2648, 0x2649, 0x264A, 0x264B, 0x264C, 0x264D, 0x264E, 0x264F, 0x2650, }}, + {0x3C1, {0x2651, 0x0, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, 0x2657, 0x2658, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x401, {0x2727, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2721, }}, + {0x411, {0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, 0x2729, 0x272A, 0x272B, 0x272C, 0x272D, 0x272E, 0x272F, 0x2730, 0x2731, 0x2732, }}, + {0x421, {0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273A, 0x273B, 0x273C, 0x273D, 0x273E, 0x273F, 0x2740, 0x2741, 0x2751, }}, + {0x431, {0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, 0x2759, 0x275A, 0x275B, 0x275C, 0x275D, 0x275E, 0x275F, 0x2760, 0x2761, 0x2762, }}, + {0x441, {0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, 0x276A, 0x276B, 0x276C, 0x276D, 0x276E, 0x276F, 0x2770, 0x2771, 0x0, }}, + {0x451, {0x2757, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2010, {0x213E, 0x0, 0x0, 0x0, 0x213D, 0x0, 0x2142, 0x0, 0x2146, 0x2147, 0x0, 0x0, 0x2148, 0x2149, 0x0, 0x0, }}, + {0x2020, {0x2277, 0x2278, 0x0, 0x0, 0x0, 0x2145, 0xFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2030, {0x2273, 0x0, 0x216C, 0x216D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2228, 0x0, 0x0, 0x2131, 0x0, }}, + {0x2103, {0x216E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2113, {0x2B31, 0x0, 0x0, 0x2B7B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B7D, 0xFE, }}, + {0x212B, {0x2272, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2160, {0x2A21, 0x2A22, 0x2A23, 0x2A24, 0x2A25, 0x2A26, 0x2A27, 0x2A28, 0x2A29, 0x2A2A, 0x2A2B, 0x2A2C, 0x0, 0x0, 0x0, 0x0, }}, + {0x2170, {0x2A35, 0x2A36, 0x2A37, 0x2A38, 0x2A39, 0x2A3A, 0x2A3B, 0x2A3C, 0x2A3D, 0x2A3E, 0x2A3F, 0x2A40, 0x0, 0x0, 0x0, 0x0, }}, + {0x2190, {0x222B, 0x222C, 0x222A, 0x222D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x21C4, {0x2C4E, 0x2C4F, 0x2C4D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x224D, 0x0, }}, + {0x21D4, {0x224E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x21E6, {0x2C52, 0x2C53, 0x2C51, 0x2C54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2200, {0x224F, 0x0, 0x225F, 0x2250, 0x0, 0x0, 0x0, 0x2260, 0x223A, 0x0, 0x0, 0x223B, 0x0, 0x0, 0x0, 0x0, }}, + {0x2212, {0x215D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2265, 0x0, 0x0, 0x2267, 0x2167, 0x2F22, 0x225C, 0x0, }}, + {0x2227, {0x224A, 0x224B, 0x2241, 0x2240, 0x2269, 0x226A, 0x0, 0x2F21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2168, 0x2268, 0x0, }}, + {0x223D, {0x2266, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2252, {0x2262, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2162, 0x2261, }}, + {0x2266, {0x2165, 0x2166, 0x0, 0x0, 0x2263, 0x2264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2282, {0x223E, 0x223F, 0x0, 0x0, 0x223C, 0x223D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x22A5, {0x225D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x22BF, {0x2F23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x22EF, {0x2144, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2312, {0x225E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2460, {0x2921, 0x2922, 0x2923, 0x2924, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929, 0x292A, 0x292B, 0x292C, 0x292D, 0x292E, 0x292F, 0x2930, }}, + {0x2470, {0x2931, 0x2932, 0x2933, 0x2934, 0x293F, 0x2940, 0x2941, 0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, 0x294A, }}, + {0x2480, {0x294B, 0x294C, 0x294D, 0x294E, 0x294F, 0x2950, 0x2951, 0x2952, 0x2972, 0x2973, 0x2974, 0x2975, 0x2976, 0x2977, 0x2978, 0x2979, }}, + {0x2490, {0x297A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2A5D, 0x2A5E, 0x2A5F, 0x2A60, }}, + {0x24A0, {0x2A61, 0x2A62, 0x2A63, 0x2A64, 0x2A65, 0x2A66, 0x2A67, 0x2A68, 0x2A69, 0x2A6A, 0x2A6B, 0x2A6C, 0x2A6D, 0x2A6E, 0x2A6F, 0x2A70, }}, + {0x24B0, {0x2A71, 0x2A72, 0x2A73, 0x2A74, 0x2A75, 0x2A76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2500, {0x2821, 0x282C, 0x2822, 0x282D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2823, 0x0, 0x0, 0x282E, }}, + {0x2510, {0x2824, 0x0, 0x0, 0x282F, 0x2826, 0x0, 0x0, 0x2831, 0x2825, 0x0, 0x0, 0x2830, 0x2827, 0x283C, 0x0, 0x0, }}, + {0x2520, {0x2837, 0x0, 0x0, 0x2832, 0x2829, 0x283E, 0x0, 0x0, 0x2839, 0x0, 0x0, 0x2834, 0x2828, 0x0, 0x0, 0x2838, }}, + {0x2530, {0x283D, 0x0, 0x0, 0x2833, 0x282A, 0x0, 0x0, 0x283A, 0x283F, 0x0, 0x0, 0x2835, 0x282B, 0x0, 0x0, 0x283B, }}, + {0x2542, {0x2840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2836, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x25A0, {0x2223, 0x2222, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x25B2, {0x2225, 0x2224, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2227, 0x2226, 0x0, 0x0, 0x0, 0x0, }}, + {0x25C6, {0x2221, 0x217E, 0x0, 0x0, 0x0, 0x217B, 0x0, 0x0, 0x217D, 0x217C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x25EF, {0x227E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2605, {0x217A, 0x2179, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2C36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x261C, {0x2C4A, 0x2C4B, 0x2C49, 0x2C4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2640, {0x216A, 0x0, 0x2169, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2660, {0x2C25, 0x2C23, 0x2C24, 0x2C26, 0x2C21, 0x2C27, 0x2C28, 0x2C22, 0x0, 0x0, 0x2276, 0x0, 0x0, 0x2275, 0x0, 0x2274, }}, + {0x2776, {0x295D, 0x295E, 0x295F, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x3000, {0x2121, 0x2122, 0x2123, 0x2137, 0x2C37, 0x2139, 0x213A, 0x213B, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, }}, + {0x3010, {0x215A, 0x215B, 0x2229, 0x222E, 0x214C, 0x214D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2141, 0x2F35, 0x0, 0x2F36, }}, + {0x3020, {0x2C35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x3041, {0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242A, 0x242B, 0x242C, 0x242D, 0x242E, 0x242F, 0x2430, }}, + {0x3051, {0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243A, 0x243B, 0x243C, 0x243D, 0x243E, 0x243F, 0x2440, }}, + {0x3061, {0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244A, 0x244B, 0x244C, 0x244D, 0x244E, 0x244F, 0x2450, }}, + {0x3071, {0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245A, 0x245B, 0x245C, 0x245D, 0x245E, 0x245F, 0x2460, }}, + {0x3081, {0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, 0x2470, }}, + {0x3091, {0x2471, 0x2472, 0x2473, 0x2F49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x212B, 0x212C, 0x2135, 0x2136, 0x0, 0x0, }}, + {0x30A1, {0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252A, 0x252B, 0x252C, 0x252D, 0x252E, 0x252F, 0x2530, }}, + {0x30B1, {0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253A, 0x253B, 0x253C, 0x253D, 0x253E, 0x253F, 0x2540, }}, + {0x30C1, {0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254A, 0x254B, 0x254C, 0x254D, 0x254E, 0x254F, 0x2550, }}, + {0x30D1, {0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 0x255F, 0x2560, }}, + {0x30E1, {0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x256D, 0x256E, 0x256F, 0x2570, }}, + {0x30F1, {0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2F4B, 0x2F4C, 0x2F4D, 0x2F4E, 0x2126, 0x213C, 0x2133, 0x2134, 0x0, 0x0, }}, + {0x322A, {0x2D22, 0x2D23, 0x2D24, 0x2D25, 0x2D26, 0x2D27, 0x2D21, 0x2D2E, 0x2D31, 0x2D34, 0x2D30, 0x2D35, 0x2D33, 0x2D29, 0x2D39, 0x2D2C, }}, + {0x323A, {0x2D2D, 0x2D32, 0x2D36, 0x2D37, 0x2D2F, 0x2D38, 0x2D28, 0x0, 0x2D2A, 0x2D2B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x3296, {0x2D79, 0x0, 0x2D7B, 0x2D7E, 0x0, 0x0, 0x0, 0x2D7A, 0x2D7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2D73, 0x2D74, }}, + {0x32A6, {0x2D75, 0x2D76, 0x2D77, 0x2D78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x3300, {0x2E3F, 0x0, 0x0, 0x2E29, 0x0, 0x2E26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E32, 0x0, 0x0, }}, + {0x3314, {0x2E24, 0x2E2C, 0x2E25, 0x0, 0x2E2B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E40, 0x0, 0x0, 0x0, 0x2E22, 0x2E34, }}, + {0x3326, {0x2E35, 0x2E2D, 0x0, 0x0, 0x2E41, 0x2E37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E42, 0x0, 0x2E27, 0x0, 0x0, }}, + {0x3336, {0x2E2A, 0x0, 0x0, 0x2E30, 0x0, 0x2E36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2E33, 0x0, 0x0, 0x0, }}, + {0x3347, {0x2E43, 0x0, 0x2E21, 0x2E2F, 0x0, 0x0, 0x2E23, 0x2E28, 0x0, 0x0, 0x2E2E, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x3357, {0x2E31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x337B, {0x2E6A, 0x2E69, 0x2E68, 0x2E67, 0x2E7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B3B, 0x2B3C, 0x2B3D, 0x0, 0x0, 0x0, }}, + {0x338E, {0x2B2B, 0x2B2D, 0x2B3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B2F, 0x2B30, 0x2B32, 0x0, 0x0, 0x0, 0x2B21, 0x2B23, }}, + {0x339E, {0x2B29, 0x2B22, 0x2B24, 0x2B27, 0x2B2A, 0x0, 0x2B25, 0x2B28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x33B0, {0x2B36, 0x2B35, 0x2B34, 0x2B33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x33C4, {0x2B2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2B39, 0x0, 0x2B7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x33D4, {0x2B38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x4E00, {0x306C, 0x437A, 0x0, 0x3C37, 0x0, 0x0, 0x0, 0x4B7C, 0x3E66, 0x3B30, 0x3E65, 0x323C, 0x0, 0x4954, 0x4D3F, 0x0, }}, + {0x4E10, {0x5022, 0x312F, 0x0, 0x0, 0x336E, 0x5023, 0x4024, 0x5242, 0x3556, 0x4A3A, 0x0, 0x0, 0x0, 0x0, 0x3E67, 0x0, }}, + {0x4E21, {0x4E3E, 0x0, 0x0, 0x0, 0x0, 0x4A42, 0x0, 0x0, 0x0, 0x5024, 0x0, 0x0, 0x4366, 0x0, 0x0, 0x0, }}, + {0x4E31, {0x5025, 0x367A, 0x0, 0x0, 0x0, 0x5026, 0x0, 0x345D, 0x4330, 0x0, 0x3C67, 0x5027, 0x0, 0x0, 0x5028, 0x0, }}, + {0x4E42, {0x5029, 0x4735, 0x0, 0x3557, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4737, 0x0, 0x4663, 0x3843, 0x4B33, 0x0, 0x0, }}, + {0x4E55, {0x6949, 0x502A, 0x3E68, 0x502B, 0x3235, 0x0, 0x0, 0x0, 0x3665, 0x3870, 0x4C69, 0x0, 0x0, 0x5626, 0x0, 0x0, }}, + {0x4E71, {0x4D70, 0x0, 0x467D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3425, 0x0, 0x3535, }}, + {0x4E82, {0x502C, 0x0, 0x0, 0x502D, 0x4E3B, 0x0, 0x4D3D, 0x4168, 0x502F, 0x3B76, 0x4673, 0x0, 0x5032, 0x0, 0x0, 0x313E, }}, + {0x4E92, {0x385F, 0x0, 0x385E, 0x3066, 0x0, 0x0, 0x4F4B, 0x4F4A, 0x0, 0x3A33, 0x3021, 0x0, 0x5033, 0x5034, 0x5035, 0x4B34, }}, + {0x4EA2, {0x5036, 0x0, 0x3872, 0x3067, 0x4B72, 0x0, 0x357C, 0x0, 0x0, 0x357D, 0x357E, 0x4462, 0x4E3C, 0x0, 0x5037, 0x0, }}, + {0x4EB3, {0x5038, 0x0, 0x0, 0x5039, 0x0, 0x0, 0x0, 0x3F4D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D3A, 0x3F4E, 0x503E, }}, + {0x4EC4, {0x503C, 0x0, 0x503D, 0x3558, 0x0, 0x0, 0x3A23, 0x3270, 0x0, 0x503B, 0x503A, 0x4A29, 0x0, 0x0, 0x0, 0x0, }}, + {0x4ED4, {0x3B46, 0x3B45, 0x423E, 0x503F, 0x4955, 0x4067, 0x0, 0x0, 0x0, 0x2138, 0x5040, 0x5042, 0x0, 0x0, 0x0, 0x4265, }}, + {0x4EE4, {0x4E61, 0x304A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5041, 0x323E, 0x0, 0x3644, 0x0, 0x4367, 0x0, }}, + {0x4EF6, {0x376F, 0x5043, 0x0, 0x0, 0x0, 0x4724, 0x0, 0x0, 0x0, 0x0, 0x0, 0x346B, 0x0, 0x0, 0x0, 0x0, }}, + {0x4F09, {0x5044, 0x304B, 0x0, 0x0, 0x3860, 0x346C, 0x497A, 0x4832, 0x3559, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x4F1A, {0x3271, 0x0, 0x5067, 0x4541, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x4F2F, {0x476C, 0x5046, 0x0, 0x0, 0x0, 0x483C, 0x0, 0x4E62, 0x0, 0x3F2D, 0x0, 0x3B47, 0x0, 0x3B77, 0x3240, 0x0, }}, + {0x4F43, {0x4451, 0x0, 0x0, 0x4322, 0x504A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x304C, 0x4463, 0x3D3B, 0x3A34, 0x4D24, 0x0, }}, + {0x4F53, {0x424E, 0x0, 0x323F, 0x0, 0x5049, 0x0, 0x4D3E, 0x5045, 0x5047, 0x3A6E, 0x5048, 0x5524, 0x0, 0x0, 0x0, 0x0, }}, + {0x4F69, {0x5050, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5053, 0x5051, 0x0, 0x0, 0x3242, 0x0, 0x4A3B, 0x504B, 0x0, 0x0, }}, + {0x4F7B, {0x504F, 0x3873, 0x0, 0x0, 0x3B48, 0x0, 0x0, 0x0, 0x3426, 0x0, 0x0, 0x5054, 0x0, 0x504C, 0x0, 0x0, }}, + {0x4F8B, {0x4E63, 0x0, 0x3B78, 0x0, 0x504D, 0x0, 0x5052, 0x0, 0x0, 0x0, 0x0, 0x5055, 0x0, 0x504E, 0x0, 0x0, }}, + {0x4F9B, {0x3621, 0x0, 0x304D, 0x0, 0x0, 0x3622, 0x3241, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x4FAB, {0x5525, 0x0, 0x4B79, 0x496E, 0x3874, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F2F, 0x4E37, 0x0, 0x0, 0x0, 0x0, }}, + {0x4FBF, {0x4A58, 0x0, 0x0, 0x3738, 0x4225, 0x3264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D53, 0x0, 0x0, 0x0, 0x5059, }}, + {0x4FD0, {0x505E, 0x505C, 0x0, 0x0, 0x5057, 0x0, 0x0, 0x422F, 0x505A, 0x0, 0x505D, 0x505B, 0x0, 0x4A5D, 0x0, 0x5058, }}, + {0x4FE1, {0x3F2E, 0x0, 0x4B73, 0x505F, 0x5060, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D24, 0x506D, 0x0, }}, + {0x4FF3, {0x4750, 0x0, 0x4936, 0x5068, 0x0, 0x4A70, 0x0, 0x3236, 0x0, 0x0, 0x0, 0x506C, 0x0, 0x0, 0x0, 0x0, }}, + {0x5005, {0x5066, 0x506F, 0x0, 0x0, 0x4152, 0x0, 0x3844, 0x0, 0x475C, 0x0, 0x6047, 0x0, 0x506E, 0x455D, 0x0, 0x5063, }}, + {0x5016, {0x3876, 0x0, 0x0, 0x3875, 0x5061, 0x0, 0x0, 0x0, 0x0, 0x3C5A, 0x0, 0x5069, 0x0, 0x4A6F, 0x434D, 0x5065, }}, + {0x5026, {0x3771, 0x0, 0x5062, 0x506A, 0x5064, 0x4E51, 0x506B, 0x4F41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5036, {0x3666, 0x0, 0x0, 0x3770, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5070, 0x0, 0x0, }}, + {0x5047, {0x5071, 0x5075, 0x304E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A50, 0x5074, 0x0, 0x0, 0x0, 0x0, 0x5073, 0x5077, }}, + {0x505A, {0x5076, 0x0, 0x4464, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3772, 0x0, 0x0, 0x0, 0x0, }}, + {0x506C, {0x5078, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C45, 0x0, 0x4226, 0x4465, 0x3676, 0x0, 0x5079, 0x0, 0x0, 0x0, }}, + {0x507D, {0x3536, 0x0, 0x0, 0x507A, 0x0, 0x0, 0x0, 0x0, 0x507C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x508D, {0x4B35, 0x0, 0x0, 0x0, 0x3766, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B31, 0x4877, 0x507B, 0x0, 0x0, }}, + {0x50AC, {0x3A45, 0x4D43, 0x0, 0x0, 0x0, 0x0, 0x507E, 0x5123, 0x507D, 0x3A44, 0x0, 0x3D7D, 0x0, 0x0, 0x0, 0x0, }}, + {0x50BE, {0x3739, 0x0, 0x0, 0x0, 0x5124, 0x0, 0x0, 0x364F, 0x0, 0x0, 0x0, 0x5121, 0x5122, 0x0, 0x0, 0x462F, }}, + {0x50CF, {0x417C, 0x0, 0x3623, 0x0, 0x0, 0x0, 0x4B4D, 0x5125, 0x0, 0x0, 0x0, 0x4E3D, 0x0, 0x0, 0x0, 0x5126, }}, + {0x50E3, {0x5129, 0x0, 0x5127, 0x0, 0x414E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5128, 0x512A, 0x0, 0x0, 0x0, 0x0, }}, + {0x50F5, {0x512C, 0x0, 0x0, 0x0, 0x512B, 0x0, 0x4A48, 0x0, 0x0, 0x0, 0x0, 0x3537, 0x512E, 0x512F, 0x0, 0x322F, }}, + {0x5109, {0x512D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C74, 0x0, 0x5132, 0x5131, 0x5130, 0x0, 0x5056, }}, + {0x511A, {0x5133, 0x0, 0x0, 0x0, 0x0, 0x3D7E, 0x0, 0x5134, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x512A, {0x4D25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C59, 0x0, 0x0, 0x0, 0x0, 0x5136, 0x0, 0x0, }}, + {0x513A, {0x5135, 0x5138, 0x5137, 0x0, 0x0, 0x5139, 0x513A, 0x3074, 0x0, 0x3835, 0x373B, 0x3D3C, 0x437B, 0x3624, 0x4068, 0x3877, }}, + {0x514B, {0x396E, 0x513C, 0x4C48, 0x4546, 0x0, 0x3B79, 0x0, 0x513B, 0x0, 0x513D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x455E, }}, + {0x515C, {0x3375, 0x0, 0x0, 0x0, 0x0, 0x0, 0x513E, 0x0, 0x0, 0x467E, 0x0, 0x0, 0x4134, 0x5140, 0x5141, 0x482C, }}, + {0x516C, {0x3878, 0x4F3B, 0x5142, 0x0, 0x0, 0x3626, 0x0, 0x0, 0x0, 0x4A3C, 0x4236, 0x3671, 0x4535, 0x0, 0x0, 0x0, }}, + {0x517C, {0x3773, 0x0, 0x0, 0x0, 0x5143, 0x0, 0x5144, 0x0, 0x0, 0x4662, 0x315F, 0x0, 0x0, 0x5147, 0x3A7D, 0x0, }}, + {0x518C, {0x5146, 0x3A46, 0x0, 0x5148, 0x666E, 0x5149, 0x4B41, 0x514A, 0x0, 0x514B, 0x514C, 0x3E69, 0x0, 0x3C4C, 0x0, 0x0, }}, + {0x51A0, {0x3427, 0x0, 0x514F, 0x0, 0x514D, 0x4C3D, 0x514E, 0x0, 0x495A, 0x5150, 0x5151, 0x5152, 0x455F, 0x0, 0x0, 0x0, }}, + {0x51B0, {0x5156, 0x5154, 0x5155, 0x5153, 0x3A63, 0x5157, 0x4C6A, 0x4E64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5158, 0x0, 0x0, }}, + {0x51C4, {0x4028, 0x5159, 0x3D5A, 0x0, 0x0, 0x515A, 0x0, 0x437C, 0x4E3F, 0x4560, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x51D6, {0x5245, 0x0, 0x0, 0x0, 0x0, 0x515B, 0x7425, 0x3645, 0x0, 0x0, 0x515C, 0x4B5E, 0x0, 0x0, 0x0, 0x0, }}, + {0x51E6, {0x3D68, 0x427C, 0x0, 0x515E, 0x4664, 0x0, 0x0, 0x515F, 0x0, 0x0, 0x5160, 0x332E, 0x0, 0x0, 0x0, 0x5161, }}, + {0x51F6, {0x3627, 0x0, 0x464C, 0x317A, 0x3D50, 0x0, 0x0, 0x4821, 0x5162, 0x0, 0x4561, 0x0, 0x0, 0x3F4F, 0x5163, 0x0, }}, + {0x5206, {0x4A2C, 0x405A, 0x3422, 0x0, 0x3429, 0x5164, 0x0, 0x0, 0x5166, 0x0, 0x0, 0x373A, 0x0, 0x0, 0x5165, 0x0, }}, + {0x5217, {0x4E73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x483D, 0x4A4C, 0x0, }}, + {0x5227, {0x5167, 0x0, 0x4D78, 0x5168, 0x0, 0x0, 0x0, 0x5169, 0x0, 0x457E, 0x0, 0x0, 0x516A, 0x0, 0x0, 0x4029, }}, + {0x5237, {0x3A7E, 0x3774, 0x516B, 0x3B49, 0x396F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4466, 0x516D, 0x0, 0x0, }}, + {0x5247, {0x4227, 0x0, 0x0, 0x3A6F, 0x516E, 0x516F, 0x4130, 0x0, 0x516C, 0x0, 0x0, 0x0, 0x0, 0x5171, 0x0, 0x4B36, }}, + {0x525B, {0x3964, 0x0, 0x0, 0x5170, 0x0, 0x0, 0x0, 0x0, 0x3775, 0x3A5E, 0x476D, 0x0, 0x0, 0x0, 0x5174, 0x5172, }}, + {0x526F, {0x497B, 0x3E6A, 0x517B, 0x3364, 0x5175, 0x5173, 0x414F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5177, 0x0, }}, + {0x527F, {0x5176, 0x0, 0x0, 0x0, 0x3344, 0x0, 0x0, 0x0, 0x3760, 0x517C, 0x4E2D, 0x0, 0x0, 0x0, 0x5178, 0x0, }}, + {0x5291, {0x517D, 0x517A, 0x0, 0x5179, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E4F, 0x0, 0x0, 0x0, 0x3879, 0x3243, }}, + {0x52A3, {0x4E74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D75, 0x4558, 0x3965, 0x5222, 0x5223, 0x0, 0x0, 0x0, 0x4E65, 0x0, }}, + {0x52B4, {0x4F2B, 0x5225, 0x0, 0x0, 0x0, 0x387A, 0x0, 0x0, 0x5224, 0x0, 0x332F, 0x0, 0x0, 0x5226, 0x0, 0x4B56, }}, + {0x52C5, {0x443C, 0x0, 0x4D26, 0x0, 0x4A59, 0x0, 0x0, 0x0, 0x5227, 0x0, 0x0, 0x0, 0x0, 0x7055, 0x0, 0x0, }}, + {0x52D5, {0x4630, 0x0, 0x5228, 0x342A, 0x4C33, 0x0, 0x0, 0x0, 0x3E21, 0x5229, 0x4A67, 0x522D, 0x0, 0x402A, 0x522A, 0x3650, }}, + {0x52E6, {0x522B, 0x342B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x372E, 0x522E, 0x0, 0x522F, }}, + {0x52F8, {0x5230, 0x5231, 0x3C5B, 0x0, 0x0, 0x0, 0x387B, 0x4C5E, 0x0, 0x4C68, 0x4677, 0x0, 0x0, 0x4A71, 0x5232, 0x0, }}, + {0x5308, {0x5233, 0x0, 0x0, 0x0, 0x0, 0x5235, 0x0, 0x5237, 0x5236, 0x0, 0x0, 0x0, 0x0, 0x5238, 0x323D, 0x4B4C, }}, + {0x5319, {0x3A7C, 0x5239, 0x0, 0x0, 0x4159, 0x0, 0x0, 0x3E22, 0x3629, 0x0, 0x523A, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x532A, {0x485B, 0x0, 0x0, 0x0, 0x0, 0x523B, 0x0, 0x523C, 0x0, 0x523D, 0x0, 0x0, 0x0, 0x0, 0x523E, 0x4924, }}, + {0x533A, {0x3668, 0x3065, 0x0, 0x0, 0x0, 0x463F, 0x523F, 0x3D3D, 0x0, 0x4069, 0x0, 0x5241, 0x5240, 0x3E23, 0x3861, 0x5243, }}, + {0x534A, {0x483E, 0x0, 0x0, 0x5244, 0x0, 0x0, 0x0, 0x485C, 0x4234, 0x426E, 0x3628, 0x0, 0x0, 0x466E, 0x4331, 0x0, }}, + {0x535A, {0x476E, 0x0, 0x4B4E, 0x0, 0x5246, 0x0, 0x406A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3735, 0x0, 0x0, 0x5247, }}, + {0x536E, {0x5248, 0x312C, 0x3075, 0x346D, 0x0, 0x4228, 0x3551, 0x4D71, 0x0, 0x524B, 0x3237, 0x0, 0x0, 0x524A, 0x0, 0x0, }}, + {0x537F, {0x362A, 0x0, 0x0, 0x524C, 0x0, 0x4C71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5396, {0x524D, 0x0, 0x4E52, 0x0, 0x387C, 0x0, 0x0, 0x0, 0x0, 0x3836, 0x524E, 0x0, 0x0, 0x0, 0x0, 0x5250, }}, + {0x53A6, {0x524F, 0x0, 0x3F5F, 0x3139, 0x0, 0x0, 0x0, 0x315E, 0x5251, 0x0, 0x5252, 0x0, 0x0, 0x3837, 0x0, 0x0, }}, + {0x53B6, {0x5253, 0x0, 0x0, 0x0, 0x0, 0x356E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B32, 0x5254, 0x0, 0x0, }}, + {0x53C8, {0x4B74, 0x3A35, 0x355A, 0x4D27, 0x4150, 0x483F, 0x3C7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D47, 0x0, 0x3C68, 0x3C75, }}, + {0x53D9, {0x3D76, 0x0, 0x4840, 0x0, 0x0, 0x0, 0x5257, 0x0, 0x3143, 0x4151, 0x387D, 0x3845, 0x3667, 0x0, 0x0, 0x525B, }}, + {0x53E9, {0x4321, 0x427E, 0x362B, 0x3E24, 0x525C, 0x525A, 0x3244, 0x4266, 0x3C38, 0x3B4B, 0x3126, 0x0, 0x0, 0x3370, 0x3966, 0x3B4A, }}, + {0x53FA, {0x525D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x525E, 0x0, 0x3549, 0x3346, 0x0, 0x0, 0x0, 0x3967, 0x3548, }}, + {0x540A, {0x445F, 0x3125, 0x4631, 0x4C3E, 0x3921, 0x4D79, 0x4547, 0x387E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x541B, {0x372F, 0x0, 0x5267, 0x0, 0x3663, 0x4B4A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x485D, 0x0, 0x0, 0x5266, 0x0, }}, + {0x542B, {0x345E, 0x5261, 0x5262, 0x5264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5265, 0x0, 0x355B, 0x3F61, 0x0, }}, + {0x543B, {0x4A2D, 0x5263, 0x525F, 0x3863, 0x0, 0x5260, 0x0, 0x4F24, 0x0, 0x0, 0x0, 0x4A72, 0x0, 0x4468, 0x3862, 0x3970, }}, + {0x544E, {0x5268, 0x0, 0x0, 0x465D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x545F, {0x526C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C7E, 0x0, 0x3C76, 0x0, 0x0, 0x0, 0x0, }}, + {0x5470, {0x526F, 0x526D, 0x0, 0x4C23, 0x0, 0x526A, 0x5273, 0x526E, 0x0, 0x0, 0x0, 0x5271, 0x3846, 0x4C3F, 0x0, 0x0, }}, + {0x5480, {0x5272, 0x0, 0x0, 0x0, 0x5274, 0x0, 0x5276, 0x0, 0x0, 0x0, 0x0, 0x3A70, 0x4F42, 0x0, 0x526B, 0x5269, }}, + {0x5490, {0x5275, 0x0, 0x5270, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x54A2, {0x5278, 0x0, 0x5323, 0x527A, 0x0, 0x0, 0x527E, 0x0, 0x0, 0x5321, 0x527B, 0x0, 0x0, 0x533E, 0x0, 0x0, }}, + {0x54B2, {0x3A69, 0x3331, 0x0, 0x0, 0x0, 0x0, 0x5279, 0x0, 0x0, 0x0, 0x5325, 0x3076, 0x5324, 0x0, 0x3025, 0x494A, }}, + {0x54C2, {0x5322, 0x0, 0x527C, 0x0, 0x0, 0x5277, 0x527D, 0x3A48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x54D8, {0x5326, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3077, 0x532F, 0x0, 0x0, 0x5327, 0x5328, 0x0, }}, + {0x54E8, {0x3E25, 0x4B69, 0x0, 0x0, 0x0, 0x532D, 0x532C, 0x0, 0x0, 0x0, 0x452F, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x54FA, {0x532E, 0x0, 0x0, 0x532B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3134, 0x0, 0x3A36, 0x3F30, 0x0, 0x0, }}, + {0x550F, {0x5329, 0x4562, 0x0, 0x0, 0x0, 0x532A, 0x0, 0x3022, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x552E, {0x5334, 0x4D23, 0x0, 0x3E27, 0x0, 0x533A, 0x0, 0x0, 0x0, 0x0, 0x5339, 0x5330, 0x0, 0x0, 0x0, 0x0, }}, + {0x553E, {0x4243, 0x0, 0x5331, 0x0, 0x0, 0x0, 0x426F, 0x5336, 0x3E26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5333, 0x0, }}, + {0x554F, {0x4C64, 0x0, 0x0, 0x0, 0x373C, 0x0, 0x0, 0x5337, 0x5338, 0x0, 0x0, 0x0, 0x0, 0x5335, 0x533B, 0x0, }}, + {0x5563, {0x5332, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x557B, {0x5341, 0x5346, 0x0, 0x5342, 0x0, 0x533D, 0x0, 0x0, 0x5347, 0x4131, 0x0, 0x0, 0x5349, 0x0, 0x3922, 0x533F, }}, + {0x558B, {0x437D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5343, 0x533C, 0x342D, }}, + {0x559C, {0x346E, 0x3365, 0x5344, 0x5340, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3776, 0x534A, 0x5348, 0x4153, 0x354A, }}, + {0x55AC, {0x362C, 0x0, 0x5345, 0x0, 0x3674, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3144, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x55C4, {0x534E, 0x534C, 0x0, 0x5427, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x55D4, {0x5351, 0x0, 0x0, 0x0, 0x0, 0x0, 0x534B, 0x0, 0x534F, 0x0, 0x0, 0x534D, 0x0, 0x0, 0x0, 0x3B4C, }}, + {0x55E4, {0x5350, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x55F7, {0x5353, 0x0, 0x5358, 0x0, 0x0, 0x0, 0x5356, 0x5355, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4332, }}, + {0x5609, {0x3245, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5352, 0x0, 0x5354, 0x3E28, 0x3133, }}, + {0x561B, {0x5357, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x325E, 0x0, }}, + {0x562F, {0x5362, 0x0, 0x3E7C, 0x535E, 0x0, 0x535C, 0x0, 0x535D, 0x0, 0x535F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5642, {0x313D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4139, 0x0, 0x5359, 0x0, 0x535A, 0x0, }}, + {0x565B, {0x337A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5361, 0x0, 0x0, 0x0, 0x346F, 0x0, 0x5364, }}, + {0x566B, {0x5360, 0x5363, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A2E, 0x0, 0x0, 0x0, 0x4655, 0x0, 0x4838, }}, + {0x5680, {0x5366, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5365, 0x3345, 0x0, 0x0, 0x5367, 0x0, 0x0, 0x0, 0x0, 0x536A, }}, + {0x5694, {0x5369, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5368, 0x0, 0x4739, 0x0, }}, + {0x56A5, {0x536B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x536C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x536E, }}, + {0x56B6, {0x536D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5370, 0x0, 0x0, 0x0, 0x5373, 0x5371, 0x536F, 0x5372, 0x0, 0x0, }}, + {0x56C8, {0x5374, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5375, 0x0, 0x0, 0x5376, 0x0, 0x5377, 0x0, 0x0, 0x0, 0x5378, }}, + {0x56D8, {0x5145, 0x0, 0x3C7C, 0x3B4D, 0x0, 0x0, 0x3273, 0x0, 0x3078, 0x0, 0x0, 0x4344, 0x0, 0x0, 0x0, 0x0, }}, + {0x56EE, {0x5379, 0x0, 0x3A24, 0x0, 0x304F, 0x3F5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x537A, 0x3847, 0x0, 0x0, 0x3971, }}, + {0x56FF, {0x537C, 0x537B, 0x0, 0x0, 0x4A60, 0x537D, 0x0, 0x0, 0x0, 0x5421, 0x537E, 0x0, 0x5422, 0x0, 0x5423, 0x0, }}, + {0x570F, {0x3777, 0x0, 0x0, 0x3160, 0x5424, 0x0, 0x0, 0x5426, 0x0, 0x5425, 0x0, 0x0, 0x0, 0x5428, 0x0, 0x0, }}, + {0x571F, {0x455A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5429, 0x3035, 0x3A5F, 0x0, 0x0, 0x0, 0x0, 0x373D, 0x0, }}, + {0x5730, {0x434F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x542A, 0x542B, 0x0, 0x0, 0x542D, 0x0, 0x0, 0x0, 0x0, }}, + {0x5740, {0x542E, 0x0, 0x3A64, 0x0, 0x0, 0x0, 0x0, 0x3651, 0x0, 0x0, 0x4B37, 0x0, 0x0, 0x0, 0x542C, 0x542F, }}, + {0x5750, {0x3A41, 0x3923, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5761, {0x5433, 0x0, 0x0, 0x3A25, 0x0, 0x4333, 0x0, 0x0, 0x5430, 0x445A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x577F, {0x5434, 0x0, 0x0, 0x3F62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5432, 0x5435, 0x0, 0x373F, 0x0, 0x0, 0x0, }}, + {0x5793, {0x5436, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5437, 0x0, 0x3924, }}, + {0x57A3, {0x3340, 0x5439, 0x0, 0x0, 0x0, 0x0, 0x0, 0x543A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x543B, 0x0, 0x0, }}, + {0x57B3, {0x5438, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5431, 0x0, 0x0, }}, + {0x57C3, {0x543C, 0x0, 0x0, 0x543D, 0x0, 0x0, 0x0, 0x0, 0x4B64, 0x0, 0x0, 0x3E6B, 0x0, 0x0, 0x0, 0x543F, }}, + {0x57D3, {0x5440, 0x543E, 0x0, 0x5442, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4738, 0x0, 0x0, 0x3068, 0x4956, 0x0, 0x0, }}, + {0x57E3, {0x5443, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x57F4, {0x3E7D, 0x0, 0x0, 0x3C39, 0x0, 0x475D, 0x3470, 0x0, 0x3A6B, 0x0, 0x0, 0x0, 0x4B59, 0x0, 0x4632, 0x0, }}, + {0x5805, {0x3778, 0x424F, 0x0, 0x0, 0x0, 0x5441, 0x5444, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5815, {0x4244, 0x0, 0x0, 0x0, 0x5445, 0x0, 0x0, 0x0, 0x5446, 0x0, 0x0, 0x0, 0x5448, 0x0, 0x0, 0x4469, }}, + {0x582A, {0x342E, 0x0, 0x0, 0x0, 0x0, 0x7421, 0x3161, 0x4A73, 0x0, 0x0, 0x3E6C, 0x4548, 0x0, 0x0, 0x0, 0x0, }}, + {0x583A, {0x3A66, 0x0, 0x0, 0x544E, 0x0, 0x0, 0x4A3D, 0x4E5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x584A, {0x3274, 0x544A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x413A, 0x544D, 0x0, 0x4563, 0x0, 0x0, 0x4549, 0x4564, 0x4839, }}, + {0x585A, {0x444D, 0x0, 0x0, 0x0, 0x3A49, 0x0, 0x0, 0x0, 0x5449, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3176, }}, + {0x586B, {0x4536, 0x0, 0x0, 0x0, 0x0, 0x544B, 0x0, 0x5447, 0x0, 0x0, 0x3F50, 0x0, 0x0, 0x0, 0x544F, 0x0, }}, + {0x587E, {0x3D4E, 0x0, 0x0, 0x0, 0x0, 0x362D, 0x0, 0x5450, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5893, {0x4A68, 0x0, 0x0, 0x0, 0x417D, 0x0, 0x0, 0x0, 0x0, 0x4446, 0x0, 0x0, 0x5452, 0x0, 0x0, 0x0, }}, + {0x58A8, {0x4B4F, 0x0, 0x0, 0x5453, 0x0, 0x0, 0x5458, 0x0, 0x0, 0x0, 0x0, 0x4A2F, 0x0, 0x0, 0x0, 0x0, }}, + {0x58B8, {0x5457, 0x5451, 0x5454, 0x5456, 0x0, 0x0, 0x3A26, 0x0, 0x0, 0x4A49, 0x0, 0x0, 0x0, 0x5459, 0x0, 0x4345, }}, + {0x58CA, {0x3275, 0x0, 0x3E6D, 0x0, 0x0, 0x0, 0x0, 0x545B, 0x0, 0x545A, 0x0, 0x3968, 0x0, 0x545C, 0x545E, 0x545D, }}, + {0x58DC, {0x5460, 0x0, 0x5455, 0x5462, 0x0, 0x0, 0x0, 0x0, 0x5461, 0x545F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B4E, }}, + {0x58EC, {0x3F51, 0x0, 0x4154, 0x5463, 0x403C, 0x306D, 0x4764, 0x0, 0x0, 0x0, 0x0, 0x445B, 0x0, 0x5465, 0x5464, 0x5466, }}, + {0x58FC, {0x5467, 0x5468, 0x0, 0x0, 0x0, 0x0, 0x5469, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A51, 0x546A, 0x0, }}, + {0x590F, {0x3246, 0x546B, 0x0, 0x0, 0x0, 0x0, 0x4D3C, 0x3330, 0x0, 0x5249, 0x3D48, 0x423F, 0x546C, 0x4C6B, 0x0, 0x0, }}, + {0x5922, {0x4C34, 0x0, 0x0, 0x546E, 0x0, 0x4267, 0x0, 0x4537, 0x4240, 0x4957, 0x546F, 0x5470, 0x317B, 0x0, 0x0, 0x3C3A, }}, + {0x5932, {0x5471, 0x0, 0x0, 0x0, 0x0, 0x3050, 0x5472, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5473, 0x0, 0x0, 0x0, }}, + {0x5944, {0x3162, 0x0, 0x0, 0x3471, 0x4660, 0x4A74, 0x0, 0x0, 0x0, 0x0, 0x5477, 0x4155, 0x5476, 0x3740, 0x0, 0x0, }}, + {0x5954, {0x4B5B, 0x5475, 0x0, 0x4565, 0x5479, 0x0, 0x5478, 0x0, 0x0, 0x0, 0x0, 0x0, 0x547B, 0x0, 0x547A, 0x0, }}, + {0x5965, {0x317C, 0x0, 0x547C, 0x3E29, 0x547E, 0x4325, 0x0, 0x547D, 0x0, 0x4A33, 0x0, 0x0, 0x0, 0x0, 0x3D77, 0x455B, }}, + {0x5978, {0x5521, 0x0, 0x0, 0x0, 0x0, 0x3925, 0x0, 0x0, 0x0, 0x5522, 0x4721, 0x485E, 0x4C51, 0x0, 0x0, 0x0, }}, + {0x598A, {0x4725, 0x0, 0x0, 0x552B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3538, 0x0, 0x0, 0x4D45, 0x0, 0x0, 0x4C2F, }}, + {0x599B, {0x562C, 0x0, 0x5523, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5526, 0x0, 0x4245, 0x0, 0x0, 0x4B38, 0x0, 0x0, }}, + {0x59AC, {0x454A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5527, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B65, 0x0, 0x3A4A, }}, + {0x59BE, {0x3E2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5528, 0x0, 0x0, 0x3B50, 0x0, 0x3B4F, 0x0, 0x0, }}, + {0x59D0, {0x3039, 0x3848, 0x0, 0x402B, 0x3051, 0x0, 0x0, 0x0, 0x0, 0x552C, 0x552D, 0x0, 0x552A, 0x0, 0x0, 0x0, }}, + {0x59E5, {0x3138, 0x342F, 0x0, 0x5529, 0x0, 0x4C45, 0x4931, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x59F6, {0x3028, 0x0, 0x0, 0x0, 0x0, 0x3079, 0x0, 0x0, 0x0, 0x3B51, 0x0, 0x3052, 0x0, 0x3023, 0x0, 0x0, }}, + {0x5A09, {0x5532, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5530, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C3C, }}, + {0x5A1A, {0x5533, 0x0, 0x5531, 0x0, 0x0, 0x552F, 0x3F31, 0x0, 0x0, 0x0, 0x0, 0x552E, 0x0, 0x0, 0x0, 0x4A5A, }}, + {0x5A2F, {0x3864, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5537, 0x5538, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E2B, 0x0, 0x0, }}, + {0x5A40, {0x5534, 0x4F2C, 0x0, 0x0, 0x0, 0x0, 0x474C, 0x0, 0x0, 0x5536, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5A5A, {0x3A27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5539, 0x0, 0x0, 0x0, 0x4958, 0x0, 0x0, 0x0, }}, + {0x5A6A, {0x553A, 0x0, 0x5535, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5A7F, {0x4C3B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5A92, {0x475E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x553B, 0x4932, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5ABC, {0x553C, 0x5540, 0x553D, 0x0, 0x0, 0x3247, 0x553F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C3B, 0x0, 0x553E, }}, + {0x5ACC, {0x3779, 0x0, 0x0, 0x0, 0x554C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5545, 0x5542, 0x0, 0x0, 0x0, 0x0, }}, + {0x5AE1, {0x4364, 0x0, 0x5541, 0x0, 0x0, 0x5543, 0x0, 0x0, 0x5544, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5AFA, {0x5546, 0x5547, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3472, }}, + {0x5B0B, {0x5549, 0x5548, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x554A, 0x0, 0x0, 0x0, 0x0, }}, + {0x5B22, {0x3E6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x554D, 0x0, 0x445C, 0x0, 0x0, 0x0, 0x3145, 0x0, }}, + {0x5B32, {0x554B, 0x0, 0x0, 0x0, 0x554E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x554F, 0x0, 0x5552, 0x0, }}, + {0x5B43, {0x5550, 0x0, 0x5551, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B52, 0x5553, 0x0, }}, + {0x5B54, {0x3926, 0x5554, 0x0, 0x3B7A, 0x4238, 0x0, 0x5555, 0x5556, 0x3B5A, 0x3927, 0x0, 0x4C52, 0x0, 0x0, 0x0, 0x3528, }}, + {0x5B64, {0x3849, 0x5557, 0x3358, 0x0, 0x0, 0x5558, 0x0, 0x4239, 0x0, 0x0, 0x0, 0x0, 0x5559, 0x5623, 0x0, 0x555A, }}, + {0x5B75, {0x555B, 0x0, 0x0, 0x555C, 0x0, 0x555E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x555F, 0x0, 0x0, 0x5560, 0x0, }}, + {0x5B85, {0x4270, 0x0, 0x3127, 0x3C69, 0x3042, 0x0, 0x4157, 0x3430, 0x3C35, 0x0, 0x3928, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5B95, {0x4566, 0x0, 0x3D21, 0x3431, 0x4368, 0x446A, 0x3038, 0x3539, 0x4A75, 0x0, 0x3C42, 0x0, 0x0, 0x3552, 0x406B, 0x3C3C, }}, + {0x5BA5, {0x4D28, 0x5561, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x355C, 0x0, 0x3A4B, 0x0, 0x0, 0x3332, 0x3163, }}, + {0x5BB5, {0x3E2C, 0x3248, 0x0, 0x5562, 0x4D46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D49, 0x0, 0x0, 0x3C64, 0x5563, 0x3473, }}, + {0x5BC5, {0x4652, 0x4C29, 0x5564, 0x0, 0x5565, 0x0, 0x0, 0x4959, 0x0, 0x0, 0x0, 0x5567, 0x0, 0x3428, 0x3677, 0x5566, }}, + {0x5BDB, {0x3432, 0x0, 0x3F32, 0x556B, 0x3B21, 0x0, 0x3249, 0x556A, 0x0, 0x5568, 0x556C, 0x5569, 0x472B, 0x5C4D, 0x3F33, 0x0, }}, + {0x5BEB, {0x556D, 0x0, 0x0, 0x4E40, 0x0, 0x556E, 0x0, 0x0, 0x5570, 0x0, 0x437E, 0x556F, 0x0, 0x4023, 0x0, 0x3B7B, }}, + {0x5BFE, {0x4250, 0x3C77, 0x0, 0x4975, 0x406C, 0x0, 0x3C4D, 0x5571, 0x3E2D, 0x5572, 0x5573, 0x3053, 0x423A, 0x3F52, 0x0, 0x5574, }}, + {0x5C0E, {0x4633, 0x3E2E, 0x0, 0x3E2F, 0x0, 0x5575, 0x0, 0x0, 0x406D, 0x0, 0x0, 0x0, 0x3E30, 0x0, 0x0, 0x0, }}, + {0x5C20, {0x5576, 0x0, 0x5577, 0x0, 0x4C60, 0x0, 0x0, 0x0, 0x5578, 0x0, 0x0, 0x0, 0x0, 0x3646, 0x0, 0x0, }}, + {0x5C31, {0x3D22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5579, 0x557A, 0x3C5C, 0x3F2C, 0x4674, 0x3F54, 0x4878, 0x4722, 0x3649, }}, + {0x5C41, {0x557B, 0x0, 0x0, 0x0, 0x356F, 0x557C, 0x0, 0x367E, 0x0, 0x464F, 0x3230, 0x0, 0x3B53, 0x557D, 0x5622, 0x5621, }}, + {0x5C51, {0x367D, 0x0, 0x557E, 0x0, 0x4538, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4230, 0x0, 0x454B, }}, + {0x5C61, {0x3C48, 0x0, 0x0, 0x4158, 0x4D7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5624, 0x0, 0x5625, 0x4656, 0x0, }}, + {0x5C71, {0x3B33, 0x0, 0x0, 0x0, 0x0, 0x5627, 0x0, 0x0, 0x5628, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5C8C, {0x5629, 0x0, 0x0, 0x0, 0x3474, 0x562A, 0x0, 0x0, 0x562B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5CA1, {0x322C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x413B, 0x3464, 0x0, 0x562D, 0x4C28, 0x0, 0x0, 0x0, 0x0, }}, + {0x5CB1, {0x4252, 0x0, 0x3359, 0x0, 0x0, 0x562F, 0x5631, 0x345F, 0x0, 0x0, 0x562E, 0x5630, 0x0, 0x5633, 0x0, 0x0, }}, + {0x5CC5, {0x5632, 0x0, 0x5634, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5CD9, {0x5635, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x463D, 0x362E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3265, }}, + {0x5CE9, {0x5636, 0x563B, 0x0, 0x0, 0x5639, 0x0, 0x4A77, 0x4A76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4567, 0x0, 0x0, }}, + {0x5CFA, {0x5638, 0x3D54, 0x0, 0x5637, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F72, 0x0, 0x0, }}, + {0x5D0B, {0x563C, 0x0, 0x0, 0x3A6A, 0x0, 0x0, 0x5642, 0x0, 0x0, 0x5643, 0x563D, 0x3333, 0x563E, 0x5647, 0x5646, 0x5645, }}, + {0x5D1B, {0x5641, 0x0, 0x0, 0x0, 0x5640, 0x0, 0x0, 0x5644, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A78, 0x0, }}, + {0x5D4B, {0x564B, 0x5648, 0x0, 0x564A, 0x0, 0x4D72, 0x0, 0x5649, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5D5C, {0x563F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F73, 0x0, 0x0, }}, + {0x5D6C, {0x564C, 0x0, 0x0, 0x3A37, 0x0, 0x0, 0x0, 0x564D, 0x0, 0x0, 0x564E, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5D82, {0x5651, 0x0, 0x5650, 0x0, 0x0, 0x564F, 0x0, 0x0, 0x0, 0x4568, 0x563A, 0x0, 0x0, 0x0, 0x5657, 0x0, }}, + {0x5D9D, {0x5653, 0x0, 0x0, 0x0, 0x0, 0x5652, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5654, }}, + {0x5DAE, {0x5655, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5658, 0x0, 0x0, 0x4E66, 0x0, 0x5659, 0x5656, }}, + {0x5DC9, {0x565A, 0x0, 0x0, 0x3460, 0x565B, 0x0, 0x0, 0x0, 0x0, 0x565D, 0x565C, 0x0, 0x0, 0x565E, 0x0, 0x0, }}, + {0x5DDB, {0x565F, 0x0, 0x406E, 0x3D23, 0x0, 0x0, 0x3D64, 0x0, 0x4163, 0x0, 0x3929, 0x3A38, 0x392A, 0x3570, 0x0, 0x0, }}, + {0x5DEB, {0x5660, 0x0, 0x0, 0x3A39, 0x0, 0x0, 0x384A, 0x5661, 0x4C26, 0x4743, 0x5662, 0x0, 0x392B, 0x0, 0x0, 0x0, }}, + {0x5DFB, {0x342C, 0x0, 0x4327, 0x3652, 0x0, 0x0, 0x0, 0x3B54, 0x495B, 0x0, 0x0, 0x4841, 0x0, 0x0, 0x0, 0x0, }}, + {0x5E0B, {0x5663, 0x3475, 0x0, 0x0, 0x0, 0x0, 0x5666, 0x0, 0x0, 0x0, 0x0, 0x4421, 0x0, 0x0, 0x5665, 0x5664, }}, + {0x5E1B, {0x5667, 0x0, 0x446B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F63, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5E2B, {0x3B55, 0x0, 0x404A, 0x0, 0x4253, 0x3522, 0x0, 0x0, 0x4422, 0x0, 0x0, 0x5668, 0x5669, 0x3E6F, 0x0, 0x0, }}, + {0x5E3D, {0x4B39, 0x0, 0x0, 0x566C, 0x0, 0x0, 0x566B, 0x566A, 0x497D, 0x0, 0x5673, 0x0, 0x0, 0x0, 0x0, 0x4B5A, }}, + {0x5E4E, {0x566D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x566F, 0x4B6B, 0x0, 0x566E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5E5F, {0x5670, 0x0, 0x4828, 0x5671, 0x4A3E, 0x5672, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5E72, {0x3433, 0x4A3F, 0x472F, 0x5674, 0x5675, 0x0, 0x392C, 0x3434, 0x5676, 0x3838, 0x4D44, 0x4D29, 0x3476, 0x5678, 0x0, 0x4423, }}, + {0x5E83, {0x392D, 0x3E31, 0x0, 0x0, 0x485F, 0x0, 0x0, 0x3E32, 0x0, 0x0, 0x0, 0x0, 0x3D78, 0x0, 0x0, 0x0, }}, + {0x5E95, {0x446C, 0x4A79, 0x4539, 0x0, 0x0, 0x392E, 0x0, 0x495C, 0x0, 0x0, 0x0, 0x5679, 0x0, 0x0, 0x0, 0x0, }}, + {0x5EA6, {0x4559, 0x3A42, 0x0, 0x0, 0x0, 0x384B, 0x0, 0x446D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3043, }}, + {0x5EB6, {0x3D6E, 0x392F, 0x4D47, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x567A, 0x567B, 0x4751, 0x0, 0x0, }}, + {0x5EC8, {0x567C, 0x4E77, 0x4F2D, 0x0, 0x0, 0x0, 0x0, 0x567E, 0x567D, 0x0, 0x0, 0x3347, 0x0, 0x0, 0x5721, 0x0, }}, + {0x5EDA, {0x5724, 0x5725, 0x0, 0x5723, 0x0, 0x4940, 0x3E33, 0x5727, 0x5726, 0x5722, 0x0, 0x0, 0x0, 0x0, 0x5728, 0x5729, }}, + {0x5EEC, {0x572A, 0x0, 0x0, 0x0, 0x572D, 0x572B, 0x0, 0x572C, 0x572E, 0x0, 0x3164, 0x446E, 0x572F, 0x0, 0x377A, 0x3276, }}, + {0x5EFC, {0x4736, 0x0, 0x5730, 0x467B, 0x0, 0x4A5B, 0x0, 0x5731, 0x4F2E, 0x0, 0x0, 0x0, 0x0, 0x5732, 0x4A40, 0x5735, }}, + {0x5F0C, {0x5021, 0x5031, 0x0, 0x3C30, 0x4675, 0x5736, 0x0, 0x355D, 0x4424, 0x307A, 0x5737, 0x4A26, 0x3930, 0x0, 0x0, 0x4350, }}, + {0x5F1F, {0x446F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C6F, 0x3839, 0x384C, 0x0, 0x5738, 0x0, 0x0, 0x0, 0x5739, 0x0, }}, + {0x5F2F, {0x573F, 0x0, 0x3C65, 0x0, 0x0, 0x0, 0x4425, 0x0, 0x362F, 0x573A, 0x0, 0x0, 0x0, 0x492B, 0x0, 0x4346, }}, + {0x5F41, {0x573B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x573C, 0x0, 0x3630, 0x0, 0x573D, 0x0, 0x573E, 0x0, 0x0, }}, + {0x5F51, {0x5740, 0x0, 0x4576, 0x0, 0x0, 0x5741, 0x5742, 0x0, 0x5743, 0x0, 0x0, 0x5734, 0x5733, 0x0, 0x0, 0x0, }}, + {0x5F61, {0x5744, 0x3741, 0x0, 0x0, 0x0, 0x4927, 0x0, 0x0, 0x3A4C, 0x4937, 0x4426, 0x494B, 0x5745, 0x0, 0x0, 0x3E34, }}, + {0x5F71, {0x3146, 0x0, 0x5746, 0x0, 0x0, 0x0, 0x5747, 0x0, 0x4C72, 0x0, 0x0, 0x4860, 0x0, 0x0, 0x574A, 0x317D, }}, + {0x5F81, {0x402C, 0x5749, 0x5748, 0x3742, 0x4254, 0x0, 0x574E, 0x574C, 0x0, 0x574B, 0x4E27, 0x3865, 0x0, 0x0, 0x0, 0x3D79, }}, + {0x5F91, {0x574D, 0x454C, 0x3D3E, 0x0, 0x0, 0x0, 0x4640, 0x5751, 0x5750, 0x0, 0x0, 0x0, 0x0, 0x574F, 0x0, 0x5752, }}, + {0x5FA1, {0x3866, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5753, 0x497C, 0x3D5B, 0x0, 0x0, 0x5754, 0x4879, 0x0, 0x0, }}, + {0x5FB3, {0x4641, 0x4427, 0x0, 0x0, 0x0, 0x0, 0x4530, 0x0, 0x0, 0x5755, 0x352B, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5FC3, {0x3F34, 0x0, 0x492C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3477, 0x4726, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5FD6, {0x5756, 0x3B56, 0x4B3A, 0x4B3B, 0x0, 0x0, 0x317E, 0x575B, 0x0, 0x0, 0x4369, 0x0, 0x0, 0x0, 0x5758, 0x0, }}, + {0x5FEB, {0x3277, 0x0, 0x0, 0x0, 0x0, 0x582D, 0x575A, 0x0, 0x0, 0x0, 0x4730, 0x0, 0x0, 0x5759, 0x0, 0x0, }}, + {0x5FFB, {0x5757, 0x0, 0x397A, 0x0, 0x575D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x600E, {0x5763, 0x5769, 0x5761, 0x0, 0x455C, 0x0, 0x0, 0x5766, 0x495D, 0x0, 0x0, 0x5760, 0x0, 0x5765, 0x4E67, 0x3B57, }}, + {0x6020, {0x4255, 0x575E, 0x0, 0x0, 0x0, 0x355E, 0x5768, 0x402D, 0x3165, 0x5762, 0x3278, 0x5767, 0x0, 0x0, 0x0, 0x3631, }}, + {0x6031, {0x5764, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x576A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6041, {0x576C, 0x5776, 0x5774, 0x0, 0x0, 0x5771, 0x0, 0x0, 0x0, 0x5770, 0x4E78, 0x0, 0x5772, 0x0, 0x0, 0x3632, }}, + {0x6052, {0x3931, 0x0, 0x0, 0x3D7A, 0x0, 0x0, 0x0, 0x5779, 0x576B, 0x0, 0x0, 0x0, 0x0, 0x576F, 0x575F, 0x0, }}, + {0x6062, {0x327A, 0x5773, 0x5775, 0x4351, 0x0, 0x0, 0x3A28, 0x3238, 0x576D, 0x5778, 0x5777, 0x3633, 0x0, 0x4229, 0x3366, 0x0, }}, + {0x6075, {0x3743, 0x0, 0x576E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x577A, 0x0, 0x577D, 0x5821, }}, + {0x6089, {0x3C3D, 0x0, 0x5827, 0x4470, 0x577B, 0x0, 0x0, 0x0, 0x0, 0x5825, 0x0, 0x3279, 0x0, 0x5823, 0x5824, 0x0, }}, + {0x609A, {0x577E, 0x5822, 0x0, 0x0, 0x0, 0x3867, 0x4D2A, 0x0, 0x0, 0x3435, 0x0, 0x0, 0x3159, 0x5826, 0x0, 0x473A, }}, + {0x60AA, {0x302D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4861, 0x575C, 0x582C, 0x5830, 0x4C65, 0x0, 0x5829, 0x0, }}, + {0x60BC, {0x4569, 0x582E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E70, 0x582F, 0x4657, 0x0, 0x0, 0x0, 0x0, }}, + {0x60D1, {0x4F47, 0x0, 0x582B, 0x0, 0x0, 0x0, 0x0, 0x5831, 0x0, 0x397B, 0x0, 0x404B, 0x0, 0x0, 0x3054, 0x582A, }}, + {0x60E1, {0x5828, 0x0, 0x415A, 0x0, 0x0, 0x0, 0x577C, 0x3B34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4246, }}, + {0x60F1, {0x583D, 0x0, 0x415B, 0x5838, 0x0, 0x5835, 0x5836, 0x0, 0x3C66, 0x5839, 0x583C, 0x0, 0x0, 0x0, 0x0, 0x5837, }}, + {0x6101, {0x3D25, 0x0, 0x583A, 0x0, 0x0, 0x5834, 0x0, 0x4C7C, 0x4C7B, 0x0, 0x0, 0x0, 0x583E, 0x583F, 0x3055, 0x0, }}, + {0x6115, {0x5833, 0x0, 0x0, 0x0, 0x0, 0x3672, 0x3026, 0x0, 0x0, 0x0, 0x3436, 0x0, 0x583B, 0x0, 0x0, 0x0, }}, + {0x6127, {0x5843, 0x5842, 0x0, 0x0, 0x0, 0x5847, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5848, 0x0, 0x0, }}, + {0x613C, {0x5846, 0x5849, 0x5841, 0x5845, 0x0, 0x0, 0x584A, 0x0, 0x584B, 0x0, 0x0, 0x5840, 0x3B7C, 0x0, 0x5844, 0x4256, }}, + {0x614C, {0x3932, 0x5832, 0x3F35, 0x0, 0x0, 0x0, 0x0, 0x5858, 0x0, 0x4A69, 0x0, 0x0, 0x584E, 0x584F, 0x5850, 0x0, }}, + {0x615D, {0x5857, 0x0, 0x5856, 0x0, 0x0, 0x4B7D, 0x3437, 0x0, 0x5854, 0x0, 0x3745, 0x3334, 0x0, 0x0, 0x5851, 0x0, }}, + {0x616E, {0x4E38, 0x5853, 0x3056, 0x5855, 0x0, 0x584C, 0x5852, 0x5859, 0x3744, 0x584D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x617E, {0x4D5D, 0x0, 0x0, 0x0, 0x4D2B, 0x0, 0x0, 0x0, 0x0, 0x585C, 0x0, 0x0, 0x5860, 0x0, 0x0, 0x0, }}, + {0x618E, {0x417E, 0x0, 0x4E79, 0x5861, 0x0, 0x0, 0x585E, 0x0, 0x585B, 0x0, 0x0, 0x585A, 0x585F, 0x0, 0x0, 0x0, }}, + {0x61A4, {0x4A30, 0x0, 0x0, 0x4634, 0x0, 0x3746, 0x0, 0x5862, 0x585D, 0x0, 0x5863, 0x0, 0x0, 0x0, 0x377B, 0x0, }}, + {0x61B6, {0x3231, 0x0, 0x0, 0x0, 0x586B, 0x0, 0x0, 0x0, 0x3438, 0x0, 0x0, 0x0, 0x0, 0x5869, 0x0, 0x0, }}, + {0x61C6, {0x586A, 0x3A29, 0x5868, 0x5866, 0x5865, 0x586C, 0x5864, 0x586E, 0x0, 0x0, 0x327B, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x61E3, {0x5870, 0x0, 0x0, 0x586F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4428, }}, + {0x61F4, {0x5873, 0x0, 0x5871, 0x5867, 0x377C, 0x0, 0x5872, 0x0, 0x5876, 0x5875, 0x5877, 0x5874, 0x5878, 0x0, 0x0, 0x0, }}, + {0x6208, {0x5879, 0x587A, 0x4A6A, 0x0, 0x587C, 0x587B, 0x3D3F, 0x0, 0x402E, 0x3266, 0x327C, 0x0, 0x587D, 0x0, 0x303F, 0x0, }}, + {0x621A, {0x404C, 0x587E, 0x0, 0x6C43, 0x5921, 0x3761, 0x0, 0x5922, 0x0, 0x0, 0x0, 0x0, 0x406F, 0x0, 0x0, 0x0, }}, + {0x622A, {0x5923, 0x0, 0x0, 0x0, 0x5924, 0x353A, 0x5925, 0x0, 0x5926, 0x5927, 0x4257, 0x0, 0x0, 0x0, 0x384D, 0x0, }}, + {0x623B, {0x4C61, 0x0, 0x0, 0x0, 0x4B3C, 0x3D6A, 0x5928, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4070, 0x6E3D, 0x4862, 0x0, }}, + {0x624B, {0x3C6A, 0x0, 0x3A4D, 0x5929, 0x0, 0x0, 0x0, 0x0, 0x4247, 0x0, 0x4A27, 0x0, 0x0, 0x4271, 0x0, 0x0, }}, + {0x625B, {0x592C, 0x0, 0x0, 0x592A, 0x0, 0x592D, 0x0, 0x0, 0x592B, 0x0, 0x0, 0x0, 0x0, 0x592E, 0x0, 0x0, }}, + {0x626E, {0x4A31, 0x0, 0x0, 0x3037, 0x0, 0x0, 0x0, 0x0, 0x495E, 0x0, 0x0, 0x4863, 0x0, 0x0, 0x592F, 0x0, }}, + {0x627E, {0x5932, 0x3E35, 0x353B, 0x0, 0x5930, 0x5937, 0x3E36, 0x0, 0x0, 0x0, 0x0, 0x5931, 0x4744, 0x0, 0x0, 0x0, }}, + {0x6291, {0x4D5E, 0x5933, 0x5934, 0x5938, 0x456A, 0x5935, 0x3933, 0x405E, 0x0, 0x0, 0x5946, 0x4834, 0x0, 0x4272, 0x0, 0x0, }}, + {0x62AB, {0x4864, 0x5A2D, 0x0, 0x0, 0x0, 0x0, 0x4A7A, 0x0, 0x0, 0x0, 0x4471, 0x0, 0x0, 0x0, 0x4B75, 0x0, }}, + {0x62BB, {0x593B, 0x3221, 0x436A, 0x0, 0x0, 0x0, 0x0, 0x5944, 0x0, 0x0, 0x4334, 0x593E, 0x5945, 0x5940, 0x5947, 0x5943, }}, + {0x62CC, {0x5942, 0x476F, 0x0, 0x593C, 0x327D, 0x593A, 0x3571, 0x4273, 0x5936, 0x0, 0x0, 0x5939, 0x3934, 0x405B, 0x0, 0x3E37, }}, + {0x62DC, {0x5941, 0x4752, 0x0, 0x0, 0x3572, 0x3348, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x62EC, {0x3367, 0x3F21, 0x5949, 0x594E, 0x0, 0x594A, 0x0, 0x377D, 0x0, 0x594F, 0x3B22, 0x3969, 0x0, 0x0, 0x0, 0x0, }}, + {0x62FE, {0x3D26, 0x593D, 0x0, 0x3B7D, 0x594C, 0x0, 0x0, 0x0, 0x0, 0x3B58, 0x594D, 0x3044, 0x0, 0x0, 0x5948, 0x0, }}, + {0x6311, {0x4429, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3573, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3634, 0x0, }}, + {0x6327, {0x594B, 0x3027, 0x0, 0x0, 0x3A43, 0x0, 0x0, 0x0, 0x3F36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x633A, {0x4472, 0x0, 0x0, 0x4854, 0x5951, 0x415E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x422A, }}, + {0x634C, {0x3B2B, 0x5952, 0x0, 0x5954, 0x5950, 0x0, 0x0, 0x0, 0x0, 0x4A61, 0x0, 0x443D, 0x0, 0x0, 0x0, 0x0, }}, + {0x635C, {0x415C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A7B, 0x3C4E, 0x5960, 0x0, 0x595F, }}, + {0x636E, {0x3F78, 0x0, 0x0, 0x0, 0x377E, 0x0, 0x0, 0x0, 0x5959, 0x3E39, 0x0, 0x0, 0x4668, 0x4731, 0x0, 0x0, }}, + {0x6380, {0x5957, 0x0, 0x0, 0x415D, 0x0, 0x0, 0x0, 0x0, 0x3C78, 0x595C, 0x0, 0x0, 0x3E38, 0x0, 0x5956, 0x595B, }}, + {0x6392, {0x4753, 0x0, 0x0, 0x0, 0x5955, 0x0, 0x3721, 0x0, 0x0, 0x335D, 0x0, 0x0, 0x0, 0x595D, 0x4E2B, 0x3A4E, }}, + {0x63A2, {0x4335, 0x595A, 0x0, 0x405C, 0x0, 0x3935, 0x3F64, 0x3166, 0x413C, 0x5958, 0x3545, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x63B2, {0x3747, 0x0, 0x444F, 0x595E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x415F, 0x0, 0x0, 0x5961, 0x0, 0x5963, 0x0, }}, + {0x63C3, {0x4237, 0x5969, 0x0, 0x5964, 0x0, 0x0, 0x5966, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4941, 0x4473, 0x0, 0x5967, }}, + {0x63D6, {0x4D2C, 0x0, 0x0, 0x0, 0x4D48, 0x3439, 0x0, 0x0, 0x0, 0x0, 0x0, 0x302E, 0x0, 0x5965, 0x0, 0x0, }}, + {0x63E9, {0x5962, 0x0, 0x0, 0x0, 0x0, 0x3478, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3167, 0x0, 0x5968, 0x0, 0x0, }}, + {0x63FA, {0x4D49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x596C, 0x0, 0x0, 0x0, }}, + {0x640D, {0x423B, 0x0, 0x5973, 0x0, 0x0, 0x0, 0x596D, 0x0, 0x0, 0x596A, 0x5971, 0x0, 0x0, 0x0, 0x0, 0x5953, }}, + {0x6426, {0x596E, 0x0, 0x5972, 0x0, 0x0, 0x0, 0x4842, 0x456B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x596B, 0x0, }}, + {0x6436, {0x596F, 0x0, 0x0, 0x0, 0x3748, 0x0, 0x0, 0x0, 0x3A71, 0x0, 0x0, 0x0, 0x405D, 0x0, 0x0, 0x0, }}, + {0x644E, {0x5977, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4526, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6467, {0x5974, 0x0, 0x4B60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5975, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5976, }}, + {0x6478, {0x4C4E, 0x0, 0x4022, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3762, 0x0, 0x0, 0x0, 0x0, }}, + {0x6488, {0x597D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B35, 0x597A, 0x0, 0x5979, 0x0, 0x0, }}, + {0x649A, {0x4732, 0x0, 0x0, 0x0, 0x4635, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4531, 0x597B, 0x0, 0x0, 0x0, 0x597C, }}, + {0x64AB, {0x496F, 0x0, 0x4745, 0x3B23, 0x0, 0x4071, 0x0, 0x4B50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3349, 0x0, }}, + {0x64BB, {0x5A25, 0x597E, 0x0, 0x0, 0x0, 0x0, 0x4D4A, 0x5A27, 0x0, 0x0, 0x5A23, 0x0, 0x5A24, 0x0, 0x0, 0x0, }}, + {0x64CD, {0x4160, 0x0, 0x0, 0x0, 0x0, 0x5A22, 0x0, 0x593F, 0x0, 0x0, 0x0, 0x5A26, 0x0, 0x5A21, 0x0, 0x0, }}, + {0x64E0, {0x5A2B, 0x5A2C, 0x4527, 0x5A2E, 0x0, 0x0, 0x3B24, 0x5A29, 0x0, 0x0, 0x0, 0x0, 0x353C, 0x0, 0x0, 0x5A2F, }}, + {0x64F1, {0x5A28, 0x5A33, 0x0, 0x5A32, 0x0, 0x5A31, 0x0, 0x0, 0x0, 0x5A34, 0x0, 0x0, 0x5A36, 0x3E71, 0x0, 0x5A35, }}, + {0x6505, {0x5A39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6518, {0x5A37, 0x0, 0x0, 0x0, 0x5A38, 0x5970, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5A3B, 0x5A3A, 0x0, 0x0, 0x0, }}, + {0x652A, {0x5978, 0x5A3C, 0x5A30, 0x0, 0x0, 0x3B59, 0x0, 0x0, 0x0, 0x0, 0x5A3D, 0x5A3E, 0x5A40, 0x5A3F, 0x5A41, 0x327E, }}, + {0x653B, {0x3936, 0x0, 0x0, 0x4A7C, 0x402F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x384E, 0x0, 0x0, 0x5A43, 0x0, 0x0, }}, + {0x654D, {0x5A46, 0x0, 0x4952, 0x0, 0x355F, 0x0, 0x0, 0x0, 0x5A45, 0x5A44, 0x4754, 0x5A47, 0x3635, 0x0, 0x0, 0x0, }}, + {0x655D, {0x5A49, 0x5A48, 0x0, 0x0, 0x0, 0x343A, 0x3B36, 0x0, 0x0, 0x4658, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3749, }}, + {0x6570, {0x3F74, 0x0, 0x5A4A, 0x0, 0x4030, 0x4528, 0x0, 0x495F, 0x5A4B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6582, {0x5A4C, 0x5A4D, 0x0, 0x0, 0x0, 0x4A38, 0x555D, 0x4046, 0x0, 0x0, 0x494C, 0x0, 0x3A58, 0x0, 0x4865, 0x4843, }}, + {0x6597, {0x454D, 0x0, 0x4E41, 0x0, 0x5A4F, 0x3C50, 0x0, 0x0, 0x5A50, 0x0, 0x3036, 0x0, 0x0, 0x3654, 0x404D, 0x0, }}, + {0x65A7, {0x4960, 0x0, 0x0, 0x0, 0x5A51, 0x3B42, 0x4347, 0x0, 0x3B5B, 0x3F37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x65B7, {0x5A52, 0x0, 0x4A7D, 0x0, 0x0, 0x3177, 0x3B5C, 0x0, 0x0, 0x0, 0x5A55, 0x0, 0x5A53, 0x5A56, 0x4E39, 0x5A54, }}, + {0x65CB, {0x407B, 0x5A57, 0x0, 0x0, 0x4232, 0x0, 0x0, 0x5A58, 0x0, 0x0, 0x0, 0x0, 0x347A, 0x0, 0x5A5A, 0x0, }}, + {0x65DB, {0x5A59, 0x0, 0x0, 0x0, 0x0, 0x5A5B, 0x5A5C, 0x347B, 0x0, 0x0, 0x467C, 0x4336, 0x356C, 0x3B5D, 0x4161, 0x0, }}, + {0x65EC, {0x3D5C, 0x3030, 0x0, 0x0, 0x0, 0x5A5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3222, 0x5A61, }}, + {0x6602, {0x3937, 0x5A60, 0x0, 0x0, 0x3A2B, 0x3E3A, 0x0, 0x0, 0x5A5F, 0x0, 0x3E3B, 0x0, 0x4C40, 0x3A2A, 0x0, 0x0, }}, + {0x6613, {0x3057, 0x404E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5A66, 0x0, 0x0, 0x4031, 0x3147, 0x0, 0x0, }}, + {0x6625, {0x3D55, 0x0, 0x4B66, 0x3A72, 0x0, 0x0, 0x0, 0x0, 0x3E3C, 0x0, 0x4027, 0x0, 0x0, 0x0, 0x0, 0x5A65, }}, + {0x6635, {0x5A63, 0x5A64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x436B, 0x0, 0x0, 0x5B26, 0x0, 0x5A6A, 0x3B7E, 0x3938, 0x5A68, }}, + {0x6649, {0x5A69, 0x0, 0x3F38, 0x0, 0x0, 0x0, 0x5A67, 0x0, 0x0, 0x3B2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x665D, {0x5A6C, 0x5A6B, 0x5A70, 0x0, 0x0, 0x5A71, 0x0, 0x5A6D, 0x0, 0x3322, 0x5A6E, 0x5A6F, 0x4855, 0x0, 0x0, 0x0, }}, + {0x666E, {0x4961, 0x374A, 0x5A72, 0x0, 0x0, 0x0, 0x4032, 0x0, 0x3E3D, 0x0, 0x0, 0x0, 0x4352, 0x0, 0x0, 0x0, }}, + {0x6681, {0x3647, 0x0, 0x5A73, 0x5A77, 0x0, 0x0, 0x324B, 0x5A74, 0x5A76, 0x0, 0x0, 0x0, 0x0, 0x5A75, 0x0, 0x0, }}, + {0x6691, {0x3D6B, 0x0, 0x0, 0x0, 0x0, 0x4348, 0x3045, 0x5A78, 0x0, 0x0, 0x0, 0x0, 0x5A79, 0x0, 0x0, 0x0, }}, + {0x66A2, {0x442A, 0x0, 0x0, 0x0, 0x4E71, 0x0, 0x0, 0x0, 0x0, 0x3B43, 0x0, 0x0, 0x4A6B, 0x0, 0x0, 0x0, }}, + {0x66B4, {0x4B3D, 0x0, 0x0, 0x0, 0x5B22, 0x5A7B, 0x0, 0x0, 0x5A7E, 0x0, 0x5A7D, 0x0, 0x0, 0x5A7A, 0x0, 0x0, }}, + {0x66C4, {0x5B21, 0x0, 0x0, 0x465E, 0x0, 0x5A7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x66D6, {0x5B23, 0x0, 0x0, 0x3D6C, 0x5B24, 0x0, 0x4D4B, 0x4778, 0x0, 0x0, 0x5B25, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x66E6, {0x5B27, 0x0, 0x0, 0x5B28, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B29, 0x0, 0x364A, 0x3148, 0x3939, 0x5B2A, }}, + {0x66F7, {0x5B2B, 0x3D71, 0x4162, 0x0, 0x0, 0x5258, 0x413E, 0x413D, 0x4258, 0x3A47, 0x0, 0x0, 0x5072, 0x0, 0x0, 0x0, }}, + {0x6708, {0x376E, 0x4D2D, 0x0, 0x4A7E, 0x0, 0x497E, 0x0, 0x5B2C, 0x0, 0x0, 0x0, 0x0, 0x3A73, 0x443F, 0x5B2D, 0x4F2F, }}, + {0x671B, {0x4B3E, 0x0, 0x442B, 0x5B2E, 0x347C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B2F, 0x5B30, 0x4C5A, 0x0, 0x4C24, }}, + {0x672B, {0x4B76, 0x4B5C, 0x3B25, 0x5B32, 0x0, 0x0, 0x3C6B, 0x0, 0x0, 0x4B51, 0x0, 0x5B34, 0x5B37, 0x5B36, 0x0, 0x3479, }}, + {0x673D, {0x3560, 0x0, 0x5B33, 0x0, 0x5B35, 0x0, 0x0, 0x0, 0x0, 0x5B38, 0x0, 0x0, 0x3F79, 0x0, 0x0, 0x0, }}, + {0x674E, {0x4D7B, 0x3049, 0x3A60, 0x423C, 0x0, 0x3C5D, 0x0, 0x0, 0x3E73, 0x0, 0x0, 0x5B3B, 0x0, 0x0, 0x454E, 0x0, }}, + {0x675E, {0x5B39, 0x422B, 0x5B3A, 0x3E72, 0x4C5D, 0x5B3C, 0x5B3D, 0x4D68, 0x0, 0x0, 0x0, 0x0, 0x5B42, 0x0, 0x0, 0x393A, }}, + {0x676F, {0x4755, 0x5B3F, 0x456C, 0x5A5E, 0x5A62, 0x0, 0x354F, 0x0, 0x4747, 0x0, 0x0, 0x0, 0x0, 0x5B41, 0x0, 0x3E3E, }}, + {0x677F, {0x4844, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B47, 0x0, 0x487A, 0x0, 0x5B3E, 0x0, 0x5B44, 0x5B43, 0x0, 0x0, }}, + {0x6790, {0x404F, 0x0, 0x0, 0x0, 0x0, 0x4B6D, 0x0, 0x4E53, 0x0, 0x0, 0x4B67, 0x0, 0x324C, 0x3B5E, 0x0, 0x0, }}, + {0x67A0, {0x4F48, 0x5B46, 0x3F75, 0x0, 0x0, 0x0, 0x5B45, 0x0, 0x0, 0x5B40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x384F, }}, + {0x67B3, {0x5B4C, 0x5B4A, 0x0, 0x324D, 0x5B48, 0x5B4E, 0x5B54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4248, 0x0, }}, + {0x67C4, {0x4A41, 0x0, 0x5B56, 0x0, 0x0, 0x0, 0x4922, 0x0, 0x0, 0x0, 0x5B55, 0x4770, 0x4B3F, 0x343B, 0x0, 0x4077, }}, + {0x67D4, {0x3D40, 0x0, 0x0, 0x0, 0x4453, 0x0, 0x4D2E, 0x0, 0x0, 0x5B51, 0x5B50, 0x0, 0x0, 0x0, 0x5B52, 0x0, }}, + {0x67E4, {0x5B4F, 0x0, 0x0, 0x5B57, 0x0, 0x5B4D, 0x0, 0x0, 0x5B4B, 0x0, 0x5B53, 0x5B49, 0x0, 0x436C, 0x0, 0x4C78, }}, + {0x67F4, {0x3C46, 0x3A74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3A3A, 0x0, 0x0, 0x4B6F, 0x3341, 0x0, 0x0, 0x444E, 0x464A, }}, + {0x6804, {0x3149, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4072, }}, + {0x6816, {0x4034, 0x372A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B59, 0x0, 0x0, 0x393B, 0x337C, 0x0, 0x0, 0x0, }}, + {0x6829, {0x5B5B, 0x3374, 0x5B61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B5E, 0x0, 0x4073, 0x0, 0x0, 0x0, 0x334B, }}, + {0x6839, {0x3A2C, 0x0, 0x0, 0x334A, 0x3A4F, 0x0, 0x0, 0x5B5C, 0x3765, 0x374B, 0x456D, 0x0, 0x0, 0x5B5A, 0x0, 0x3046, }}, + {0x684D, {0x5B5D, 0x5B5F, 0x0, 0x364D, 0x372C, 0x0, 0x343C, 0x354B, 0x0, 0x0, 0x0, 0x0, 0x5B62, 0x0, 0x0, 0x3A79, }}, + {0x685D, {0x4B71, 0x0, 0x3B37, 0x0, 0x0, 0x0, 0x5B63, 0x0, 0x0, 0x0, 0x4930, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6874, {0x5B6F, 0x0, 0x3233, 0x5B64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B75, 0x5B65, 0x0, 0x4E42, 0x0, 0x5B6C, }}, + {0x6885, {0x475F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B74, 0x0, 0x5B67, 0x0, 0x0, 0x0, 0x3034, 0x5B69, }}, + {0x6897, {0x393C, 0x0, 0x0, 0x0, 0x5B6B, 0x0, 0x5B6A, 0x0, 0x5B66, 0x5B71, 0x0, 0x3E3F, 0x0, 0x0, 0x0, 0x546D, }}, + {0x68A7, {0x3868, 0x4D7C, 0x0, 0x0, 0x0, 0x0, 0x5B68, 0x0, 0x4474, 0x3323, 0x3A2D, 0x0, 0x5B60, 0x0, 0x5B70, 0x3361, }}, + {0x68B9, {0x5B6E, 0x5B72, 0x0, 0x456E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x347E, 0x0, 0x5C32, 0x0, 0x0, }}, + {0x68C9, {0x4C49, 0x5B77, 0x347D, 0x0, 0x5B7E, 0x0, 0x0, 0x0, 0x0, 0x4B40, 0x0, 0x5C21, 0x5C23, 0x0, 0x5C27, 0x5B79, }}, + {0x68DA, {0x432A, 0x0, 0x0, 0x0, 0x0, 0x456F, 0x5C2B, 0x5B7C, 0x0, 0x5C28, 0x0, 0x0, 0x0, 0x5C22, 0x0, 0x0, }}, + {0x68EE, {0x3F39, 0x5C2C, 0x0, 0x0, 0x4033, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C2A, 0x343D, 0x0, 0x0, 0x0, }}, + {0x6900, {0x4F50, 0x5B76, 0x0, 0x0, 0x5C26, 0x3058, 0x0, 0x0, 0x5B78, 0x0, 0x0, 0x4C3A, 0x5B7D, 0x3F22, 0x4447, 0x5B73, }}, + {0x6912, {0x5C25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F7A, 0x5C2F, 0x3371, 0x3821, 0x0, 0x0, 0x0, 0x0, 0x5C31, }}, + {0x6922, {0x5B7A, 0x5C30, 0x0, 0x5C29, 0x5B7B, 0x0, 0x5C2D, 0x0, 0x5C2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C3F, 0x0, }}, + {0x6934, {0x464E, 0x0, 0x5C24, 0x0, 0x0, 0x5C3B, 0x0, 0x0, 0x0, 0x5C3D, 0x0, 0x4458, 0x0, 0x0, 0x0, 0x0, }}, + {0x694A, {0x4D4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4976, 0x5C38, 0x424A, 0x0, 0x0, 0x0, 0x5C3E, }}, + {0x695A, {0x413F, 0x0, 0x5C35, 0x5C42, 0x5C41, 0x0, 0x466F, 0x5C40, 0x466A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x696A, {0x5C44, 0x5C37, 0x0, 0x3648, 0x5C3A, 0x3D5D, 0x0, 0x0, 0x0, 0x4760, 0x5C3C, 0x364B, 0x0, 0x5C34, 0x5C36, 0x5C33, }}, + {0x697C, {0x4F30, 0x335A, 0x5C39, 0x0, 0x0, 0x5C43, 0x3335, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3A67, 0x0, }}, + {0x698E, {0x315D, 0x0, 0x0, 0x5C54, 0x0, 0x0, 0x4F31, 0x5C57, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F3A, 0x5C56, 0x0, }}, + {0x69A0, {0x5C55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C46, 0x0, }}, + {0x69B1, {0x5C63, 0x5C45, 0x0, 0x5C58, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C50, 0x0, 0x0, 0x5C4B, 0x5C48, 0x0, }}, + {0x69C1, {0x5C49, 0x0, 0x5C51, 0x0, 0x0, 0x0, 0x7422, 0x0, 0x0, 0x5C4E, 0x393D, 0x4448, 0x4164, 0x5C4C, 0x0, 0x5C47, }}, + {0x69D3, {0x5C4A, 0x0, 0x0, 0x0, 0x0, 0x4D4D, 0x4B6A, 0x0, 0x0, 0x0, 0x5C4F, 0x5C59, 0x0, 0x0, 0x0, 0x0, }}, + {0x69E7, {0x5C61, 0x5C5A, 0x0, 0x0, 0x5C67, 0x0, 0x5C65, 0x0, 0x0, 0x0, 0x0, 0x5C60, 0x0, 0x0, 0x0, 0x0, }}, + {0x69F9, {0x5C5F, 0x0, 0x4450, 0x0, 0x4165, 0x0, 0x5C5D, 0x0, 0x0, 0x5C5B, 0x0, 0x0, 0x5C62, 0x0, 0x0, 0x0, }}, + {0x6A0A, {0x5C68, 0x4875, 0x5C6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C69, 0x5C6C, 0x5C66, 0x0, 0x0, 0x4374, 0x0, 0x4938, }}, + {0x6A1B, {0x5C5C, 0x0, 0x0, 0x5C64, 0x3E40, 0x0, 0x4C4F, 0x5C78, 0x5C6B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3822, 0x3223, }}, + {0x6A2B, {0x335F, 0x0, 0x0, 0x5C53, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E41, 0x5C70, 0x0, 0x5C77, 0x3C79, 0x3372, }}, + {0x6A3D, {0x432E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C6D, 0x0, 0x0, 0x5C72, 0x5C76, 0x0, 0x0, 0x3636, 0x0, }}, + {0x6A58, {0x354C, 0x5C74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3521, 0x0, 0x464B, 0x5C73, 0x0, 0x0, 0x0, 0x5C75, 0x0, }}, + {0x6A72, {0x5C6F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3360, 0x4349, 0x0, }}, + {0x6A84, {0x5C7C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C7A, 0x3869, 0x0, 0x5C79, 0x0, 0x0, 0x0, }}, + {0x6A97, {0x5D21, 0x0, 0x0, 0x0, 0x0, 0x5B58, 0x0, 0x0, 0x0, 0x5C7B, 0x0, 0x5C7D, 0x5C7E, 0x0, 0x0, 0x0, }}, + {0x6AAA, {0x5D2C, 0x0, 0x5D28, 0x0, 0x5B6D, 0x0, 0x0, 0x0, 0x0, 0x5D27, 0x0, 0x0, 0x0, 0x0, 0x5D26, 0x0, }}, + {0x6ABB, {0x5D23, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5C6A, 0x5D25, 0x5D24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6AD1, {0x5D2A, 0x0, 0x4F26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D2D, 0x367B, 0x0, 0x0, 0x5D29, 0x5D2B, 0x0, }}, + {0x6AE8, {0x4827, 0x0, 0x5D2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6AFA, {0x5D32, 0x5D2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D73, 0x5D30, 0x0, 0x0, 0x0, 0x0, }}, + {0x6B0A, {0x5C5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D33, 0x0, 0x0, 0x0, 0x5D34, 0x0, 0x0, 0x0, }}, + {0x6B1D, {0x3135, 0x0, 0x5D36, 0x3767, 0x3C21, 0x0, 0x3655, 0x0, 0x0, 0x0, 0x3224, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6B32, {0x4D5F, 0x0, 0x0, 0x0, 0x0, 0x5D38, 0x5D37, 0x5D3A, 0x353D, 0x0, 0x0, 0x3656, 0x343E, 0x0, 0x0, 0x0, }}, + {0x6B43, {0x5D3D, 0x0, 0x0, 0x0, 0x5D3C, 0x0, 0x5D3E, 0x0, 0x0, 0x324E, 0x0, 0x4337, 0x0, 0x5D3F, 0x0, 0x0, }}, + {0x6B53, {0x343F, 0x5D41, 0x0, 0x0, 0x0, 0x0, 0x5D40, 0x0, 0x5D42, 0x0, 0x0, 0x0, 0x5D43, 0x0, 0x5D44, 0x3B5F, }}, + {0x6B63, {0x4035, 0x3A21, 0x0, 0x4970, 0x0, 0x0, 0x4A62, 0x4F44, 0x0, 0x0, 0x0, 0x0, 0x3B75, 0x0, 0x0, 0x0, }}, + {0x6B73, {0x3A50, 0x4E72, 0x0, 0x0, 0x0, 0x5D45, 0x5D46, 0x0, 0x3B60, 0x0, 0x0, 0x0, 0x5D47, 0x5D48, 0x0, 0x0, }}, + {0x6B83, {0x5D4A, 0x5D49, 0x0, 0x4B58, 0x0, 0x0, 0x3D5E, 0x3C6C, 0x3B44, 0x0, 0x5D4B, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6B95, {0x5D4D, 0x3F23, 0x0, 0x5D4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D4E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D4F, }}, + {0x6BAA, {0x5D50, 0x5D51, 0x0, 0x0, 0x0, 0x5D52, 0x0, 0x5D54, 0x5D53, 0x5D55, 0x3225, 0x434A, 0x0, 0x5D56, 0x0, 0x0, }}, + {0x6BBA, {0x3B26, 0x334C, 0x5D57, 0x0, 0x0, 0x4542, 0x544C, 0x0, 0x0, 0x0, 0x0, 0x3523, 0x5D58, 0x0, 0x0, 0x0, }}, + {0x6BCB, {0x5D59, 0x0, 0x4A6C, 0x4B68, 0x0, 0x0, 0x0, 0x4647, 0x5D5A, 0x4866, 0x0, 0x0, 0x0, 0x487B, 0x0, 0x0, }}, + {0x6BDB, {0x4C53, 0x0, 0x0, 0x0, 0x5D5B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6BEB, {0x5D5D, 0x5D5C, 0x0, 0x0, 0x5D5F, 0x0, 0x0, 0x0, 0x5D5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6C08, {0x5D61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B61, 0x0, 0x4C31, 0x0, 0x5D62, 0x5D63, 0x0, 0x0, 0x3524, }}, + {0x6C1B, {0x5D64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D66, 0x5D65, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6C34, {0x3F65, 0x0, 0x0, 0x4939, 0x314A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4845, 0x0, 0x4475, 0x3D41, 0x3561, 0x0, }}, + {0x6C4E, {0x4846, 0x0, 0x3C2E, 0x0, 0x0, 0x0, 0x0, 0x5D68, 0x0, 0x3440, 0x0, 0x0, 0x3178, 0x0, 0x0, 0x4672, }}, + {0x6C5E, {0x5D67, 0x393E, 0x4353, 0x0, 0x5D69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D71, 0x0, 0x5D6A, 0x0, 0x0, 0x0, }}, + {0x6C70, {0x4241, 0x0, 0x3562, 0x5D72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3768, 0x0, 0x0, 0x3525, 0x5D70, 0x0, }}, + {0x6C81, {0x5D6E, 0x5D6B, 0x4D60, 0x0, 0x0, 0x0, 0x0, 0x4440, 0x0, 0x0, 0x0, 0x4659, 0x5D6C, 0x0, 0x0, 0x5D74, }}, + {0x6C92, {0x5D73, 0x3723, 0x0, 0x0, 0x322D, 0x0, 0x0, 0x3A3B, 0x5D6D, 0x5D6F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B57, }}, + {0x6CA2, {0x4274, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B77, 0x0, 0x0, 0x5D7C, 0x0, 0x0, 0x5D7D, }}, + {0x6CB3, {0x324F, 0x0, 0x0, 0x0, 0x0, 0x4A28, 0x4C7D, 0x5E21, 0x3C23, 0x3E42, 0x5D78, 0x5D7E, 0x3168, 0x0, 0x3637, 0x0, }}, + {0x6CC4, {0x5D75, 0x5D7A, 0x0, 0x0, 0x0, 0x4074, 0x4771, 0x0, 0x4867, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5D77, }}, + {0x6CD5, {0x4B21, 0x0, 0x5D79, 0x0, 0x5E24, 0x0, 0x5E22, 0x0, 0x5D7B, 0x0, 0x0, 0x0, 0x4B22, 0x4748, 0x3563, 0x0, }}, + {0x6CE5, {0x4525, 0x0, 0x0, 0x436D, 0x0, 0x5E25, 0x0, 0x0, 0x0, 0x0, 0x5E23, 0x4259, 0x5D76, 0x0, 0x314B, 0x0, }}, + {0x6D0B, {0x4D4E, 0x5E30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E2F, 0x0, 0x0, 0x0, 0x0, 0x4076, 0x0, 0x5E2C, 0x0, }}, + {0x6D1B, {0x4D6C, 0x0, 0x0, 0x4636, 0x5E26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4445, 0x0, 0x0, 0x0, 0x314C, 0x393F, }}, + {0x6D2B, {0x5E29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D27, 0x5E2E, 0x0, 0x5E2D, 0x5E28, 0x0, 0x5E2B, 0x0, 0x0, }}, + {0x6D3B, {0x3368, 0x0, 0x5E2A, 0x4749, 0x0, 0x0, 0x4E2E, 0x0, 0x0, 0x3E74, 0x4075, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6D59, {0x5E36, 0x5E34, 0x0, 0x494D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E31, 0x5E33, 0x0, 0x313A, 0x0, 0x0, }}, + {0x6D69, {0x3940, 0x4F32, 0x0, 0x333D, 0x0, 0x4962, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D61, 0x0, 0x0, 0x3324, 0x3F3B, }}, + {0x6D79, {0x5E35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E3A, 0x0, 0x0, 0x3E43, }}, + {0x6D8C, {0x4D30, 0x0, 0x5E37, 0x0, 0x0, 0x0, 0x0, 0x5E32, 0x0, 0x5E38, 0x0, 0x0, 0x0, 0x4E5E, 0x0, 0x4573, }}, + {0x6D9C, {0x4642, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6DAF, {0x3336, 0x0, 0x0, 0x3155, 0x0, 0x0, 0x5E3E, 0x0, 0x0, 0x5E41, 0x0, 0x0, 0x0, 0x4E43, 0x0, 0x0, }}, + {0x6DC0, {0x4D64, 0x0, 0x0, 0x0, 0x0, 0x5E48, 0x5E42, 0x5E3F, 0x0, 0x0, 0x0, 0x4E54, 0x5E45, 0x0, 0x0, 0x0, }}, + {0x6DD1, {0x3D4A, 0x5E47, 0x0, 0x0, 0x5E4C, 0x0, 0x0, 0x4571, 0x5E4A, 0x0, 0x0, 0x0, 0x0, 0x5E44, 0x0, 0x0, }}, + {0x6DE1, {0x4338, 0x0, 0x0, 0x5E4B, 0x0, 0x5E40, 0x0, 0x5E46, 0x0, 0x5E4D, 0x307C, 0x5E43, 0x0, 0x5E4E, 0x0, 0x0, }}, + {0x6DF1, {0x3F3C, 0x0, 0x3D5F, 0x0, 0x4A25, 0x0, 0x3A2E, 0x0, 0x5E3B, 0x5E49, 0x453A, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6E05, {0x4036, 0x0, 0x3369, 0x3A51, 0x3E44, 0x5E3D, 0x3D42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x374C, 0x0, }}, + {0x6E15, {0x5E3C, 0x0, 0x0, 0x0, 0x5E52, 0x3D6D, 0x383A, 0x0, 0x5E61, 0x0, 0x5E5B, 0x3574, 0x454F, 0x0, 0x5E56, 0x5E5F, }}, + {0x6E25, {0x302F, 0x3132, 0x0, 0x0, 0x3239, 0x0, 0x5E58, 0x422C, 0x5E4F, 0x5E51, 0x3941, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6E38, {0x5E62, 0x0, 0x5E5D, 0x0, 0x0, 0x0, 0x5E55, 0x0, 0x0, 0x0, 0x0, 0x5E5C, 0x0, 0x0, 0x0, 0x0, }}, + {0x6E4A, {0x4C2B, 0x0, 0x0, 0x5E5A, 0x5E5E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3850, 0x0, 0x3E45, 0x0, }}, + {0x6E5B, {0x4339, 0x0, 0x0, 0x0, 0x5E54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D2F, 0x0, 0x0, 0x0, }}, + {0x6E6B, {0x5E57, 0x0, 0x0, 0x5E50, 0x4572, 0x0, 0x0, 0x5E53, 0x0, 0x0, 0x0, 0x5E59, 0x0, 0x0, 0x0, 0x0, }}, + {0x6E7E, {0x4F51, 0x3C3E, 0x4B7E, 0x0, 0x5E63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x482E, 0x0, }}, + {0x6E8F, {0x5E6F, 0x383B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D60, 0x0, 0x5E65, 0x0, 0x0, 0x0, 0x4E2F, 0x3942, 0x0, }}, + {0x6E9F, {0x5E72, 0x0, 0x0, 0x306E, 0x0, 0x0, 0x5E70, 0x0, 0x0, 0x0, 0x0, 0x5E64, 0x0, 0x0, 0x0, 0x0, }}, + {0x6EAF, {0x5E6A, 0x0, 0x0, 0x5E6C, 0x0, 0x0, 0x0, 0x4D4F, 0x5E67, 0x0, 0x0, 0x452E, 0x0, 0x0, 0x5E69, 0x0, }}, + {0x6EC2, {0x5E71, 0x0, 0x5E6B, 0x4C47, 0x0, 0x0, 0x0, 0x5E66, 0x0, 0x3C22, 0x5E7E, 0x0, 0x0, 0x0, 0x0, 0x336A, }}, + {0x6ED3, {0x5E68, 0x5E6D, 0x5E6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x426C, 0x425A, 0x0, 0x0, 0x0, 0x0, }}, + {0x6EEC, {0x5E76, 0x0, 0x0, 0x5E7C, 0x0, 0x0, 0x5E7A, 0x0, 0x4529, 0x0, 0x0, 0x5F23, 0x5E77, 0x0, 0x0, 0x0, }}, + {0x6EFE, {0x5E78, 0x5E60, 0x0, 0x3579, 0x493A, 0x0, 0x0, 0x0, 0x3C3F, 0x0, 0x0, 0x3977, 0x0, 0x0, 0x0, 0x0, }}, + {0x6F0F, {0x4F33, 0x0, 0x5E74, 0x0, 0x5F22, 0x3169, 0x4166, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6F20, {0x4779, 0x0, 0x3441, 0x4E7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C21, 0x4452, 0x0, 0x0, 0x0, }}, + {0x6F31, {0x5E7B, 0x5E7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4132, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F21, 0x5E79, 0x0, }}, + {0x6F41, {0x5E73, 0x0, 0x0, 0x0, 0x3443, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6F54, {0x3769, 0x0, 0x0, 0x0, 0x5F2F, 0x0, 0x0, 0x5F2A, 0x4078, 0x0, 0x0, 0x3363, 0x0, 0x0, 0x0, 0x0, }}, + {0x6F64, {0x3D61, 0x0, 0x5F33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F2C, 0x442C, 0x5F29, 0x4459, 0x0, 0x0, 0x0, }}, + {0x6F74, {0x5F4C, 0x0, 0x0, 0x0, 0x5F26, 0x0, 0x5F25, 0x0, 0x5F2E, 0x0, 0x0, 0x0, 0x5F28, 0x5F27, 0x5F2D, 0x0, }}, + {0x6F84, {0x4021, 0x0, 0x5F24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F30, 0x0, 0x0, 0x5F31, 0x0, 0x0, }}, + {0x6F97, {0x3442, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F36, 0x0, 0x5F35, 0x5F37, 0x0, 0x0, }}, + {0x6FAA, {0x5F3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4543, 0x0, 0x5F34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F38, }}, + {0x6FC0, {0x3763, 0x4279, 0x5F32, 0x473B, 0x0, 0x0, 0x5F39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x6FD4, {0x5F3E, 0x5F3C, 0x0, 0x0, 0x5F3F, 0x0, 0x0, 0x5F42, 0x0, 0x0, 0x0, 0x5F3B, 0x396A, 0x4728, 0x0, 0x0, }}, + {0x6FE4, {0x5E39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D74, 0x5F3D, 0x0, 0x5F41, 0x4275, 0x0, 0x5F40, 0x0, 0x5F2B, }}, + {0x6FF6, {0x6F69, 0x0, 0x0, 0x0, 0x5F45, 0x0, 0x0, 0x0, 0x5F49, 0x0, 0x0, 0x5F47, 0x0, 0x0, 0x0, 0x0, }}, + {0x7009, {0x5F43, 0x0, 0x5F44, 0x0, 0x0, 0x0, 0x5F48, 0x0, 0x5F46, 0x0, 0x0, 0x0, 0x494E, 0x0, 0x0, 0x5F4E, }}, + {0x701A, {0x5F4B, 0x5F4A, 0x0, 0x5F4D, 0x4654, 0x5F4F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4375, 0x426D, 0x0, 0x0, }}, + {0x702C, {0x4025, 0x0, 0x0, 0x0, 0x5F50, 0x0, 0x5F52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x703E, {0x5F51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5E75, 0x0, }}, + {0x7051, {0x5F53, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4667, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7063, {0x5F54, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3250, 0x0, 0x0, 0x0, 0x4574, 0x3325, 0x0, 0x0, }}, + {0x7078, {0x3564, 0x0, 0x0, 0x0, 0x3C5E, 0x3A52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7089, {0x4F27, 0x3F66, 0x0, 0x0, 0x0, 0x316A, 0x0, 0x0, 0x0, 0x5F56, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7099, {0x5F55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x70AC, {0x5F59, 0x433A, 0x5F5C, 0x5F57, 0x0, 0x0, 0x0, 0x5F5B, 0x0, 0x0, 0x0, 0x0, 0x5F5A, 0x4540, 0x3059, 0x0, }}, + {0x70C8, {0x4E75, 0x0, 0x0, 0x5F5E, 0x0, 0x0, 0x0, 0x3128, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x70D9, {0x5F60, 0x0, 0x0, 0x0, 0x5F5F, 0x0, 0x5F5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x70F1, {0x5F58, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B23, 0x0, 0x0, 0x0, 0x5F62, 0x0, 0x0, 0x0, }}, + {0x7109, {0x5F61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x316B, 0x0, 0x0, 0x0, 0x0, }}, + {0x7119, {0x5F64, 0x4A32, 0x0, 0x5F63, 0x0, 0x0, 0x0, 0x0, 0x4C35, 0x0, 0x0, 0x0, 0x0, 0x3E47, 0x0, 0x0, }}, + {0x7136, {0x4133, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7149, {0x4E7B, 0x0, 0x0, 0x5F6A, 0x0, 0x4079, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F66, 0x5F6B, 0x0, 0x0, }}, + {0x7159, {0x316C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F69, 0x0, 0x4761, 0x5F65, 0x5F68, 0x3E48, 0x0, }}, + {0x7169, {0x4851, 0x0, 0x0, 0x5F6C, 0x0, 0x3C51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x717D, {0x407A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F6F, 0x0, 0x0, 0x0, 0x5F67, 0x0, 0x3727, 0x0, 0x0, }}, + {0x718F, {0x5F6D, 0x0, 0x0, 0x0, 0x0, 0x4D50, 0x5F70, 0x0, 0x0, 0x0, 0x7426, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x719F, {0x3D4F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F71, 0x0, 0x0, 0x0, 0x5F72, 0x0, 0x0, }}, + {0x71B1, {0x472E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5F74, 0x0, 0x0, 0x0, 0x0, 0x5F75, 0x0, 0x0, }}, + {0x71C3, {0x4733, 0x0, 0x0, 0x0, 0x0, 0x4575, 0x5F77, 0x0, 0x0, 0x0, 0x0, 0x5F79, 0x0, 0x4E55, 0x0, 0x5F76, }}, + {0x71D4, {0x5F78, 0x316D, 0x0, 0x5F73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x535B, 0x5F7A, 0x0, 0x0, 0x0, }}, + {0x71E5, {0x4167, 0x3B38, 0x5F7C, 0x0, 0x0, 0x0, 0x0, 0x5F7B, 0x3F24, 0x5259, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x71F5, {0x5F7D, 0x0, 0x0, 0x0, 0x6021, 0x0, 0x5F6E, 0x5F7E, 0x0, 0x0, 0x6022, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7206, {0x477A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6023, 0x0, 0x0, 0x6024, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x721B, {0x6025, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6026, 0x0, 0x445E, }}, + {0x722C, {0x6028, 0x6027, 0x0, 0x0, 0x6029, 0x0, 0x602A, 0x0, 0x0, 0x3C5F, 0x4963, 0x0, 0x0, 0x0, 0x4C6C, 0x602B, }}, + {0x723C, {0x602C, 0x4156, 0x3C24, 0x602D, 0x602E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x602F, 0x4A52, 0x4847, 0x0, 0x0, 0x6030, }}, + {0x724C, {0x4757, 0x0, 0x0, 0x0, 0x0, 0x0, 0x442D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6031, 0x3267, 0x0, 0x356D, }}, + {0x725D, {0x4C46, 0x0, 0x4C36, 0x0, 0x3234, 0x4F34, 0x0, 0x0, 0x0, 0x0, 0x4B52, 0x0, 0x4A2A, 0x0, 0x0, 0x0, }}, + {0x7272, {0x4037, 0x0, 0x6032, 0x0, 0x0, 0x0, 0x0, 0x4643, 0x0, 0x0, 0x0, 0x3823, 0x6033, 0x0, 0x3A54, 0x6035, }}, + {0x7282, {0x6034, 0x0, 0x0, 0x0, 0x0, 0x6036, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7292, {0x6037, 0x0, 0x0, 0x0, 0x6038, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x353E, 0x0, }}, + {0x72A2, {0x6039, 0x0, 0x0, 0x0, 0x0, 0x603A, 0x0, 0x0, 0x0, 0x0, 0x3824, 0x0, 0x0, 0x4848, 0x0, 0x0, }}, + {0x72B2, {0x603C, 0x0, 0x0, 0x0, 0x3E75, 0x0, 0x0, 0x603B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x72C2, {0x3638, 0x603D, 0x603F, 0x0, 0x603E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6040, 0x0, 0x3851, 0x0, }}, + {0x72D2, {0x6041, 0x0, 0x0, 0x0, 0x0, 0x3669, 0x0, 0x4140, 0x0, 0x397D, 0x0, 0x0, 0x0, 0x0, 0x6043, 0x6044, }}, + {0x72E2, {0x6042, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C6D, 0x0, 0x0, 0x4648, 0x3639, 0x0, 0x0, 0x0, 0x0, }}, + {0x72F7, {0x6046, 0x432C, 0x6045, 0x0, 0x0, 0x4F35, 0x4762, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x730A, {0x6049, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x604B, 0x6048, 0x0, 0x0, }}, + {0x731B, {0x4C54, 0x604A, 0x604C, 0x0, 0x4E44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6050, 0x0, 0x0, 0x0, 0x604F, 0x4376, }}, + {0x732B, {0x472D, 0x0, 0x0, 0x3825, 0x604E, 0x0, 0x0, 0x0, 0x0, 0x604D, 0x0, 0x4D31, 0x4D32, 0x0, 0x0, 0x0, }}, + {0x733E, {0x6051, 0x316E, 0x0, 0x0, 0x0, 0x0, 0x3976, 0x3B62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x734E, {0x6052, 0x6053, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6055, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7363, {0x3D43, 0x0, 0x0, 0x0, 0x0, 0x6057, 0x0, 0x6056, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6058, 0x0, 0x334D, }}, + {0x7375, {0x605A, 0x0, 0x0, 0x6059, 0x0, 0x605C, 0x605B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x383C, }}, + {0x7387, {0x4E28, 0x0, 0x364C, 0x0, 0x3226, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x366A, }}, + {0x73A9, {0x3461, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E68, 0x605E, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x73BB, {0x6060, 0x0, 0x0, 0x0, 0x0, 0x6061, 0x0, 0x3251, 0x0, 0x0, 0x0, 0x0, 0x0, 0x605D, 0x0, 0x3B39, }}, + {0x73CD, {0x4441, 0x605F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x73DE, {0x6064, 0x0, 0x3C6E, 0x0, 0x0, 0x0, 0x0, 0x6062, 0x0, 0x0, 0x0, 0x0, 0x373E, 0x0, 0x0, 0x4849, }}, + {0x73EE, {0x6063, 0x0, 0x0, 0x607E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6069, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x73FE, {0x383D, 0x0, 0x0, 0x0, 0x0, 0x3565, 0x0, 0x6066, 0x4D7D, 0x0, 0x0, 0x4E30, 0x0, 0x0, 0x0, 0x0, }}, + {0x7422, {0x4276, 0x0, 0x0, 0x6068, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7432, {0x606A, 0x4E56, 0x3657, 0x487C, 0x474A, 0x0, 0x0, 0x0, 0x606B, 0x0, 0x0, 0x0, 0x0, 0x606D, 0x0, 0x6070, }}, + {0x7455, {0x606C, 0x0, 0x0, 0x0, 0x606F, 0x386A, 0x314D, 0x6071, 0x0, 0x3F70, 0x606E, 0x4E5C, 0x0, 0x0, 0x6074, 0x7424, }}, + {0x7469, {0x6072, 0x6075, 0x0, 0x0, 0x0, 0x0, 0x6067, 0x6073, 0x0, 0x0, 0x3A3C, 0x0, 0x0, 0x6076, 0x0, 0x0, }}, + {0x747E, {0x6077, 0x0, 0x0, 0x0, 0x0, 0x4D7E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6078, 0x0, 0x0, }}, + {0x749E, {0x6079, 0x0, 0x0, 0x0, 0x6065, 0x0, 0x0, 0x0, 0x0, 0x607A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x74B0, {0x3444, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C25, 0x0, 0x0, }}, + {0x74CA, {0x607B, 0x0, 0x0, 0x0, 0x0, 0x607C, 0x0, 0x0, 0x0, 0x0, 0x607D, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x74DC, {0x313B, 0x0, 0x0, 0x0, 0x6121, 0x0, 0x493B, 0x6122, 0x0, 0x0, 0x3424, 0x6123, 0x0, 0x6124, 0x0, 0x0, }}, + {0x74EE, {0x6125, 0x0, 0x6127, 0x6128, 0x6126, 0x0, 0x0, 0x0, 0x4953, 0x612A, 0x6129, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7503, {0x612C, 0x612B, 0x612D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x612E, 0x6130, 0x612F, 0x0, 0x0, 0x3979, 0x0, }}, + {0x7513, {0x6132, 0x0, 0x6131, 0x0, 0x0, 0x3445, 0x0, 0x3F53, 0x0, 0x453C, 0x0, 0x6133, 0x4038, 0x0, 0x0, 0x0, }}, + {0x7523, {0x3B3A, 0x0, 0x3179, 0x6134, 0x0, 0x4D51, 0x0, 0x0, 0x4A63, 0x6135, 0x0, 0x0, 0x0, 0x4544, 0x4D33, 0x3943, }}, + {0x7533, {0x3F3D, 0x0, 0x0, 0x0, 0x434B, 0x5234, 0x0, 0x442E, 0x3268, 0x6136, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7544, {0x6137, 0x0, 0x613C, 0x0, 0x0, 0x613A, 0x6139, 0x5A42, 0x3326, 0x6138, 0x0, 0x305A, 0x0, 0x482A, 0x0, 0x0, }}, + {0x7554, {0x484A, 0x0, 0x0, 0x0, 0x0, 0x4E31, 0x613D, 0x613B, 0x435C, 0x4026, 0x0, 0x0, 0x482B, 0x0, 0x492D, 0x0, }}, + {0x7564, {0x613F, 0x4E2C, 0x374D, 0x6140, 0x0, 0x613E, 0x4856, 0x6141, 0x0, 0x6142, 0x0, 0x0, 0x305B, 0x0, 0x0, 0x3E76, }}, + {0x7574, {0x6147, 0x0, 0x6144, 0x466D, 0x6143, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3526, 0x0, 0x0, 0x614A, 0x0, }}, + {0x7586, {0x6145, 0x6146, 0x0, 0x6149, 0x6148, 0x4925, 0x0, 0x0, 0x4142, 0x4141, 0x0, 0x353F, 0x0, 0x0, 0x614B, 0x0, }}, + {0x759A, {0x614C, 0x0, 0x0, 0x614D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x614F, 0x0, 0x614E, 0x0, 0x0, 0x0, 0x0, }}, + {0x75AB, {0x3156, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6157, 0x4868, 0x6151, 0x0, 0x6153, 0x0, 0x0, 0x6155, 0x3F3E, 0x0, }}, + {0x75BC, {0x6156, 0x6154, 0x3C40, 0x0, 0x0, 0x0, 0x6150, 0x6152, 0x0, 0x4942, 0x0, 0x3E49, 0x0, 0x0, 0x6159, 0x0, }}, + {0x75CD, {0x6158, 0x0, 0x0, 0x0, 0x0, 0x615A, 0x0, 0x3C26, 0x3A2F, 0x0, 0x0, 0x4577, 0x615B, 0x0, 0x444B, 0x0, }}, + {0x75DE, {0x615D, 0x0, 0x0, 0x0, 0x4E21, 0x615C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4169, 0x0, 0x0, 0x0, 0x0, }}, + {0x75F0, {0x6162, 0x0, 0x6164, 0x6165, 0x4354, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6163, 0x0, 0x6160, 0x0, 0x615E, 0x615F, }}, + {0x7601, {0x6161, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6168, 0x0, 0x6166, 0x0, 0x6167, 0x0, 0x0, 0x0, }}, + {0x761F, {0x6169, 0x616B, 0x616C, 0x616D, 0x0, 0x616E, 0x0, 0x0, 0x616A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7630, {0x6170, 0x0, 0x0, 0x0, 0x616F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6171, 0x0, 0x0, 0x0, 0x0, }}, + {0x7642, {0x4E45, 0x0, 0x0, 0x0, 0x6174, 0x6172, 0x6173, 0x0, 0x0, 0x0, 0x3462, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7652, {0x4C7E, 0x0, 0x0, 0x0, 0x4A4A, 0x0, 0x6176, 0x0, 0x0, 0x0, 0x6175, 0x0, 0x0, 0x0, 0x0, 0x6177, }}, + {0x7662, {0x6178, 0x0, 0x0, 0x0, 0x0, 0x617C, 0x6179, 0x617A, 0x617B, 0x0, 0x617D, 0x0, 0x0, 0x0, 0x617E, 0x0, }}, + {0x7672, {0x6221, 0x0, 0x0, 0x0, 0x6222, 0x0, 0x6223, 0x0, 0x482F, 0x4550, 0x6224, 0x4772, 0x4934, 0x0, 0x6225, 0x0, }}, + {0x7683, {0x6226, 0x452A, 0x0, 0x3327, 0x3944, 0x6227, 0x0, 0x0, 0x6228, 0x0, 0x0, 0x6229, 0x0, 0x3B29, 0x0, 0x0, }}, + {0x7693, {0x622B, 0x0, 0x0, 0x622A, 0x0, 0x0, 0x622C, 0x622D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x76AE, {0x4869, 0x0, 0x622E, 0x0, 0x0, 0x0, 0x622F, 0x0, 0x0, 0x7369, 0x6230, 0x6231, 0x6232, 0x0, 0x0, 0x0, }}, + {0x76BF, {0x3B2E, 0x0, 0x0, 0x6233, 0x4756, 0x0, 0x0, 0x4B5F, 0x0, 0x314E, 0x0, 0x3157, 0x0, 0x0, 0x6234, 0x0, }}, + {0x76D2, {0x6236, 0x0, 0x0, 0x0, 0x6235, 0x4570, 0x0, 0x0, 0x0, 0x4039, 0x5D39, 0x0, 0x6237, 0x4C41, 0x0, 0x6238, }}, + {0x76E3, {0x3446, 0x4857, 0x6239, 0x0, 0x623A, 0x0, 0x0, 0x623B, 0x0, 0x0, 0x0, 0x4C5C, 0x0, 0x0, 0x0, 0x4C55, }}, + {0x76F4, {0x443E, 0x0, 0x0, 0x0, 0x416A, 0x0, 0x0, 0x623D, 0x0, 0x0, 0x3D62, 0x0, 0x0, 0x3E4A, 0x0, 0x0, }}, + {0x7704, {0x6240, 0x0, 0x0, 0x623F, 0x623E, 0x487D, 0x0, 0x3447, 0x3829, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x771B, {0x6246, 0x0, 0x0, 0x6243, 0x3F3F, 0x4C32, 0x0, 0x0, 0x0, 0x6242, 0x6244, 0x6245, 0x0, 0x0, 0x6241, 0x0, }}, + {0x7737, {0x6247, 0x6248, 0x0, 0x442F, 0x0, 0x3463, 0x0, 0x0, 0x0, 0x4365, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7747, {0x6249, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x775A, {0x624A, 0x624D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F67, 0x0, 0x4644, 0x0, 0x624E, 0x4B53, 0x0, 0x624B, 0x0, }}, + {0x776B, {0x624C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6251, 0x0, }}, + {0x777E, {0x6250, 0x624F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6253, 0x0, 0x0, }}, + {0x778E, {0x6252, 0x0, 0x0, 0x6254, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x779E, {0x6256, 0x0, 0x6255, 0x0, 0x0, 0x0, 0x0, 0x4A4D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D56, 0x4E46, }}, + {0x77B0, {0x6257, 0x0, 0x0, 0x4637, 0x0, 0x0, 0x6258, 0x0, 0x0, 0x6259, 0x0, 0x625D, 0x625B, 0x625C, 0x0, 0x625A, }}, + {0x77C7, {0x625E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x625F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x77D7, {0x6260, 0x0, 0x0, 0x6261, 0x4C37, 0x6262, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C70, 0x6263, 0x0, 0x434E, 0x0, }}, + {0x77E7, {0x476A, 0x0, 0x366B, 0x0, 0x0, 0x0, 0x433B, 0x6264, 0x363A, 0x0, 0x0, 0x0, 0x4050, 0x0, 0x0, 0x0, }}, + {0x77FC, {0x6265, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3A3D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x780C, {0x6266, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6267, 0x0, 0x3826, 0x3A55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7820, {0x6269, 0x0, 0x0, 0x0, 0x0, 0x4556, 0x3A56, 0x354E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7832, {0x4B24, 0x0, 0x474B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4557, 0x0, 0x0, 0x0, 0x0, 0x395C, 0x0, 0x0, }}, + {0x7845, {0x626B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x785D, {0x3E4B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E32, 0x3945, }}, + {0x786F, {0x3827, 0x0, 0x0, 0x4823, 0x0, 0x626D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x626F, 0x0, 0x0, }}, + {0x7881, {0x386B, 0x0, 0x0, 0x0, 0x0, 0x626E, 0x4476, 0x0, 0x0, 0x0, 0x0, 0x6271, 0x3337, 0x626C, 0x0, 0x0, }}, + {0x7891, {0x486A, 0x0, 0x3130, 0x0, 0x3A6C, 0x0, 0x4F52, 0x0, 0x0, 0x6270, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x78A3, {0x6272, 0x0, 0x0, 0x0, 0x4A4B, 0x0, 0x4059, 0x6274, 0x0, 0x0, 0x0, 0x0, 0x6275, 0x0, 0x0, 0x0, }}, + {0x78B5, {0x6273, 0x0, 0x0, 0x0, 0x0, 0x334E, 0x0, 0x627B, 0x0, 0x627A, 0x0, 0x0, 0x3C27, 0x0, 0x0, 0x0, }}, + {0x78C5, {0x627C, 0x6277, 0x0, 0x0, 0x0, 0x627D, 0x6278, 0x0, 0x0, 0x0, 0x0, 0x4858, 0x6276, 0x0, 0x0, 0x6279, }}, + {0x78DA, {0x6322, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6321, 0x4B61, 0x0, }}, + {0x78EC, {0x627E, 0x0, 0x0, 0x306B, 0x0, 0x0, 0x0, 0x0, 0x6324, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x78FD, {0x6323, 0x0, 0x0, 0x0, 0x3E4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6325, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x790E, {0x4143, 0x0, 0x0, 0x6327, 0x6326, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6328, 0x0, 0x0, 0x0, 0x0, }}, + {0x7926, {0x6268, 0x0, 0x0, 0x0, 0x626A, 0x632A, 0x6329, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x793A, {0x3C28, 0x0, 0x4E69, 0x0, 0x3C52, 0x0, 0x632B, 0x3737, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3540, 0x3527, 0x3B63, }}, + {0x7950, {0x4D34, 0x0, 0x0, 0x6331, 0x0, 0x6330, 0x4144, 0x632D, 0x0, 0x0, 0x632F, 0x0, 0x0, 0x3D4B, 0x3F40, 0x632E, }}, + {0x7960, {0x632C, 0x0, 0x472A, 0x0, 0x0, 0x3E4D, 0x0, 0x0, 0x493C, 0x0, 0x0, 0x0, 0x0, 0x3A57, 0x0, 0x0, }}, + {0x7977, {0x4578, 0x0, 0x0, 0x6332, 0x0, 0x0, 0x0, 0x0, 0x6333, 0x6349, 0x3658, 0x0, 0x0, 0x4F3D, 0x4135, 0x0, }}, + {0x798A, {0x6334, 0x0, 0x0, 0x3252, 0x4477, 0x4A21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x799D, {0x6335, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x357A, 0x6336, 0x0, 0x0, 0x6338, 0x0, 0x0, }}, + {0x79AE, {0x6339, 0x0, 0x4729, 0x0, 0x0, 0x633A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x633B, 0x633C, 0x0, 0x0, 0x3659, }}, + {0x79BE, {0x3253, 0x4645, 0x3D28, 0x3B64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x633D, 0x0, 0x3D29, 0x0, 0x0, }}, + {0x79D1, {0x324A, 0x4943, 0x0, 0x0, 0x633E, 0x0, 0x0, 0x486B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4145, 0x0, }}, + {0x79E1, {0x6341, 0x0, 0x6342, 0x4769, 0x0, 0x3F41, 0x633F, 0x0, 0x4361, 0x0, 0x0, 0x6340, 0x0, 0x0, 0x0, 0x3E4E, }}, + {0x79FB, {0x305C, 0x0, 0x0, 0x0, 0x0, 0x3529, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6343, 0x0, 0x0, }}, + {0x7A0B, {0x4478, 0x0, 0x6344, 0x4047, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C2D, 0x0, 0x0, 0x4923, 0x6345, 0x6346, 0x4355, }}, + {0x7A1C, {0x4E47, 0x0, 0x0, 0x6348, 0x6347, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7A2E, {0x3C6F, 0x0, 0x0, 0x634A, 0x3070, 0x0, 0x0, 0x0, 0x0, 0x634D, 0x0, 0x0, 0x0, 0x634B, 0x3254, 0x374E, }}, + {0x7A3E, {0x634C, 0x3946, 0x3972, 0x0, 0x4A66, 0x634E, 0x0, 0x0, 0x4B54, 0x0, 0x0, 0x6350, 0x0, 0x0, 0x0, 0x4051, }}, + {0x7A4E, {0x314F, 0x323A, 0x302C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x634F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7A61, {0x6351, 0x6352, 0x3E77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6353, 0x0, 0x334F, 0x0, 0x0, 0x0, 0x0, 0x6355, }}, + {0x7A74, {0x376A, 0x0, 0x3566, 0x0, 0x0, 0x6356, 0x3675, 0x0, 0x0, 0x6357, 0x0, 0x407C, 0x0, 0x464D, 0x0, 0x4060, }}, + {0x7A84, {0x3A75, 0x0, 0x0, 0x0, 0x6358, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4362, 0x416B, }}, + {0x7A95, {0x635A, 0x635C, 0x6359, 0x635B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3722, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7AA9, {0x635D, 0x3726, 0x0, 0x0, 0x0, 0x3567, 0x4D52, 0x635F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6360, 0x0, 0x0, }}, + {0x7ABA, {0x312E, 0x0, 0x0, 0x0, 0x0, 0x6363, 0x0, 0x0, 0x0, 0x3376, 0x6362, 0x6361, 0x0, 0x6365, 0x635E, 0x0, }}, + {0x7ACA, {0x6366, 0x4E29, 0x0, 0x6367, 0x0, 0x6368, 0x0, 0x0, 0x5474, 0x636A, 0x0, 0x6369, 0x0, 0x0, 0x0, 0x636B, }}, + {0x7ADA, {0x636C, 0x0, 0x4E35, 0x636D, 0x0, 0x706F, 0x3E4F, 0x636E, 0x636F, 0x3D57, 0x0, 0x4638, 0x6370, 0x0, 0x0, 0x0, }}, + {0x7AEA, {0x4328, 0x0, 0x0, 0x6371, 0x0, 0x433C, 0x6372, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3625, 0x0, 0x513F, 0x435D, }}, + {0x7AFA, {0x3C33, 0x0, 0x0, 0x0, 0x0, 0x3448, 0x0, 0x0, 0x6373, 0x0, 0x6422, 0x0, 0x6376, 0x0, 0x3568, 0x0, }}, + {0x7B0A, {0x6375, 0x6424, 0x0, 0x0, 0x0, 0x6374, 0x0, 0x3E50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6378, 0x6379, }}, + {0x7B1B, {0x452B, 0x0, 0x0, 0x637A, 0x0, 0x335E, 0x0, 0x0, 0x0, 0x0, 0x3F5A, 0x4964, 0x0, 0x637C, 0x0, 0x0, }}, + {0x7B2C, {0x4268, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6377, 0x0, 0x637B, 0x637D, 0x0, 0x0, 0x3A7B, 0x0, 0x0, }}, + {0x7B45, {0x6426, 0x492E, 0x0, 0x4826, 0x4579, 0x0, 0x365A, 0x6425, 0x6423, 0x0, 0x4835, 0x637E, 0x435E, 0x457B, 0x0, 0x457A, }}, + {0x7B56, {0x3A76, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6438, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6428, }}, + {0x7B67, {0x642A, 0x0, 0x0, 0x0, 0x0, 0x642D, 0x0, 0x642E, 0x0, 0x642B, 0x642C, 0x0, 0x0, 0x6429, 0x6427, 0x0, }}, + {0x7B7A, {0x6421, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A4F, 0x3255, 0x0, 0x0, }}, + {0x7B8B, {0x6435, 0x0, 0x6432, 0x0, 0x6437, 0x0, 0x0, 0x6436, 0x0, 0x4773, 0x4C27, 0x0, 0x3B3B, 0x6430, 0x6439, 0x6434, }}, + {0x7B9C, {0x6433, 0x642F, 0x0, 0x6431, 0x0, 0x3449, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x433D, 0x0, }}, + {0x7BAD, {0x407D, 0x0, 0x0, 0x0, 0x4822, 0x0, 0x0, 0x643E, 0x0, 0x0, 0x0, 0x4824, 0x0, 0x0, 0x0, 0x0, }}, + {0x7BC0, {0x4061, 0x643B, 0x0, 0x0, 0x484F, 0x0, 0x643F, 0x4A53, 0x0, 0x435B, 0x0, 0x643A, 0x643C, 0x0, 0x0, 0x643D, }}, + {0x7BDD, {0x6440, 0x0, 0x0, 0x3C44, 0x0, 0x0, 0x0, 0x4646, 0x6445, 0x6444, 0x0, 0x0, 0x6441, 0x0, 0x0, 0x0, }}, + {0x7BED, {0x4F36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x644A, 0x0, 0x0, 0x644E, 0x644B, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7C00, {0x6447, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6448, 0x0, 0x0, 0x0, 0x0, 0x0, 0x644D, 0x0, 0x0, }}, + {0x7C11, {0x6442, 0x5255, 0x6449, 0x6443, 0x0, 0x0, 0x644C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6452, 0x0, }}, + {0x7C21, {0x344A, 0x0, 0x644F, 0x0, 0x0, 0x0, 0x6450, 0x0, 0x0, 0x6451, 0x6454, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7C37, {0x6453, 0x4876, 0x0, 0x0, 0x0, 0x0, 0x6455, 0x4E7C, 0x4A6D, 0x645A, 0x0, 0x0, 0x6457, 0x0, 0x0, 0x0, }}, + {0x7C4C, {0x6456, 0x4052, 0x0, 0x6459, 0x645B, 0x0, 0x0, 0x0, 0x6458, 0x0, 0x645F, 0x0, 0x645C, 0x0, 0x0, 0x0, }}, + {0x7C5F, {0x645D, 0x6446, 0x0, 0x0, 0x0, 0x645E, 0x6460, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6461, 0x0, 0x0, }}, + {0x7C73, {0x4A46, 0x0, 0x6462, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C62, 0x0, 0x0, 0x364E, 0x3729, }}, + {0x7C83, {0x6463, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A34, 0x0, 0x3F68, 0x0, 0x4C30, 0x0, 0x0, 0x6464, 0x0, 0x4E33, }}, + {0x7C95, {0x4774, 0x0, 0x4146, 0x4734, 0x0, 0x0, 0x3D4D, 0x0, 0x0, 0x0, 0x3040, 0x0, 0x6469, 0x6467, 0x0, 0x6465, }}, + {0x7CA5, {0x3421, 0x0, 0x3E51, 0x646A, 0x0, 0x0, 0x6468, 0x0, 0x6466, 0x646E, 0x0, 0x0, 0x646D, 0x646C, 0x646B, 0x0, }}, + {0x7CB9, {0x646F, 0x0, 0x0, 0x0, 0x6470, 0x403A, 0x0, 0x6471, 0x0, 0x6473, 0x0, 0x0, 0x6472, 0x0, 0x0, 0x0, }}, + {0x7CCA, {0x3852, 0x0, 0x0, 0x0, 0x4138, 0x0, 0x0, 0x0, 0x6475, 0x0, 0x0, 0x0, 0x457C, 0x0, 0x6474, 0x0, }}, + {0x7CDC, {0x6476, 0x0, 0x4A35, 0x416C, 0x3947, 0x0, 0x6477, 0x0, 0x0, 0x0, 0x0, 0x4E48, 0x0, 0x0, 0x0, 0x0, }}, + {0x7CEF, {0x6479, 0x0, 0x0, 0x647A, 0x0, 0x647B, 0x0, 0x647C, 0x0, 0x3B65, 0x0, 0x647D, 0x374F, 0x0, 0x0, 0x356A, }}, + {0x7D00, {0x352A, 0x0, 0x6521, 0x0, 0x4C73, 0x3948, 0x647E, 0x0, 0x0, 0x0, 0x6524, 0x4C66, 0x0, 0x473C, 0x0, 0x0, }}, + {0x7D10, {0x4933, 0x0, 0x0, 0x0, 0x3D63, 0x6523, 0x0, 0x3C53, 0x3949, 0x3B66, 0x3569, 0x4A36, 0x6522, 0x0, 0x0, 0x0, }}, + {0x7D20, {0x4147, 0x4B42, 0x3A77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B67, 0x445D, 0x0, 0x6527, 0x4E5F, }}, + {0x7D30, {0x3A59, 0x0, 0x6528, 0x3F42, 0x0, 0x652A, 0x0, 0x0, 0x0, 0x3E52, 0x3A30, 0x0, 0x0, 0x0, 0x0, 0x6529, }}, + {0x7D42, {0x3D2A, 0x383E, 0x4148, 0x6525, 0x652B, 0x0, 0x0, 0x0, 0x0, 0x6526, 0x3750, 0x0, 0x652E, 0x6532, 0x376B, 0x0, }}, + {0x7D56, {0x652D, 0x0, 0x0, 0x0, 0x0, 0x6536, 0x0, 0x0, 0x394A, 0x0, 0x0, 0x4D6D, 0x303C, 0x6533, 0x0, 0x0, }}, + {0x7D66, {0x356B, 0x0, 0x6530, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6531, 0x0, 0x0, 0x457D, 0x652F, 0x652C, 0x0, 0x3328, }}, + {0x7D76, {0x4064, 0x0, 0x0, 0x3828, 0x0, 0x0, 0x0, 0x6538, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7D89, {0x6535, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6537, 0x0, 0x0, 0x0, 0x6534, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7D99, {0x3751, 0x4233, 0x6539, 0x416E, 0x0, 0x0, 0x6546, 0x0, 0x0, 0x6542, 0x653C, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7DAB, {0x6540, 0x3C7A, 0x305D, 0x653B, 0x6543, 0x6547, 0x394B, 0x4C56, 0x0, 0x4456, 0x653D, 0x0, 0x0, 0x6545, 0x0, 0x653A, }}, + {0x7DBB, {0x433E, 0x0, 0x653F, 0x303D, 0x4C4A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x653E, 0x0, 0x0, 0x365B, }}, + {0x7DCB, {0x486C, 0x0, 0x0, 0x0, 0x416D, 0x0, 0x4E50, 0x3D6F, 0x0, 0x0, 0x656E, 0x0, 0x0, 0x6548, 0x0, 0x407E, }}, + {0x7DDC, {0x6544, 0x6549, 0x654B, 0x0, 0x4479, 0x654E, 0x0, 0x0, 0x654A, 0x0, 0x0, 0x0, 0x4A54, 0x344B, 0x0, 0x0, }}, + {0x7DEC, {0x4C4B, 0x0, 0x0, 0x305E, 0x0, 0x0, 0x654D, 0x0, 0x4E7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x654C, }}, + {0x7E01, {0x316F, 0x0, 0x0, 0x466C, 0x654F, 0x0, 0x0, 0x0, 0x6556, 0x6550, 0x6557, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7E12, {0x6553, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x477B, 0x0, 0x0, 0x3C4A, 0x6555, 0x0, 0x6552, }}, + {0x7E22, {0x6558, 0x6551, 0x0, 0x0, 0x3D44, 0x0, 0x0, 0x0, 0x0, 0x4B25, 0x0, 0x0, 0x3D4C, 0x0, 0x0, 0x6554, }}, + {0x7E32, {0x6560, 0x0, 0x0, 0x655C, 0x0, 0x655F, 0x0, 0x655D, 0x6561, 0x655B, 0x0, 0x6541, 0x4053, 0x0, 0x0, 0x484B, }}, + {0x7E43, {0x655E, 0x0, 0x0, 0x6559, 0x0, 0x0, 0x0, 0x4121, 0x3752, 0x0, 0x3D2B, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7E54, {0x3F25, 0x4136, 0x6564, 0x0, 0x0, 0x6566, 0x6567, 0x0, 0x0, 0x6563, 0x6565, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7E66, {0x655A, 0x6562, 0x0, 0x656A, 0x6569, 0x0, 0x0, 0x4B7A, 0x0, 0x0, 0x372B, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7E79, {0x6568, 0x0, 0x656C, 0x656B, 0x656F, 0x0, 0x6571, 0x0, 0x0, 0x3B3C, 0x656D, 0x0, 0x0, 0x0, 0x0, 0x6572, }}, + {0x7E89, {0x6573, 0x0, 0x0, 0x6574, 0x0, 0x657A, 0x453B, 0x6576, 0x0, 0x6575, 0x6577, 0x6578, 0x0, 0x6579, 0x0, 0x0, }}, + {0x7E9B, {0x657B, 0x657C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7F36, {0x344C, 0x0, 0x657D, 0x0, 0x657E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6621, }}, + {0x7F4C, {0x6622, 0x6623, 0x6624, 0x0, 0x6625, 0x6626, 0x0, 0x0, 0x6628, 0x6627, 0x0, 0x0, 0x6629, 0x0, 0x0, 0x0, }}, + {0x7F5F, {0x662A, 0x662B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x662E, 0x662C, 0x662D, 0x3A61, 0x3753, 0x0, 0x0, 0x4356, }}, + {0x7F70, {0x4833, 0x0, 0x3D70, 0x0, 0x0, 0x474D, 0x0, 0x486D, 0x662F, 0x586D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7F82, {0x6630, 0x6632, 0x0, 0x4D65, 0x6631, 0x6634, 0x6633, 0x0, 0x4D53, 0x0, 0x6635, 0x0, 0x487E, 0x0, 0x0, 0x0, }}, + {0x7F94, {0x6636, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6639, 0x0, 0x0, 0x6638, 0x6637, 0x0, 0x0, 0x0, 0x0, 0x663A, }}, + {0x7FA4, {0x3732, 0x0, 0x0, 0x0, 0x4122, 0x3541, 0x0, 0x0, 0x0, 0x0, 0x663E, 0x663B, 0x0, 0x0, 0x663C, 0x0, }}, + {0x7FB6, {0x663F, 0x0, 0x6640, 0x663D, 0x0, 0x0, 0x0, 0x3129, 0x0, 0x0, 0x0, 0x3227, 0x0, 0x0, 0x0, 0x6642, }}, + {0x7FC6, {0x6643, 0x0, 0x0, 0x0, 0x6644, 0x0, 0x4D62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3D2C, 0x0, 0x6646, 0x6645, }}, + {0x7FE0, {0x3F69, 0x6647, 0x0, 0x0, 0x0, 0x0, 0x6648, 0x0, 0x0, 0x6649, 0x0, 0x3465, 0x0, 0x0, 0x0, 0x0, }}, + {0x7FF0, {0x344D, 0x0, 0x0, 0x664A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x664B, 0x0, 0x4B5D, 0x4D63, 0x0, 0x0, 0x0, }}, + {0x8000, {0x4D54, 0x4F37, 0x0, 0x394D, 0x664E, 0x3C54, 0x664D, 0x0, 0x0, 0x0, 0x0, 0x664F, 0x3C29, 0x0, 0x0, 0x0, }}, + {0x8010, {0x4251, 0x0, 0x6650, 0x0, 0x0, 0x394C, 0x0, 0x4C57, 0x6651, 0x6652, 0x0, 0x0, 0x6653, 0x0, 0x0, 0x0, }}, + {0x8021, {0x6654, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6655, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8033, {0x3C2A, 0x0, 0x0, 0x4C6D, 0x0, 0x0, 0x0, 0x0, 0x6657, 0x0, 0x433F, 0x0, 0x6656, 0x0, 0x0, 0x0, }}, + {0x8046, {0x6659, 0x0, 0x0, 0x0, 0x6658, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x665A, 0x0, 0x0, 0x0, }}, + {0x8056, {0x403B, 0x0, 0x665B, 0x0, 0x665C, 0x0, 0x0, 0x0, 0x4A39, 0x665D, 0x0, 0x416F, 0x665E, 0x0, 0x0, 0x0, }}, + {0x8068, {0x665F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E7E, 0x6662, 0x0, 0x6661, 0x6660, 0x4430, 0x0, 0x6663, 0x3F26, }}, + {0x8079, {0x6664, 0x0, 0x0, 0x0, 0x6665, 0x4F38, 0x6666, 0x0, 0x0, 0x0, 0x0, 0x6667, 0x6669, 0x6668, 0x4825, 0x0, }}, + {0x8089, {0x4679, 0x0, 0x4F3E, 0x4829, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x666B, 0x0, 0x0, 0x3E53, 0x0, 0x492A, }}, + {0x809A, {0x666C, 0x666A, 0x0, 0x344E, 0x0, 0x0, 0x0, 0x3854, 0x3B68, 0x0, 0x0, 0x486E, 0x0, 0x0, 0x0, 0x382A, }}, + {0x80AA, {0x4B43, 0x0, 0x666F, 0x666D, 0x0, 0x394E, 0x0, 0x394F, 0x3069, 0x0, 0x3A68, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x80BA, {0x4759, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x305F, 0x6674, 0x0, 0x4340, 0x0, 0x0, 0x0, }}, + {0x80CC, {0x4758, 0x0, 0x425B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6676, 0x0, 0x0, 0x6672, 0x6675, 0x6670, }}, + {0x80DD, {0x6673, 0x4B26, 0x0, 0x0, 0x3855, 0x0, 0x0, 0x307D, 0x6671, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x80EF, {0x6678, 0x0, 0x6679, 0x0, 0x0, 0x4639, 0x0, 0x0, 0x0, 0x363B, 0x0, 0x0, 0x0, 0x6726, 0x473D, 0x0, }}, + {0x8102, {0x3B69, 0x0, 0x0, 0x363C, 0x4048, 0x4F46, 0x4C2E, 0x6677, 0x4054, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x811A, {0x3553, 0x667A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x667C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x667B, }}, + {0x812F, {0x667D, 0x0, 0x4326, 0x0, 0x473E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4431, 0x0, 0x0, 0x0, 0x0, 0x6723, }}, + {0x8146, {0x6722, 0x0, 0x0, 0x0, 0x0, 0x667E, 0x0, 0x0, 0x3F55, 0x0, 0x4965, 0x6725, 0x0, 0x6724, 0x3950, 0x4F53, }}, + {0x815F, {0x6735, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6729, 0x672A, 0x0, 0x0, 0x0, 0x0, 0x3C70, 0x0, 0x0, 0x6728, }}, + {0x8170, {0x3978, 0x6727, 0x0, 0x0, 0x672B, 0x0, 0x0, 0x0, 0x4432, 0x4A22, 0x4123, 0x0, 0x0, 0x0, 0x0, 0x425C, }}, + {0x8180, {0x672F, 0x0, 0x6730, 0x672C, 0x0, 0x0, 0x0, 0x0, 0x672D, 0x0, 0x672E, 0x0, 0x0, 0x0, 0x0, 0x3951, }}, + {0x8193, {0x6736, 0x0, 0x6732, 0x0, 0x0, 0x0, 0x0, 0x4966, 0x0, 0x4B6C, 0x4928, 0x0, 0x0, 0x6731, 0x0, 0x0, }}, + {0x81A3, {0x6734, 0x6733, 0x0, 0x0, 0x0, 0x4B44, 0x6737, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6738, 0x0, 0x0, }}, + {0x81B3, {0x4137, 0x0, 0x6739, 0x0, 0x0, 0x673B, 0x0, 0x673F, 0x0, 0x0, 0x673C, 0x673A, 0x473F, 0x673D, 0x0, 0x673E, }}, + {0x81C6, {0x3232, 0x0, 0x6745, 0x6740, 0x0, 0x0, 0x0, 0x6741, 0x0, 0x0, 0x0, 0x6742, 0x0, 0x4221, 0x0, 0x0, }}, + {0x81D8, {0x6744, 0x6743, 0x6746, 0x0, 0x0, 0x0, 0x0, 0x6747, 0x6748, 0x0, 0x0, 0x3F43, 0x0, 0x3269, 0x0, 0x6749, }}, + {0x81E8, {0x4E57, 0x0, 0x3C2B, 0x0, 0x0, 0x3D2D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B6A, 0x4357, 0x0, 0x0, 0x0, }}, + {0x81FA, {0x674A, 0x674B, 0x3131, 0x0, 0x674C, 0x0, 0x0, 0x674D, 0x674E, 0x0, 0x0, 0x674F, 0x0, 0x6750, 0x363D, 0x5A2A, }}, + {0x820A, {0x6751, 0x0, 0x4065, 0x6752, 0x3C4B, 0x0, 0x6753, 0x0, 0x5030, 0x0, 0x0, 0x0, 0x6754, 0x4A5E, 0x345C, 0x0, }}, + {0x821B, {0x4124, 0x3D58, 0x0, 0x4971, 0x3D2E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6755, 0x3952, }}, + {0x822B, {0x6756, 0x484C, 0x0, 0x6764, 0x0, 0x0, 0x0, 0x0, 0x6758, 0x0, 0x4249, 0x4775, 0x383F, 0x6757, 0x4125, 0x0, }}, + {0x8240, {0x6759, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x447A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8258, {0x675B, 0x675A, 0x675D, 0x0, 0x0, 0x675C, 0x0, 0x675E, 0x0, 0x0, 0x6760, 0x0, 0x675F, 0x0, 0x344F, 0x0, }}, + {0x8268, {0x6761, 0x0, 0x6762, 0x6763, 0x0, 0x0, 0x3A31, 0x4E49, 0x0, 0x6765, 0x3F27, 0x0, 0x0, 0x0, 0x3170, 0x6766, }}, + {0x8278, {0x6767, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6768, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x828B, {0x3072, 0x0, 0x6769, 0x0, 0x0, 0x0, 0x0, 0x676A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4967, 0x0, }}, + {0x829D, {0x3C47, 0x0, 0x676C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3329, 0x3032, 0x0, 0x0, 0x0, 0x0, 0x676B, 0x676E, }}, + {0x82AD, {0x474E, 0x0, 0x3F44, 0x0, 0x3256, 0x0, 0x4B27, 0x0, 0x0, 0x0, 0x0, 0x375D, 0x365C, 0x0, 0x676D, 0x0, }}, + {0x82BD, {0x326A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3423, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x82D1, {0x3171, 0x6772, 0x4E6A, 0x425D, 0x0, 0x0, 0x4944, 0x0, 0x677E, 0x0, 0x3257, 0x677C, 0x0, 0x677A, 0x6771, 0x0, }}, + {0x82E1, {0x676F, 0x0, 0x6770, 0x0, 0x3C63, 0x366C, 0x4377, 0x0, 0x0, 0x0, 0x4651, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x82F1, {0x3151, 0x0, 0x6774, 0x6773, 0x0, 0x0, 0x0, 0x0, 0x6779, 0x6775, 0x6778, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8302, {0x4C50, 0x6777, 0x3258, 0x337D, 0x677B, 0x0, 0x0, 0x677D, 0x0, 0x0, 0x0, 0x0, 0x3754, 0x0, 0x0, 0x0, }}, + {0x8316, {0x6823, 0x682C, 0x682D, 0x0, 0x0, 0x0, 0x302B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6834, 0x0, 0x0, }}, + {0x8328, {0x3071, 0x0, 0x0, 0x682B, 0x0, 0x0, 0x0, 0x682A, 0x0, 0x6825, 0x6824, 0x0, 0x6822, 0x6821, 0x4363, 0x0, }}, + {0x8338, {0x427B, 0x6827, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6826, 0x0, 0x0, 0x0, 0x0, 0x6829, 0x0, 0x0, }}, + {0x8349, {0x4170, 0x3755, 0x0, 0x0, 0x0, 0x0, 0x3141, 0x6828, 0x0, 0x3953, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4171, }}, + {0x8373, {0x683A, 0x0, 0x683B, 0x0, 0x3259, 0x0, 0x0, 0x0, 0x322E, 0x6838, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8385, {0x682E, 0x0, 0x6836, 0x0, 0x683D, 0x6837, 0x0, 0x0, 0x0, 0x6835, 0x0, 0x0, 0x0, 0x0, 0x6776, 0x0, }}, + {0x8396, {0x6833, 0x0, 0x0, 0x0, 0x682F, 0x0, 0x0, 0x0, 0x3450, 0x6831, 0x683C, 0x0, 0x6832, 0x0, 0x0, 0x0, }}, + {0x83A8, {0x683E, 0x0, 0x6830, 0x477C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D69, 0x0, 0x0, 0x0, 0x6839, 0x0, 0x0, }}, + {0x83BD, {0x684F, 0x0, 0x0, 0x0, 0x6847, 0x0, 0x0, 0x0, 0x3F7B, 0x0, 0x0, 0x0, 0x0, 0x3546, 0x0, 0x365D, }}, + {0x83CE, {0x6842, 0x0, 0x0, 0x0, 0x0, 0x325B, 0x0, 0x0, 0x3E54, 0x0, 0x6845, 0x0, 0x0, 0x0, 0x3A5A, 0x0, }}, + {0x83DF, {0x4551, 0x684A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A6E, 0x0, 0x6841, 0x0, 0x0, 0x0, }}, + {0x83EF, {0x325A, 0x3856, 0x4929, 0x684B, 0x0, 0x683F, 0x0, 0x0, 0x6848, 0x0, 0x0, 0x0, 0x6852, 0x0, 0x6843, 0x0, }}, + {0x8403, {0x6844, 0x463A, 0x0, 0x0, 0x6849, 0x0, 0x0, 0x0, 0x6846, 0x4B28, 0x684C, 0x3060, 0x0, 0x0, 0x0, 0x0, }}, + {0x8413, {0x6840, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x684E, 0x0, 0x684D, }}, + {0x8429, {0x476B, 0x6854, 0x0, 0x685F, 0x0, 0x0, 0x0, 0x0, 0x337E, 0x0, 0x0, 0x0, 0x6862, 0x0, 0x0, 0x6850, }}, + {0x843C, {0x6855, 0x4D6E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x685E, 0x0, 0x0, 0x4D55, 0x0, 0x0, }}, + {0x844E, {0x4E2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4378, 0x0, 0x0, 0x0, 0x336B, 0x0, 0x0, }}, + {0x8461, {0x4972, 0x6864, 0x4621, 0x0, 0x0, 0x3031, 0x0, 0x0, 0x685D, 0x0, 0x6859, 0x4172, 0x6853, 0x685B, 0x6860, 0x0, }}, + {0x8471, {0x472C, 0x0, 0x0, 0x0, 0x302A, 0x0, 0x6858, 0x0, 0x6861, 0x4978, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8482, {0x685C, 0x0, 0x6857, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E55, 0x0, 0x0, 0x0, 0x0, 0x3D2F, 0x0, }}, + {0x8494, {0x3C2C, 0x0, 0x0, 0x0, 0x0, 0x4C58, 0x0, 0x0, 0x4947, 0x0, 0x0, 0x6867, 0x0, 0x6870, 0x0, 0x0, }}, + {0x84AD, {0x685A, 0x0, 0x0, 0x0, 0x0, 0x3377, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E78, 0x6865, 0x0, 0x686A, 0x4173, }}, + {0x84BF, {0x6866, 0x0, 0x686D, 0x0, 0x0, 0x435F, 0x0, 0x686E, 0x0, 0x0, 0x4D56, 0x6863, 0x3338, 0x0, 0x6869, 0x0, }}, + {0x84D0, {0x686C, 0x4C2C, 0x0, 0x0, 0x0, 0x0, 0x686F, 0x0, 0x0, 0x6868, 0x686B, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x84EC, {0x4B29, 0x0, 0x4F21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6873, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x84FC, {0x687A, 0x0, 0x0, 0x6872, 0x3C43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6851, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8511, {0x4A4E, 0x0, 0x4C22, 0x6879, 0x6878, 0x0, 0x6874, 0x6875, 0x0, 0x3136, 0x0, 0x0, 0x0, 0x0, 0x6877, 0x0, }}, + {0x8521, {0x6871, 0x0, 0x0, 0x0, 0x0, 0x4455, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6876, 0x307E, 0x0, 0x0, 0x0, }}, + {0x8535, {0x4222, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A43, 0x0, 0x0, 0x687B, 0x6921, 0x0, 0x4859, 0x0, }}, + {0x8548, {0x687E, 0x3E56, 0x3C49, 0x6923, 0x0, 0x0, 0x363E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6924, 0x0, 0x4979, }}, + {0x8558, {0x687D, 0x0, 0x6856, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x687C, 0x0, 0x0, 0x0, 0x0, }}, + {0x8568, {0x4F4F, 0x4622, 0x4973, 0x0, 0x0, 0x692B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6931, }}, + {0x857E, {0x6932, 0x0, 0x6925, 0x0, 0x0, 0x0, 0x4776, 0x0, 0x0, 0x692F, 0x6927, 0x0, 0x6929, 0x0, 0x0, 0x0, }}, + {0x8590, {0x6933, 0x6928, 0x0, 0x0, 0x692C, 0x0, 0x0, 0x3172, 0x0, 0x4665, 0x0, 0x692D, 0x6930, 0x0, 0x0, 0x0, }}, + {0x85A4, {0x6926, 0x0, 0x4126, 0x0, 0x692A, 0x3B27, 0x3F45, 0x3730, 0x4C74, 0x0, 0x4C79, 0x3D72, 0x0, 0x0, 0x0, 0x0, }}, + {0x85B9, {0x6937, 0x6935, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4F4E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x85C9, {0x6934, 0x0, 0x0, 0x0, 0x4D75, 0x0, 0x6936, 0x6938, 0x0, 0x0, 0x0, 0x0, 0x6939, 0x0, 0x0, 0x0, }}, + {0x85DC, {0x693C, 0x693A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4623, 0x693B, 0x0, 0x0, 0x0, 0x484D, 0x692E, 0x0, }}, + {0x85F7, {0x3D73, 0x0, 0x693D, 0x6942, 0x4174, 0x0, 0x0, 0x6941, 0x0, 0x0, 0x0, 0x6922, 0x0, 0x0, 0x0, 0x6943, }}, + {0x8607, {0x4149, 0x0, 0x0, 0x693E, 0x6940, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x693F, 0x0, 0x0, 0x5D31, }}, + {0x8617, {0x5D22, 0x0, 0x0, 0x6945, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6944, 0x0, 0x0, 0x0, 0x0, }}, + {0x862D, {0x4D76, 0x0, 0x623C, 0x6946, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x863F, {0x6947, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6948, 0x3857, }}, + {0x8650, {0x3554, 0x0, 0x0, 0x0, 0x694A, 0x515D, 0x0, 0x0, 0x0, 0x0, 0x3575, 0x0, 0x4E3A, 0x0, 0x3673, 0x694B, }}, + {0x8667, {0x694C, 0x0, 0x0, 0x0, 0x436E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x694D, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8679, {0x467A, 0x0, 0x303A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x868A, {0x3263, 0x6952, 0x6953, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x694E, 0x0, 0x3B3D, 0x0, 0x0, 0x0, 0x0, }}, + {0x86A3, {0x694F, 0x4742, 0x0, 0x0, 0x0, 0x0, 0x6950, 0x6951, 0x695B, 0x0, 0x0, 0x0, 0x6955, 0x6958, 0x0, 0x0, }}, + {0x86B6, {0x6954, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6956, 0x0, }}, + {0x86C6, {0x6957, 0x3C58, 0x0, 0x6959, 0x0, 0x4341, 0x0, 0x3756, 0x3342, 0x0, 0x0, 0x0, 0x0, 0x0, 0x695C, 0x0, }}, + {0x86D9, {0x333F, 0x0, 0x6961, 0x0, 0x0, 0x695D, 0x6960, 0x0, 0x0, 0x0, 0x0, 0x483A, 0x0, 0x0, 0x0, 0x0, }}, + {0x86E9, {0x695E, 0x0, 0x0, 0x695F, 0x4948, 0x485A, 0x6962, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x427D, }}, + {0x86F9, {0x696C, 0x0, 0x6968, 0x0, 0x0, 0x326B, 0x0, 0x6966, 0x0, 0x4B2A, 0x6967, 0x0, 0x0, 0x6964, 0x0, 0x6965, }}, + {0x8709, {0x696A, 0x696D, 0x0, 0x0, 0x696B, 0x0, 0x0, 0x0, 0x6969, 0x6963, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4358, }}, + {0x871A, {0x6974, 0x0, 0x4C2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6972, 0x0, 0x0, 0x0, 0x6973, }}, + {0x8734, {0x696E, 0x0, 0x0, 0x6970, 0x0, 0x0, 0x0, 0x6971, 0x0, 0x0, 0x0, 0x696F, 0x0, 0x0, 0x0, 0x0, }}, + {0x8749, {0x4066, 0x0, 0x4F39, 0x6978, 0x0, 0x6979, 0x0, 0x0, 0x0, 0x0, 0x6A21, 0x0, 0x3F2A, 0x0, 0x697B, 0x0, }}, + {0x8759, {0x697E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6976, 0x6975, 0x0, 0x0, 0x6A22, 0x0, 0x0, 0x325C, 0x0, 0x697C, }}, + {0x876A, {0x6A23, 0x0, 0x0, 0x0, 0x697D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x697A, 0x0, 0x4433, 0x0, 0x6977, 0x0, }}, + {0x877F, {0x4768, 0x0, 0x0, 0x6A27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D3B, 0x0, }}, + {0x879F, {0x6A26, 0x0, 0x0, 0x6A25, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A2E, 0x0, 0x0, 0x0, }}, + {0x87AF, {0x6A28, 0x0, 0x0, 0x0, 0x6A30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D66, 0x6A33, 0x0, 0x6A2A, 0x0, }}, + {0x87C0, {0x6A2B, 0x0, 0x0, 0x0, 0x6A2F, 0x0, 0x6A32, 0x6A31, 0x0, 0x0, 0x0, 0x6A29, 0x0, 0x0, 0x0, 0x0, }}, + {0x87D0, {0x6A2C, 0x0, 0x6A3D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x87E0, {0x6A36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A34, }}, + {0x87F2, {0x6A35, 0x0, 0x0, 0x0, 0x6A3A, 0x6A3B, 0x0, 0x332A, 0x0, 0x3542, 0x0, 0x0, 0x6A39, 0x0, 0x0, 0x0, }}, + {0x8805, {0x6A24, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A38, 0x6A3C, 0x6A37, 0x0, 0x6A3E, 0x0, 0x0, 0x0, }}, + {0x8815, {0x6A40, 0x6A3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A42, 0x6A41, 0x695A, 0x0, }}, + {0x8827, {0x6A46, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A43, 0x0, 0x0, 0x0, 0x0, 0x6A44, }}, + {0x8839, {0x6A45, 0x0, 0x6A47, 0x0, 0x0, 0x0, 0x0, 0x376C, 0x0, 0x6A49, 0x0, 0x6A48, 0x0, 0x3D30, 0x0, 0x0, }}, + {0x884C, {0x3954, 0x5E27, 0x0, 0x0, 0x0, 0x0, 0x6A4A, 0x3D51, 0x0, 0x0, 0x0, 0x3339, 0x0, 0x6A4B, 0x0, 0x3152, }}, + {0x885D, {0x3E57, 0x6A4C, 0x0, 0x0, 0x3955, 0x6A4D, 0x3061, 0x0, 0x0, 0x0, 0x0, 0x493D, 0x0, 0x0, 0x6A4E, 0x0, }}, + {0x8870, {0x3F6A, 0x0, 0x6A55, 0x0, 0x0, 0x6A52, 0x0, 0x436F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A53, 0x6A50, 0x365E, }}, + {0x8881, {0x6A4F, 0x6A56, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3736, 0x0, 0x0, 0x425E, 0x0, 0x6A5C, 0x0, 0x0, 0x0, }}, + {0x8892, {0x6A58, 0x0, 0x0, 0x0, 0x4235, 0x6A57, 0x0, 0x6A5A, 0x0, 0x0, 0x0, 0x0, 0x6A51, 0x0, 0x0, 0x0, }}, + {0x88A2, {0x6A5B, 0x0, 0x6A5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x486F, 0x0, 0x0, 0x6A59, 0x0, 0x6A5E, 0x6A60, }}, + {0x88B4, {0x3853, 0x6A54, 0x0, 0x3041, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A5F, 0x0, 0x3A5B, 0x4E76, 0x6A61, }}, + {0x88C4, {0x6A62, 0x4175, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E22, 0x0, 0x0, 0x0, 0x0, }}, + {0x88D4, {0x6A63, 0x4D35, 0x0, 0x0, 0x6A64, 0x6A65, 0x0, 0x0, 0x4A64, 0x6A66, 0x0, 0x3A40, 0x0, 0x4E23, 0x0, 0x0, }}, + {0x88E8, {0x6A6B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A6C, 0x3E58, 0x6A6A, 0x0, 0x0, 0x0, }}, + {0x88F8, {0x4D67, 0x6A67, 0x0, 0x0, 0x6A69, 0x403D, 0x3F7E, 0x0, 0x0, 0x0, 0x6A68, 0x0, 0x6A6D, 0x0, 0x0, 0x4A23, }}, + {0x890A, {0x6A6F, 0x0, 0x6A6E, 0x0, 0x0, 0x0, 0x336C, 0x0, 0x4B2B, 0x6A70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x891D, {0x6A7C, 0x6A72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A73, 0x0, 0x0, 0x0, 0x0, 0x6A74, 0x6A75, 0x0, }}, + {0x8936, {0x6A79, 0x0, 0x6A7A, 0x0, 0x0, 0x6A78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6A76, 0x0, 0x6A71, 0x6A77, 0x0, }}, + {0x894C, {0x6A7B, 0x7037, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3228, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x895E, {0x6A7E, 0x365F, 0x6A7D, 0x0, 0x0, 0x0, 0x6B22, 0x0, 0x6B21, 0x0, 0x0, 0x0, 0x6B24, 0x0, 0x0, 0x6B23, }}, + {0x896F, {0x6B25, 0x0, 0x0, 0x3D31, 0x0, 0x6B26, 0x0, 0x0, 0x6B27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B28, }}, + {0x897F, {0x403E, 0x0, 0x4D57, 0x0, 0x6B29, 0x0, 0x0, 0x4A24, 0x4746, 0x6B2A, 0x0, 0x6B2B, 0x382B, 0x0, 0x0, 0x0, }}, + {0x898F, {0x352C, 0x0, 0x0, 0x0, 0x6B2C, 0x0, 0x0, 0x3B6B, 0x4741, 0x6B2D, 0x0, 0x3350, 0x0, 0x0, 0x0, 0x0, }}, + {0x89A1, {0x6B2E, 0x0, 0x0, 0x0, 0x0, 0x6B30, 0x4D77, 0x0, 0x6B2F, 0x3F46, 0x0, 0x6B31, 0x0, 0x0, 0x6B32, 0x0, }}, + {0x89B2, {0x6B33, 0x3451, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B34, 0x0, 0x0, 0x6B35, 0x0, 0x6B36, 0x6B37, 0x0, }}, + {0x89D2, {0x3351, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B38, 0x0, 0x6B39, 0x6B3A, 0x0, 0x0, 0x0, 0x0, }}, + {0x89E3, {0x3272, 0x0, 0x0, 0x3F28, 0x6B3B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x89F4, {0x6B3C, 0x0, 0x0, 0x0, 0x6B3D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3840, 0x0, 0x447B, 0x6B3E, }}, + {0x8A08, {0x3757, 0x0, 0x3F56, 0x0, 0x6B41, 0x0, 0x4624, 0x0, 0x6B40, 0x0, 0x0, 0x3731, 0x0, 0x0, 0x6B3F, 0x4277, }}, + {0x8A18, {0x352D, 0x0, 0x0, 0x6B42, 0x0, 0x6B43, 0x0, 0x3E59, 0x0, 0x0, 0x0, 0x376D, 0x0, 0x6B44, 0x0, 0x0, }}, + {0x8A2A, {0x4B2C, 0x0, 0x0, 0x405F, 0x0, 0x0, 0x0, 0x3576, 0x0, 0x4C75, 0x414A, 0x0, 0x6B45, 0x0, 0x0, 0x0, }}, + {0x8A3A, {0x3F47, 0x4370, 0x3E5A, 0x0, 0x0, 0x0, 0x0, 0x6B46, 0x0, 0x0, 0x0, 0x0, 0x6B49, 0x0, 0x6B4A, 0x0, }}, + {0x8A50, {0x3A3E, 0x4242, 0x6B48, 0x0, 0x3E5B, 0x493E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B47, 0x0, 0x0, 0x3B6C, 0x0, }}, + {0x8A60, {0x3153, 0x0, 0x6B4E, 0x3758, 0x0, 0x0, 0x3B6E, 0x0, 0x0, 0x3B6D, 0x0, 0x4F4D, 0x6B4D, 0x6B4C, 0x4127, 0x0, }}, + {0x8A70, {0x354D, 0x4F43, 0x333A, 0x3E5C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B4B, 0x0, 0x0, 0x0, }}, + {0x8A82, {0x6B50, 0x0, 0x6B51, 0x6B4F, 0x0, 0x3858, 0x0, 0x4D40, 0x0, 0x0, 0x3B6F, 0x4727, 0x0, 0x0, 0x0, 0x6B54, }}, + {0x8A93, {0x4040, 0x0, 0x4342, 0x0, 0x0, 0x4D36, 0x0, 0x6B57, 0x0, 0x0, 0x0, 0x386C, 0x0, 0x403F, 0x6B53, 0x0, }}, + {0x8AA3, {0x6B58, 0x386D, 0x6B55, 0x6B56, 0x0, 0x6B52, 0x0, 0x0, 0x0, 0x4062, 0x4649, 0x0, 0x0, 0x432F, 0x0, 0x325D, }}, + {0x8AB9, {0x4870, 0x0, 0x0, 0x3543, 0x0, 0x0, 0x4434, 0x0, 0x0, 0x6B5B, 0x0, 0x6B59, 0x0, 0x0, 0x434C, 0x0, }}, + {0x8ACB, {0x4041, 0x3452, 0x6B5A, 0x0, 0x3F5B, 0x0, 0x0, 0x4E4A, 0x0, 0x0, 0x0, 0x4F40, 0x0, 0x0, 0x0, 0x6B5C, }}, + {0x8ADB, {0x6B67, 0x4435, 0x0, 0x6B66, 0x0, 0x6B63, 0x6B6B, 0x6B64, 0x0, 0x6B60, 0x0, 0x447C, 0x6B5F, 0x0, 0x0, 0x0, }}, + {0x8AEB, {0x6B5D, 0x0, 0x4D21, 0x3B70, 0x0, 0x0, 0x6B61, 0x0, 0x6B5E, 0x0, 0x0, 0x0, 0x6B65, 0x3D74, 0x0, 0x3841, }}, + {0x8AFE, {0x427A, 0x0, 0x4B45, 0x315A, 0x3062, 0x0, 0x4625, 0x0, 0x0, 0x6B69, 0x0, 0x0, 0x0, 0x0, 0x6B68, 0x0, }}, + {0x8B0E, {0x4666, 0x0, 0x6B6D, 0x0, 0x0, 0x0, 0x6B62, 0x0, 0x6B6C, 0x6B6E, 0x0, 0x382C, 0x6B6A, 0x3956, 0x0, 0x3C55, }}, + {0x8B20, {0x6B6F, 0x4D58, 0x0, 0x0, 0x0, 0x0, 0x6B72, 0x0, 0x6B75, 0x0, 0x0, 0x6B73, 0x4935, 0x0, 0x0, 0x0, }}, + {0x8B33, {0x6B70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3660, 0x0, 0x0, 0x0, 0x0, 0x6B74, 0x0, 0x0, 0x6B76, 0x0, }}, + {0x8B49, {0x6B7A, 0x0, 0x0, 0x6B77, 0x0, 0x6B79, 0x6B78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6B7B, 0x0, 0x3C31, }}, + {0x8B5A, {0x6B7D, 0x6B7C, 0x4968, 0x0, 0x0, 0x6C21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3759, 0x0, 0x0, 0x0, }}, + {0x8B6B, {0x6B7E, 0x6C22, 0x0, 0x0, 0x6C23, 0x3544, 0x6641, 0x3E79, 0x0, 0x6C24, 0x0, 0x0, 0x386E, 0x0, 0x0, 0x0, }}, + {0x8B7D, {0x6C25, 0x0, 0x0, 0x6C26, 0x0, 0x0, 0x3B3E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5A4E, 0x0, 0x6C27, }}, + {0x8B8E, {0x6C28, 0x0, 0x3D32, 0x0, 0x6C29, 0x6C2A, 0x0, 0x0, 0x6C2B, 0x0, 0x0, 0x6C2C, 0x6C2D, 0x0, 0x0, 0x0, }}, + {0x8C37, {0x432B, 0x0, 0x0, 0x6C2E, 0x0, 0x0, 0x0, 0x0, 0x6C30, 0x0, 0x6C2F, 0x0, 0x0, 0x0, 0x0, 0x4626, }}, + {0x8C48, {0x6C31, 0x0, 0x4B2D, 0x0, 0x6C32, 0x0, 0x6C33, 0x0, 0x6C34, 0x0, 0x0, 0x0, 0x0, 0x6C35, 0x0, 0x0, }}, + {0x8C5A, {0x465A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3E5D, 0x6C36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8C6A, {0x396B, 0x502E, 0x6C37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C38, 0x493F, }}, + {0x8C7A, {0x6C39, 0x0, 0x6C41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C3A, 0x0, 0x0, 0x6C3C, 0x0, 0x0, 0x0, 0x6C3B, }}, + {0x8C8A, {0x6C3D, 0x0, 0x4B46, 0x6C3E, 0x6C3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C40, 0x0, 0x0, 0x0, 0x6C42, 0x0, }}, + {0x8C9D, {0x332D, 0x4467, 0x0, 0x4969, 0x3A62, 0x3957, 0x0, 0x0, 0x0, 0x0, 0x494F, 0x325F, 0x484E, 0x6C45, 0x3453, 0x4055, }}, + {0x8CAD, {0x6C44, 0x6C49, 0x4379, 0x4C63, 0x0, 0x6C47, 0x6C48, 0x352E, 0x0, 0x6C4A, 0x4763, 0x425F, 0x0, 0x0, 0x4871, 0x453D, }}, + {0x8CBD, {0x6C46, 0x0, 0x4B47, 0x326C, 0x6C4C, 0x4F28, 0x4442, 0x4F45, 0x0, 0x0, 0x3B71, 0x6C4B, 0x0, 0x4231, 0x0, 0x0, }}, + {0x8CCD, {0x6C5C, 0x4128, 0x0, 0x0, 0x4678, 0x0, 0x4950, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C4F, 0x3B3F, 0x3B72, }}, + {0x8CDE, {0x3E5E, 0x0, 0x4765, 0x0, 0x382D, 0x6C4E, 0x6C4D, 0x0, 0x496A, 0x0, 0x0, 0x0, 0x3C41, 0x0, 0x0, 0x4552, }}, + {0x8CFA, {0x6C51, 0x6C52, 0x3958, 0x6C50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C53, 0x6C54, 0x0, 0x6C56, 0x4223, 0x0, }}, + {0x8D0A, {0x6C55, 0x3466, 0x0, 0x6C58, 0x0, 0x6C57, 0x6C59, 0x0, 0x0, 0x6C5B, 0x6C5D, 0x0, 0x6C5E, 0x0, 0x0, 0x0, }}, + {0x8D64, {0x4056, 0x0, 0x3C4F, 0x6C5F, 0x0, 0x0, 0x0, 0x3352, 0x0, 0x6C60, 0x0, 0x0, 0x4176, 0x6C61, 0x0, 0x6C62, }}, + {0x8D74, {0x496B, 0x0, 0x0, 0x352F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C63, 0x0, 0x0, }}, + {0x8D85, {0x4436, 0x0, 0x0, 0x0, 0x0, 0x315B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8D99, {0x6C64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3C71, 0x0, 0x0, 0x0, 0x0, 0x3F76, }}, + {0x8DB3, {0x422D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C67, 0x0, 0x0, 0x0, 0x6C66, 0x0, 0x0, 0x0, 0x6C65, }}, + {0x8DCB, {0x6C6D, 0x6C6B, 0x0, 0x0, 0x6C68, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C6A, 0x0, 0x0, 0x0, 0x6C69, }}, + {0x8DDB, {0x6C6C, 0x0, 0x3577, 0x0, 0x6C70, 0x0, 0x4057, 0x0, 0x6C71, 0x0, 0x0, 0x0, 0x0, 0x3859, 0x0, 0x6C6E, }}, + {0x8DEB, {0x6C6F, 0x0, 0x0, 0x0, 0x4F29, 0x0, 0x0, 0x0, 0x4437, 0x0, 0x4129, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8DFC, {0x6C72, 0x0, 0x0, 0x6C75, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C73, 0x6C74, 0x4D59, 0x0, }}, + {0x8E0F, {0x4627, 0x6C78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6C76, 0x6C77, }}, + {0x8E1F, {0x6C79, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D29, 0x0, 0x0, 0x0, 0x0, }}, + {0x8E30, {0x6C7C, 0x0, 0x0, 0x0, 0x6C7D, 0x6C7B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8E42, {0x6C7A, 0x0, 0x447D, 0x0, 0x0, 0x6D21, 0x6D25, 0x6D22, 0x6C7E, 0x0, 0x6D23, 0x0, 0x0, 0x0, 0x6D24, 0x0, }}, + {0x8E55, {0x6D2B, 0x0, 0x0, 0x0, 0x6D26, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4058, 0x6D28, 0x0, 0x0, 0x6D2A, 0x6D27, }}, + {0x8E72, {0x6D2D, 0x0, 0x3D33, 0x0, 0x6D2C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D2E, 0x0, 0x0, 0x0, 0x0, 0x6D2F, }}, + {0x8E84, {0x6D32, 0x6D31, 0x0, 0x6D30, 0x0, 0x0, 0x6D34, 0x6D33, 0x0, 0x4C76, 0x0, 0x0, 0x0, 0x6D36, 0x0, 0x6D35, }}, + {0x8E94, {0x6D37, 0x0, 0x0, 0x0, 0x0, 0x6D38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D3A, 0x0, 0x0, }}, + {0x8EAA, {0x6D39, 0x3F48, 0x6D3B, 0x0, 0x0, 0x366D, 0x6D3C, 0x6D3E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8EBE, {0x6D3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D40, 0x6D3D, 0x0, 0x6D41, 0x0, 0x3C56, 0x6D42, 0x3530, 0x3733, }}, + {0x8ED2, {0x382E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D43, 0x0, 0x0, 0x0, 0x4670, 0x0, 0x0, }}, + {0x8EE2, {0x453E, 0x6D44, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D47, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8EF8, {0x3C34, 0x0, 0x0, 0x6D46, 0x6D45, 0x375A, 0x6D48, 0x0, 0x0, 0x0, 0x0, 0x3353, 0x0, 0x6D4A, 0x0, 0x0, }}, + {0x8F09, {0x3A5C, 0x6D49, 0x0, 0x6D52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D4C, 0x6D4E, 0x4A65, 0x6D4B, 0x0, 0x0, 0x0, }}, + {0x8F19, {0x6D4D, 0x0, 0x6D51, 0x6D4F, 0x3531, 0x0, 0x6D50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D53, 0x0, 0x0, }}, + {0x8F29, {0x475A, 0x4E58, 0x0, 0x0, 0x0, 0x0, 0x3D34, 0x0, 0x0, 0x0, 0x6D54, 0x0, 0x0, 0x0, 0x0, 0x4D22, }}, + {0x8F39, {0x6D56, 0x0, 0x6D55, 0x0, 0x0, 0x6D59, 0x4D41, 0x0, 0x0, 0x6D58, 0x0, 0x336D, 0x6D57, 0x6D5C, 0x0, 0x0, }}, + {0x8F49, {0x6D5B, 0x0, 0x0, 0x6D5A, 0x4532, 0x6D5D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D5E, 0x0, }}, + {0x8F5C, {0x6D5F, 0x0, 0x0, 0x396C, 0x0, 0x3725, 0x6D60, 0x6D61, 0x6D62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8F9B, {0x3F49, 0x6D63, 0x0, 0x3C2D, 0x6D64, 0x0, 0x0, 0x0, 0x6D65, 0x0, 0x0, 0x0, 0x5221, 0x517E, 0x0, 0x0, }}, + {0x8FAD, {0x6D66, 0x6570, 0x6D67, 0x4324, 0x3F2B, 0x4740, 0x0, 0x0, 0x0, 0x0, 0x6D68, 0x0, 0x0, 0x4A55, 0x4454, 0x397E, }}, + {0x8FBF, {0x4329, 0x0, 0x0, 0x312A, 0x0, 0x4B78, 0x3F57, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x375E, }}, + {0x8FD1, {0x3661, 0x0, 0x0, 0x4A56, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6D69, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x8FE2, {0x6D6B, 0x0, 0x0, 0x6D6A, 0x3260, 0x0, 0x0, 0x4676, 0x6D6C, 0x4777, 0x0, 0x4533, 0x0, 0x6D6D, 0x3D52, 0x0, }}, + {0x8FF4, {0x6D6F, 0x0, 0x0, 0x4C42, 0x6D7E, 0x6D71, 0x6D72, 0x0, 0x0, 0x4449, 0x0, 0x0, 0x4260, 0x4177, 0x0, 0x4628, }}, + {0x9005, {0x6D70, 0x3555, 0x0, 0x0, 0x0, 0x0, 0x6D79, 0x0, 0x6D76, 0x6E25, 0x4629, 0x4360, 0x6D73, 0x0, 0x447E, 0x4553, }}, + {0x9015, {0x6D74, 0x6D78, 0x3F60, 0x0, 0x4767, 0x444C, 0x0, 0x0, 0x4042, 0x6D77, 0x422E, 0x4224, 0x6D75, 0x3029, 0x4F22, 0x0, }}, + {0x9027, {0x6D7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4261, 0x0, 0x0, 0x3D35, 0x3F4A, 0x0, 0x0, 0x6D7C, 0x6D7B, }}, + {0x9038, {0x306F, 0x6D7D, 0x0, 0x0, 0x492F, 0x0, 0x6E27, 0x0, 0x0, 0x465B, 0x3F6B, 0x0, 0x0, 0x4359, 0x0, 0x3678, }}, + {0x9049, {0x6E26, 0x4D37, 0x313F, 0x0, 0x4A57, 0x3261, 0x6E21, 0x6E22, 0x6E23, 0x6E24, 0x463B, 0x4323, 0x3063, 0x6E28, 0x0, 0x6E29, }}, + {0x9059, {0x7423, 0x0, 0x0, 0x423D, 0x0, 0x6E2A, 0x0, 0x3173, 0x414C, 0x0, 0x382F, 0x0, 0x4D5A, 0x0, 0x0, 0x6E2B, }}, + {0x9069, {0x452C, 0x0, 0x0, 0x0, 0x4178, 0x3C57, 0x6E2C, 0x0, 0x0, 0x6E2F, 0x0, 0x0, 0x3D65, 0x6E2D, 0x412B, 0x412A, }}, + {0x907A, {0x3064, 0x0, 0x4E4B, 0x6E31, 0x0, 0x4872, 0x6E33, 0x6E32, 0x6E30, 0x6364, 0x3454, 0x0, 0x0, 0x6D6E, 0x0, 0x6E35, }}, + {0x908A, {0x6E34, 0x0, 0x0, 0x0, 0x0, 0x6E36, 0x0, 0x4D38, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x90A3, {0x4661, 0x0, 0x0, 0x4B2E, 0x0, 0x6E37, 0x0, 0x3C59, 0x0, 0x0, 0x0, 0x0, 0x6E38, 0x0, 0x6E39, 0x0, }}, + {0x90B5, {0x6E3A, 0x0, 0x0, 0x4521, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x306A, 0x0, 0x0, 0x0, }}, + {0x90CA, {0x3959, 0x0, 0x0, 0x0, 0x4F3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x90DB, {0x6E3E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3734, 0x6E3B, 0x0, 0x6E3C, 0x0, 0x0, 0x0, 0x4974, 0x0, 0x0, }}, + {0x90ED, {0x3354, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4D39, 0x0, 0x363F, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x90FD, {0x4554, 0x0, 0x0, 0x0, 0x0, 0x6E3F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9112, {0x6E40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x912D, {0x4522, 0x0, 0x0, 0x6E43, 0x0, 0x6E42, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9149, {0x4653, 0x6E44, 0x3D36, 0x3C60, 0x475B, 0x4371, 0x0, 0x0, 0x0, 0x3C72, 0x0, 0x3F6C, 0x0, 0x6E45, 0x0, 0x6E46, }}, + {0x9162, {0x3F5D, 0x6E47, 0x0, 0x6E48, 0x0, 0x0, 0x0, 0x6E49, 0x4D6F, 0x0, 0x3D37, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9172, {0x6E4B, 0x6E4A, 0x0, 0x395A, 0x0, 0x3973, 0x3B40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9182, {0x6E4E, 0x0, 0x0, 0x0, 0x0, 0x3D66, 0x0, 0x6E4D, 0x0, 0x6E4C, 0x0, 0x4269, 0x0, 0x0, 0x386F, 0x0, }}, + {0x9192, {0x4043, 0x0, 0x0, 0x0, 0x0, 0x4830, 0x0, 0x0, 0x0, 0x0, 0x3D39, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x91A2, {0x6E4F, 0x0, 0x3E5F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E52, 0x6E50, 0x0, 0x0, 0x0, 0x6E51, 0x0, 0x0, }}, + {0x91B4, {0x6E54, 0x6E53, 0x0, 0x0, 0x3E7A, 0x0, 0x6E55, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E56, 0x6E57, 0x0, 0x0, }}, + {0x91C6, {0x4850, 0x3A53, 0x3C61, 0x6E58, 0x0, 0x6E59, 0x4E24, 0x3D45, 0x4C6E, 0x4E4C, 0x6E5A, 0x3662, 0x0, 0x0, 0x0, 0x0, }}, + {0x91D6, {0x6E5B, 0x0, 0x4523, 0x0, 0x0, 0x6E5E, 0x3378, 0x3F4B, 0x0, 0x6E5C, 0x0, 0x6E5D, 0x0, 0x4460, 0x0, 0x0, }}, + {0x91E6, {0x4B55, 0x367C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E60, }}, + {0x91F6, {0x6E61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E5F, 0x0, 0x0, 0x6E63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x920D, {0x465F, 0x3343, 0x0, 0x0, 0x6E67, 0x0, 0x0, 0x6E64, 0x6E66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x921E, {0x6E62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F4F, 0x0, 0x0, 0x6E65, 0x0, }}, + {0x9234, {0x4E6B, 0x0, 0x0, 0x385A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E6F, 0x0, 0x0, 0x0, 0x0, }}, + {0x9244, {0x4534, 0x6E6A, 0x0, 0x0, 0x6E6D, 0x6E6B, 0x0, 0x6E70, 0x0, 0x0, 0x0, 0x0, 0x6E71, 0x0, 0x0, 0x0, }}, + {0x9257, {0x6E69, 0x0, 0x0, 0x6E76, 0x3174, 0x0, 0x0, 0x6E68, 0x0, 0x0, 0x0, 0x482D, 0x0, 0x6E6C, 0x0, 0x3E60, }}, + {0x9271, {0x395B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B48, 0x0, 0x3664, }}, + {0x9283, {0x3D46, 0x0, 0x463C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x412D, 0x0, }}, + {0x9293, {0x6E74, 0x0, 0x6E6E, 0x6E73, 0x0, 0x4C43, 0x0, 0x4438, 0x6E75, 0x6E72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x92AD, {0x412C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6E79, 0x0, 0x6E78, 0x0, 0x0, 0x0, }}, + {0x92CF, {0x6E77, 0x0, 0x0, 0x4B2F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x92E4, {0x3D7B, 0x0, 0x0, 0x0, 0x0, 0x6E7A, 0x4A5F, 0x0, 0x0, 0x3154, 0x0, 0x0, 0x0, 0x0, 0x4946, 0x4372, }}, + {0x92F8, {0x3578, 0x0, 0x6E7C, 0x0, 0x395D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3B2C, 0x0, }}, + {0x930F, {0x6E7B, 0x3F6D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3F6E, 0x6F21, 0x6F23, 0x0, 0x0, 0x0, 0x0, }}, + {0x9320, {0x3E7B, 0x0, 0x6F22, 0x6F24, 0x0, 0x0, 0x3653, 0x0, 0x4945, 0x0, 0x0, 0x3C62, 0x4F23, 0x0, 0x6E7E, 0x3A78, }}, + {0x9332, {0x4F3F, 0x0, 0x0, 0x6F26, 0x0, 0x0, 0x0, 0x0, 0x6F25, 0x6F27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9344, {0x6E7D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4669, 0x0, 0x4555, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9354, {0x4457, 0x0, 0x6F2C, 0x0, 0x0, 0x0, 0x0, 0x4343, 0x6F28, 0x0, 0x0, 0x0, 0x6F29, 0x0, 0x0, 0x0, }}, + {0x936C, {0x372D, 0x0, 0x6F2B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3830, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x937C, {0x6F2A, 0x0, 0x3E61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x938C, {0x3379, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F30, 0x0, 0x3A3F, 0x4179, 0x0, 0x0, 0x444A, 0x0, }}, + {0x93A7, {0x333B, 0x0, 0x0, 0x0, 0x0, 0x6F2E, 0x6F2F, 0x4443, 0x0, 0x6F2D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x93B9, {0x6F31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F37, 0x0, 0x0, 0x0, 0x0, 0x6F3A, }}, + {0x93D0, {0x6F39, 0x452D, 0x0, 0x0, 0x0, 0x0, 0x6F32, 0x6F33, 0x6F36, 0x0, 0x0, 0x0, 0x0, 0x6F38, 0x0, 0x0, }}, + {0x93E1, {0x3640, 0x0, 0x0, 0x6F3B, 0x6F35, 0x0, 0x0, 0x6F34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9403, {0x6F3F, 0x0, 0x0, 0x0, 0x6F40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F41, 0x0, 0x0, }}, + {0x9413, {0x6F3E, 0x6F3D, 0x0, 0x0, 0x0, 0x3E62, 0x462A, 0x6F3C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F45, 0x0, }}, + {0x942B, {0x6F43, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F44, 0x6F42, 0x0, 0x4278, 0x0, 0x6F46, }}, + {0x9441, {0x6F47, 0x0, 0x0, 0x6F49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9451, {0x3455, 0x6F48, 0x4C7A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F54, 0x6F4A, 0x0, 0x0, 0x6F4D, 0x0, 0x6F4B, }}, + {0x9462, {0x6F4C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F4E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F50, 0x0, }}, + {0x9475, {0x6F51, 0x0, 0x6F52, 0x0, 0x0, 0x0, 0x0, 0x6F55, 0x6F53, 0x6F56, 0x6F58, 0x0, 0x6F57, 0x0, 0x0, 0x0, }}, + {0x9577, {0x4439, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4C67, 0x0, 0x6F59, 0x412E, 0x0, 0x0, 0x0, }}, + {0x9587, {0x6F5A, 0x0, 0x4A44, 0x6F5B, 0x332B, 0x0, 0x0, 0x0, 0x313C, 0x0, 0x3457, 0x0, 0x3456, 0x6F5C, 0x0, 0x6F5D, }}, + {0x9598, {0x6F5E, 0x6F5F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F60, 0x0, 0x3458, 0x3355, 0x395E, 0x4836, 0x0, 0x6F62, }}, + {0x95A8, {0x6F61, 0x0, 0x0, 0x0, 0x0, 0x6F63, 0x0, 0x0, 0x0, 0x0, 0x315C, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x95B9, {0x6F66, 0x0, 0x6F65, 0x6F64, 0x0, 0x6F67, 0x0, 0x0, 0x0, 0x0, 0x6F6A, 0x0, 0x0, 0x0, 0x3047, 0x0, }}, + {0x95CA, {0x6F68, 0x0, 0x6F6C, 0x6F6B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F6E, 0x6F6D, 0x6F6F, 0x0, 0x462E, 0x0, }}, + {0x95DC, {0x6F70, 0x0, 0x0, 0x0, 0x0, 0x6F71, 0x6F73, 0x0, 0x0, 0x6F72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x961C, {0x496C, 0x0, 0x0, 0x0, 0x0, 0x6F74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F75, 0x0, 0x3A65, 0x0, }}, + {0x962E, {0x6F76, 0x6F77, 0x0, 0x0, 0x4B49, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x414B, 0x0, 0x0, }}, + {0x963F, {0x3024, 0x424B, 0x0, 0x6F78, 0x0, 0x496D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6F7B, 0x6F79, 0x395F, 0x0, }}, + {0x964F, {0x6F7A, 0x3842, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4A45, 0x6F7D, 0x7021, 0x6F7E, }}, + {0x965F, {0x7022, 0x0, 0x0, 0x3121, 0x3F58, 0x3D7C, 0x3459, 0x7023, 0x0, 0x0, 0x0, 0x4766, 0x0, 0x7025, 0x0, 0x0, }}, + {0x9670, {0x3122, 0x0, 0x7024, 0x4444, 0x0, 0x4E4D, 0x462B, 0x6F7C, 0x4E26, 0x0, 0x3831, 0x0, 0x0, 0x4D5B, 0x0, 0x0, }}, + {0x9685, {0x3679, 0x4E34, 0x0, 0x3728, 0x0, 0x4262, 0x6721, 0x0, 0x7026, 0x332C, 0x3F6F, 0x0, 0x0, 0x0, 0x0, 0x3356, }}, + {0x9695, {0x7028, 0x0, 0x7029, 0x7027, 0x3764, 0x0, 0x3A5D, 0x3E63, 0x0, 0x0, 0x0, 0x3123, 0x0, 0x0, 0x4E59, 0x0, }}, + {0x96A7, {0x702B, 0x6E2E, 0x0, 0x702A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x702E, 0x702C, 0x702D, 0x0, 0x702F, 0x0, 0x7030, }}, + {0x96B7, {0x4E6C, 0x7031, 0x7032, 0x0, 0x4049, 0x483B, 0x0, 0x0, 0x0, 0x3F7D, 0x3467, 0x0, 0x0, 0x4D3A, 0x326D, 0x3D38, }}, + {0x96C7, {0x385B, 0x0, 0x7035, 0x0, 0x7034, 0x3B73, 0x7036, 0x7033, 0x0, 0x0, 0x3B28, 0x0, 0x0, 0x0, 0x703A, 0x6A2D, }}, + {0x96D9, {0x5256, 0x0, 0x3F77, 0x7038, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4E25, 0x4671, 0x0, 0x0, 0x0, 0x0, 0x312B, }}, + {0x96EA, {0x4063, 0x3C36, 0x0, 0x0, 0x0, 0x0, 0x4A37, 0x0, 0x3140, 0x0, 0x0, 0x0, 0x4E6D, 0x4D6B, 0x0, 0x703B, }}, + {0x96FB, {0x4545, 0x0, 0x0, 0x0, 0x0, 0x3C7B, 0x0, 0x0, 0x0, 0x703C, 0x0, 0x703D, 0x3F4C, 0x703E, 0x0, 0x4E6E, }}, + {0x970D, {0x7039, 0x7040, 0x7042, 0x0, 0x7041, 0x0, 0x703F, 0x0, 0x0, 0x7043, 0x0, 0x0, 0x7044, 0x0, 0x0, 0x417A, }}, + {0x971E, {0x3262, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7045, 0x0, 0x0, 0x4C38, 0x0, 0x0, 0x7046, 0x0, 0x0, 0x0, }}, + {0x9730, {0x7047, 0x0, 0x4F2A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5B31, 0x7048, 0x0, 0x0, 0x0, 0x7049, 0x704A, 0x0, }}, + {0x9742, {0x704E, 0x0, 0x704B, 0x0, 0x704C, 0x0, 0x704D, 0x704F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9752, {0x4044, 0x0, 0x0, 0x0, 0x4C77, 0x0, 0x0, 0x4045, 0x0, 0x0, 0x7050, 0x0, 0x4873, 0x0, 0x7051, 0x7353, }}, + {0x9762, {0x4C4C, 0x0, 0x7052, 0x0, 0x7053, 0x0, 0x7054, 0x3357, 0x0, 0x7056, 0x0, 0x3F59, 0x0, 0x0, 0x0, 0x7057, }}, + {0x9774, {0x3724, 0x0, 0x0, 0x0, 0x0, 0x7058, 0x705C, 0x0, 0x705A, 0x0, 0x0, 0x0, 0x0, 0x705B, 0x0, 0x0, }}, + {0x9784, {0x3373, 0x7059, 0x705D, 0x0, 0x0, 0x0, 0x0, 0x705E, 0x0, 0x3048, 0x0, 0x705F, 0x7060, 0x0, 0x0, 0x0, }}, + {0x9798, {0x3E64, 0x0, 0x0, 0x0, 0x7061, 0x0, 0x0, 0x0, 0x3547, 0x0, 0x0, 0x7064, 0x0, 0x0, 0x7063, 0x0, }}, + {0x97A8, {0x7062, 0x0, 0x0, 0x6B71, 0x0, 0x4A5C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7065, 0x7066, 0x0, 0x0, 0x0, }}, + {0x97C3, {0x7067, 0x0, 0x0, 0x7068, 0x0, 0x7069, 0x0, 0x0, 0x706A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x97D3, {0x345A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x706B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x97ED, {0x706C, 0x4723, 0x0, 0x0, 0x0, 0x706E, 0x323B, 0x0, 0x7071, 0x7070, 0x0, 0x0, 0x0, 0x0, 0x3124, 0x0, }}, + {0x97FF, {0x3641, 0x0, 0x4A47, 0x443A, 0x3A22, 0x0, 0x3960, 0x3D67, 0x0, 0x3F5C, 0x0, 0x0, 0x0, 0x7073, 0x0, 0x0, }}, + {0x980F, {0x7072, 0x4D42, 0x3468, 0x4852, 0x465C, 0x0, 0x0, 0x0, 0x3F7C, 0x4E4E, 0x0, 0x375B, 0x0, 0x0, 0x0, 0x0, }}, + {0x9821, {0x7076, 0x0, 0x0, 0x7075, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B4B, 0x462C, 0x0, 0x0, 0x0, }}, + {0x9834, {0x3150, 0x0, 0x0, 0x7077, 0x7074, 0x0, 0x0, 0x4951, 0x4D6A, 0x7078, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9846, {0x7079, 0x0, 0x0, 0x0, 0x0, 0x707B, 0x426A, 0x335B, 0x335C, 0x707A, 0x0, 0x0, 0x0, 0x0, 0x3469, 0x3832, }}, + {0x9858, {0x346A, 0x0, 0x0, 0x453F, 0x0, 0x0, 0x4E60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x385C, }}, + {0x986B, {0x707C, 0x0, 0x0, 0x0, 0x707D, 0x707E, 0x7121, 0x0, 0x7123, 0x7122, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x98A8, {0x4977, 0x0, 0x7124, 0x0, 0x0, 0x0, 0x0, 0x7125, 0x0, 0x7126, 0x0, 0x0, 0x0, 0x0, 0x7127, 0x0, }}, + {0x98C3, {0x7129, 0x7128, 0x0, 0x712A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x98DB, {0x4874, 0x664C, 0x0, 0x0, 0x3F29, 0x0, 0x0, 0x3532, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x712B, 0x0, }}, + {0x98EB, {0x712C, 0x0, 0x522C, 0x5D3B, 0x4853, 0x0, 0x0, 0x307B, 0x0, 0x303B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x98FC, {0x3B74, 0x4B30, 0x3E7E, 0x0, 0x0, 0x0, 0x0, 0x712D, 0x0, 0x4C5F, 0x0, 0x0, 0x0, 0x712E, 0x4D5C, 0x0, }}, + {0x990C, {0x3142, 0x0, 0x0, 0x0, 0x3B41, 0x0, 0x712F, 0x326E, 0x7130, 0x0, 0x0, 0x0, 0x7131, 0x0, 0x0, 0x0, }}, + {0x991D, {0x7133, 0x7134, 0x0, 0x7136, 0x7132, 0x0, 0x0, 0x7135, 0x0, 0x0, 0x0, 0x345B, 0x0, 0x0, 0x0, 0x7137, }}, + {0x992E, {0x7138, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7139, }}, + {0x993E, {0x713A, 0x0, 0x0, 0x0, 0x713B, 0x0, 0x0, 0x713D, 0x0, 0x0, 0x0, 0x713C, 0x0, 0x713F, 0x7142, 0x0, }}, + {0x9950, {0x713E, 0x7140, 0x7141, 0x0, 0x0, 0x7143, 0x0, 0x3642, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9996, {0x3C73, 0x7144, 0x7145, 0x3961, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7146, }}, + {0x99A8, {0x333E, 0x0, 0x0, 0x0, 0x474F, 0x7147, 0x7148, 0x0, 0x0, 0x0, 0x0, 0x435A, 0x466B, 0x0, 0x0, 0x0, }}, + {0x99BC, {0x7149, 0x0, 0x0, 0x0, 0x0, 0x477D, 0x0, 0x0, 0x424C, 0x3158, 0x366E, 0x0, 0x366F, 0x0, 0x0, 0x0, }}, + {0x99D0, {0x4373, 0x714E, 0x3670, 0x0, 0x0, 0x326F, 0x0, 0x0, 0x714D, 0x0, 0x0, 0x714B, 0x0, 0x714C, 0x0, 0x714A, }}, + {0x99E2, {0x7158, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x714F, 0x7150, 0x0, 0x0, 0x7151, }}, + {0x99F2, {0x7152, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7154, 0x0, 0x0, 0x7153, 0x0, 0x0, 0x0, 0x3D59, 0x0, 0x7155, }}, + {0x9A05, {0x7157, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3533, 0x7156, 0x0, 0x0, 0x417B, 0x3833, 0x0, }}, + {0x9A19, {0x7159, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x424D, }}, + {0x9A2B, {0x715A, 0x0, 0x0, 0x0, 0x0, 0x462D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x715B, 0x0, 0x0, 0x0, }}, + {0x9A3E, {0x7160, 0x0, 0x715E, 0x0, 0x715D, 0x715F, 0x0, 0x715C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7162, }}, + {0x9A55, {0x7161, 0x0, 0x7164, 0x0, 0x0, 0x3643, 0x7163, 0x0, 0x0, 0x0, 0x7165, 0x0, 0x0, 0x7166, 0x0, 0x7168, }}, + {0x9A65, {0x7167, 0x0, 0x0, 0x0, 0x7169, 0x716B, 0x716A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9AA8, {0x397C, 0x0, 0x0, 0x0, 0x0, 0x716C, 0x0, 0x0, 0x716D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9AB8, {0x333C, 0x0, 0x0, 0x0, 0x716E, 0x0, 0x0, 0x0, 0x716F, 0x0, 0x0, 0x0, 0x3F71, 0x0, 0x0, 0x0, }}, + {0x9ACF, {0x7170, 0x0, 0x7171, 0x0, 0x7172, 0x7173, 0x0, 0x0, 0x0, 0x3962, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7174, }}, + {0x9ADF, {0x7175, 0x0, 0x0, 0x7176, 0x7177, 0x0, 0x0, 0x7178, 0x0, 0x0, 0x0, 0x4831, 0x717A, 0x0, 0x4926, 0x717B, }}, + {0x9AEF, {0x7179, 0x0, 0x717D, 0x0, 0x0, 0x717C, 0x0, 0x0, 0x717E, 0x0, 0x0, 0x0, 0x7221, 0x0, 0x0, 0x0, }}, + {0x9B06, {0x7222, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9B18, {0x7223, 0x0, 0x7224, 0x0, 0x0, 0x0, 0x0, 0x7225, 0x0, 0x0, 0x7226, 0x7227, 0x0, 0x7228, 0x0, 0x7229, }}, + {0x9B28, {0x722A, 0x722B, 0x722C, 0x0, 0x0, 0x0, 0x722D, 0x722E, 0x0, 0x5D35, 0x722F, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9B3B, {0x6478, 0x3534, 0x0, 0x0, 0x0, 0x0, 0x3321, 0x3A32, 0x7231, 0x7230, 0x4C25, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9B4D, {0x7233, 0x7234, 0x7232, 0x0, 0x7235, 0x0, 0x0, 0x4B62, 0x0, 0x0, 0x0, 0x7236, 0x0, 0x357B, 0x0, 0x0, }}, + {0x9B6F, {0x4F25, 0x0, 0x0, 0x0, 0x0, 0x7237, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9B83, {0x7239, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x303E, 0x0, 0x0, 0x723A, 0x4A2B, }}, + {0x9B93, {0x7238, 0x0, 0x0, 0x723B, 0x723C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x723D, 0x723E, 0x0, 0x0, }}, + {0x9BA8, {0x723F, 0x0, 0x4B6E, 0x3B2D, 0x0, 0x3A7A, 0x412F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7240, 0x0, 0x0, 0x0, }}, + {0x9BB9, {0x7243, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7241, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7244, 0x0, 0x0, }}, + {0x9BC9, {0x3871, 0x7242, 0x0, 0x0, 0x0, 0x0, 0x7245, 0x0, 0x7246, 0x7247, 0x0, 0x724B, 0x0, 0x3B2A, 0x0, 0x0, }}, + {0x9BDB, {0x4264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x724C, 0x7249, 0x7248, 0x724A, 0x0, 0x0, 0x0, 0x375F, 0x0, 0x0, }}, + {0x9BF0, {0x7250, 0x724F, 0x724E, 0x0, 0x0, 0x3033, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9C04, {0x725A, 0x0, 0x7256, 0x0, 0x7257, 0x7253, 0x7259, 0x0, 0x7255, 0x3362, 0x0, 0x0, 0x4F4C, 0x0, 0x7258, 0x7254, }}, + {0x9C14, {0x7252, 0x7251, 0x0, 0x0, 0x0, 0x0, 0x0, 0x725C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x725F, 0x0, 0x0, }}, + {0x9C24, {0x725E, 0x725D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4949, 0x725B, 0x3073, 0x7260, 0x0, 0x7262, 0x0, }}, + {0x9C39, {0x336F, 0x724D, 0x3137, 0x0, 0x0, 0x7264, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7263, 0x7261, 0x432D, }}, + {0x9C52, {0x4B70, 0x0, 0x0, 0x0, 0x0, 0x4E5A, 0x0, 0x0, 0x7265, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7266, 0x0, }}, + {0x9C67, {0x7267, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7268, }}, + {0x9C78, {0x7269, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9CE5, {0x443B, 0x0, 0x726A, 0x0, 0x4837, 0x0, 0x726F, 0x726B, 0x0, 0x0, 0x0, 0x726C, 0x0, 0x0, 0x4B31, 0x4C44, }}, + {0x9CF6, {0x4650, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7270, 0x0, 0x0, }}, + {0x9D06, {0x7271, 0x463E, 0x726E, 0x726D, 0x0, 0x0, 0x0, 0x0, 0x322A, 0x0, 0x0, 0x0, 0x7279, 0x0, 0x0, 0x7278, }}, + {0x9D1B, {0x3175, 0x0, 0x0, 0x0, 0x7276, 0x0, 0x0, 0x0, 0x7275, 0x0, 0x0, 0x7273, 0x0, 0x337B, 0x0, 0x7272, }}, + {0x9D2B, {0x3C32, 0x3229, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9D3B, {0x3963, 0x0, 0x0, 0x727C, 0x727B, 0x0, 0x727A, 0x0, 0x0, 0x7277, 0x0, 0x727D, 0x0, 0x727E, 0x0, 0x0, }}, + {0x9D50, {0x7325, 0x7324, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7326, 0x0, 0x0, 0x312D, 0x7321, 0x7322, 0x0, }}, + {0x9D60, {0x3974, 0x4C39, 0x0, 0x0, 0x7323, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4B32, 0x0, 0x0, 0x732B, }}, + {0x9D72, {0x7327, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x732C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9D87, {0x7329, 0x0, 0x7328, 0x0, 0x0, 0x0, 0x0, 0x0, 0x375C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9D9A, {0x732D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x732E, 0x0, 0x0, 0x0, 0x0, 0x732F, }}, + {0x9DAB, {0x732A, 0x0, 0x0, 0x0, 0x7274, 0x0, 0x0, 0x7330, 0x0, 0x4461, 0x0, 0x0, 0x0, 0x7334, 0x0, 0x7335, }}, + {0x9DBB, {0x7333, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7332, 0x7338, 0x0, 0x7331, 0x0, 0x7336, 0x0, 0x0, 0x0, 0x0, }}, + {0x9DCF, {0x7337, 0x0, 0x0, 0x0, 0x733A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7339, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9DE6, {0x733C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x733D, 0x0, 0x733E, 0x0, 0x0, 0x4F49, 0x0, 0x0, 0x0, }}, + {0x9DF8, {0x733B, 0x426B, 0x3A6D, 0x0, 0x0, 0x733F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9E1A, {0x7340, 0x7341, 0x0, 0x0, 0x7342, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9E75, {0x7343, 0x0, 0x0, 0x3834, 0x7344, 0x0, 0x0, 0x0, 0x7345, 0x0, 0x3C2F, 0x0, 0x7346, 0x0, 0x0, 0x0, }}, + {0x9E88, {0x7347, 0x0, 0x0, 0x7348, 0x7349, 0x0, 0x0, 0x0, 0x0, 0x734C, 0x734A, 0x4F3C, 0x0, 0x734B, 0x0, 0x4E6F, }}, + {0x9E9D, {0x734D, 0x0, 0x4E5B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x734E, 0x477E, 0x0, 0x0, 0x734F, 0x7351, 0x0, 0x0, }}, + {0x9EAD, {0x7352, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7350, 0x396D, 0x4C4D, 0x4B63, 0x5677, }}, + {0x9EBE, {0x5D60, 0x4B7B, 0x0, 0x0, 0x0, 0x0, 0x322B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7354, 0x3550, }}, + {0x9ECE, {0x7355, 0x7356, 0x7357, 0x0, 0x3975, 0x0, 0x7358, 0x0, 0x0, 0x0, 0x6054, 0x4C5B, 0x0, 0x4263, 0x7359, 0x735B, }}, + {0x9EDE, {0x735A, 0x0, 0x735C, 0x0, 0x0, 0x0, 0x0, 0x735D, 0x0, 0x0, 0x735E, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9EEF, {0x735F, 0x0, 0x0, 0x0, 0x0, 0x7360, 0x0, 0x7361, 0x7362, 0x0, 0x7363, 0x0, 0x7364, 0x7365, 0x7366, 0x0, }}, + {0x9F07, {0x7367, 0x7368, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4524, 0x0, 0x0, 0x0, 0x0, 0x385D, 0x0, 0x736A, 0x0, }}, + {0x9F20, {0x414D, 0x736B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x736C, 0x0, 0x0, 0x0, }}, + {0x9F3B, {0x4921, 0x0, 0x0, 0x736D, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x736E, }}, + {0x9F4B, {0x6337, 0x0, 0x0, 0x6C5A, 0x706D, 0x0, 0x0, 0x736F, 0x0, 0x7370, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9F5F, {0x7372, 0x7373, 0x7374, 0x4E70, 0x7371, 0x0, 0x0, 0x7375, 0x7376, 0x0, 0x0, 0x7378, 0x0, 0x7377, 0x0, 0x0, }}, + {0x9F72, {0x737A, 0x0, 0x0, 0x0, 0x737B, 0x7379, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x9F8D, {0x4E36, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x737C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x737D, }}, + {0x9F9D, {0x6354, 0x0, 0x0, 0x737E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0xFE30, {0x7545, 0x753D, 0x0, 0x7532, 0x0, 0x754A, 0x754B, 0x7550, 0x7551, 0x754C, 0x754D, 0x755A, 0x755B, 0x7554, 0x7555, 0x7552, }}, + {0xFE40, {0x7553, 0x7556, 0x7557, 0x7558, 0x7559, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0xFF01, {0x212A, 0x0, 0x2174, 0x2170, 0x2173, 0x2175, 0x0, 0x214A, 0x214B, 0x2176, 0x215C, 0x2124, 0x213E, 0x2125, 0x213F, 0x2330, }}, // Added 0xFF0D<->0x213E for HYPHEN compatibility + {0xFF11, {0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129, 0x2177, }}, + {0xFF21, {0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234A, 0x234B, 0x234C, 0x234D, 0x234E, 0x234F, 0x2350, }}, + {0xFF31, {0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, 0x2359, 0x235A, 0x214E, 0x2140, 0x214F, 0x2130, 0x2132, 0x212E, }}, + {0xFF41, {0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368, 0x2369, 0x236A, 0x236B, 0x236C, 0x236D, 0x236E, 0x236F, 0x2370, }}, + {0xFF51, {0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378, 0x2379, 0x237A, 0x2150, 0x2143, 0x2151, 0x2141, 0x0, 0x0, }}, + {0xFFE5, {0x216F, }}, +}; + +static inline UInt16 __CFToJIS(UniChar character) { // Charset is based on MacJapanese & JIS0212 + UInt16 bytes = CFStringEncodingUnicodeTo16BitEncodingWithArray16(__CFToJISCharMap, NUM_TOJIS_CHARMAP, character); + + return (bytes ? bytes : 0xFFFD); +} + +#define NUM_FROMJIS0208_CHARMAP 243 +static CFStringEncodingUnicodeTo16BitCharMapWithArray32 __CFFromJIS0208CharMap [NUM_FROMJIS0208_CHARMAP] = { + {0x2121, {0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0xB4, 0xFF40, 0xA8, 0xFF3E, 0x203E, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2014, 0x2010, 0xFF0F, 0xFF3C, }}, + {0x2141, {0x301C, 0x2016, 0xFF5C, 0x22EF, 0x2025, 0x2018, 0x2019, 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0x2212, 0xB1, 0xD7, 0xF7, }}, + {0x2161, {0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234, 0x2642, 0x2640, 0xB0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04, 0xA2, 0xA3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0xA7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x0, 0x0, }}, + {0x2221, {0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, }}, + {0x2241, {0x2229, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2227, 0x2228, 0xAC, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, }}, + {0x2261, {0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, 0xB6, 0x0, 0x0, 0x0, 0x0, 0x25EF, 0x0, 0x0, }}, + {0x2330, {0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, }}, + {0x2350, {0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, }}, + {0x2370, {0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2421, {0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, }}, + {0x2441, {0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, }}, + {0x2461, {0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2521, {0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, }}, + {0x2541, {0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0, }}, + {0x2561, {0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2621, {0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39A, 0x39B, 0x39C, 0x39D, 0x39E, 0x39F, 0x3A0, 0x3A1, 0x3A3, 0x3A4, 0x3A5, 0x3A6, 0x3A7, 0x3A8, 0x3A9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2641, {0x3B1, 0x3B2, 0x3B3, 0x3B4, 0x3B5, 0x3B6, 0x3B7, 0x3B8, 0x3B9, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BE, 0x3BF, 0x3C0, 0x3C1, 0x3C3, 0x3C4, 0x3C5, 0x3C6, 0x3C7, 0x3C8, 0x3C9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2721, {0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x401, 0x416, 0x417, 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, }}, + {0x2741, {0x42F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x451, 0x436, 0x437, 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, }}, + {0x2761, {0x43F, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2821, {0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542, }}, + {0x2921, {0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, 0x246D, 0x246E, 0x246F, 0x2470, 0x2471, 0x2472, 0x2473, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2474, 0x2475, }}, + {0x2941, {0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2776, 0x2777, 0x2778, 0x2779, }}, + {0x2961, {0x277A, 0x277B, 0x277C, 0x277D, 0x277E, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2488, 0x2489, 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, 0x248F, 0x2490, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2A21, {0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216A, 0x216B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217A, 0x217B, }}, + {0x2A5D, {0x249C, 0x249D, 0x249E, 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, 0x24A7, 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, 0x24AF, 0x24B0, 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2B21, {0x339C, 0x339F, 0x339D, 0x33A0, 0x33A4, 0x0, 0x33A1, 0x33A5, 0x339E, 0x33A2, 0x338E, 0x0, 0x338F, 0x33C4, 0x3396, 0x3397, 0x2113, 0x3398, 0x33B3, 0x33B2, 0x33B1, 0x33B0, 0x2109, 0x33D4, 0x33CB, 0x3390, 0x3385, 0x3386, 0x3387, 0x0, 0x0, 0x0, }}, + {0x2B7B, {0x2116, 0x33CD, 0x2121, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2C21, {0x2664, 0x2667, 0x2661, 0x2662, 0x2660, 0x2663, 0x2665, 0x2666, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3020, 0x260E, 0x3004, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2C49, {0x261E, 0x261C, 0x261D, 0x261F, 0x21C6, 0x21C4, 0x21C5, 0x0, 0x21E8, 0x21E6, 0x21E7, 0x21E9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2D21, {0x3230, 0x322A, 0x322B, 0x322C, 0x322D, 0x322E, 0x322F, 0x3240, 0x3237, 0x3242, 0x3243, 0x3239, 0x323A, 0x3231, 0x323E, 0x3234, 0x3232, 0x323B, 0x3236, 0x3233, 0x3235, 0x323C, 0x323D, 0x323F, 0x3238, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2D73, {0x32A4, 0x32A5, 0x32A6, 0x32A7, 0x32A8, 0x32A9, 0x3296, 0x329D, 0x3298, 0x329E, 0x0, 0x3299, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2E21, {0x3349, 0x3322, 0x334D, 0x3314, 0x3316, 0x3305, 0x3333, 0x334E, 0x3303, 0x3336, 0x3318, 0x3315, 0x3327, 0x3351, 0x334A, 0x3339, 0x3357, 0x330D, 0x3342, 0x3323, 0x3326, 0x333B, 0x332B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3300, 0x331E, }}, + {0x2E41, {0x332A, 0x3331, 0x3347, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2E67, {0x337E, 0x337D, 0x337C, 0x337B, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x337F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2F21, {0x222E, 0x221F, 0x22BF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x301D, 0x301F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x2F49, {0x3094, 0x0, 0x30F7, 0x30F8, 0x30F9, 0x30FA, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x3021, {0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, }}, + {0x3041, {0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, }}, + {0x3061, {0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D, 0x0, 0x0, }}, + {0x3121, {0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2, }}, + {0x3141, {0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712, }}, + {0x3161, {0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC, 0x0, 0x0, }}, + {0x3221, {0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D, }}, + {0x3241, {0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6, }}, + {0x3261, {0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539, 0x0, 0x0, }}, + {0x3321, {0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, }}, + {0x3341, {0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F, }}, + {0x3361, {0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431, 0x0, 0x0, }}, + {0x3421, {0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, }}, + {0x3441, {0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2, 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, }}, + {0x3461, {0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4, 0x0, 0x0, }}, + {0x3521, {0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, }}, + {0x3541, {0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0x673D, }}, + {0x3561, {0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC, 0x0, 0x0, }}, + {0x3621, {0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1, }}, + {0x3641, {0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39, }}, + {0x3661, {0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48, 0x0, 0x0, }}, + {0x3721, {0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, }}, + {0x3741, {0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287, }}, + {0x3761, {0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372, 0x0, 0x0, }}, + {0x3821, {0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, }}, + {0x3841, {0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1, 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, }}, + {0x3861, {0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411, 0x0, 0x0, }}, + {0x3921, {0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, }}, + {0x3941, {0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0x9805, }}, + {0x3961, {0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC, 0x0, 0x0, }}, + {0x3A21, {0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF, }}, + {0x3A41, {0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750, }}, + {0x3A61, {0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237, 0x0, 0x0, }}, + {0x3B21, {0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, }}, + {0x3B41, {0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B, }}, + {0x3B61, {0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642, 0x0, 0x0, }}, + {0x3C21, {0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, }}, + {0x3C41, {0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C, }}, + {0x3C61, {0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468, 0x0, 0x0, }}, + {0x3D21, {0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4, }}, + {0x3D41, {0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96, }}, + {0x3D61, {0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F, 0x0, 0x0, }}, + {0x3E21, {0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A, 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, }}, + {0x3E41, {0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266, }}, + {0x3E61, {0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8, 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE, 0x0, 0x0, }}, + {0x3F21, {0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, }}, + {0x3F41, {0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875, 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017, }}, + {0x3F61, {0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE, 0x0, 0x0, }}, + {0x4021, {0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, }}, + {0x4041, {0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83, }}, + {0x4061, {0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA, 0x0, 0x0, }}, + {0x4121, {0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9, }}, + {0x4141, {0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD, }}, + {0x4161, {0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E, 0x0, 0x0, }}, + {0x4221, {0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, }}, + {0x4241, {0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000, }}, + {0x4261, {0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C, 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA, 0x0, 0x0, }}, + {0x4321, {0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, }}, + {0x4341, {0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010, }}, + {0x4361, {0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5, 0x0, 0x0, }}, + {0x4421, {0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, }}, + {0x4441, {0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3, }}, + {0x4461, {0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013, 0x0, 0x0, }}, + {0x4521, {0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, }}, + {0x4541, {0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0x51CD, }}, + {0x4561, {0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230, 0x0, 0x0, }}, + {0x4621, {0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97, }}, + {0x4641, {0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948, }}, + {0x4661, {0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165, 0x0, 0x0, }}, + {0x4721, {0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, }}, + {0x4741, {0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973, }}, + {0x4761, {0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6, 0x0, 0x0, }}, + {0x4821, {0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, }}, + {0x4841, {0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6, 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, }}, + {0x4861, {0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E, 0x0, 0x0, }}, + {0x4921, {0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D, 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, }}, + {0x4941, {0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0x65A7, }}, + {0x4961, {0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D, 0x0, 0x0, }}, + {0x4A21, {0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A, }}, + {0x4A41, {0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703, }}, + {0x4A61, {0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B, 0x0, 0x0, }}, + {0x4B21, {0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, }}, + {0x4B41, {0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469, }}, + {0x4B61, {0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80, 0x0, 0x0, }}, + {0x4C21, {0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, }}, + {0x4C41, {0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, }}, + {0x4C61, {0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652, 0x0, 0x0, }}, + {0x4D21, {0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89, }}, + {0x4D41, {0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83, }}, + {0x4D61, {0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483, 0x0, 0x0, }}, + {0x4E21, {0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E, 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, }}, + {0x4E41, {0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E, }}, + {0x4E61, {0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F, 0x0, 0x0, }}, + {0x4F21, {0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, }}, + {0x4F41, {0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900, 0x6E7E, 0x7897, 0x8155, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x5021, {0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE, }}, + {0x5041, {0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5, }}, + {0x5061, {0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2, 0x0, 0x0, }}, + {0x5121, {0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169, }}, + {0x5141, {0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0, }}, + {0x5161, {0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8, 0x0, 0x0, }}, + {0x5221, {0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, }}, + {0x5241, {0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440, }}, + {0x5261, {0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8, 0x0, 0x0, }}, + {0x5321, {0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F, }}, + {0x5341, {0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B, }}, + {0x5361, {0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709, 0x0, 0x0, }}, + {0x5421, {0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769, 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, }}, + {0x5441, {0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC, }}, + {0x5461, {0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A, 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969, 0x0, 0x0, }}, + {0x5521, {0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11, 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, }}, + {0x5541, {0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43, 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83, }}, + {0x5561, {0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53, 0x0, 0x0, }}, + {0x5621, {0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, }}, + {0x5641, {0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB, }}, + {0x5661, {0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF, 0x0, 0x0, }}, + {0x5721, {0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, }}, + {0x5741, {0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019, }}, + {0x5761, {0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A, 0x0, 0x0, }}, + {0x5821, {0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, }}, + {0x5841, {0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A, }}, + {0x5861, {0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8, 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B, 0x0, 0x0, }}, + {0x5921, {0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241, 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282, 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294, 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8, }}, + {0x5941, {0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C, 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350, 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB, 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369, }}, + {0x5961, {0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC, 0x0, 0x0, }}, + {0x5A21, {0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, }}, + {0x5A41, {0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603, }}, + {0x5A61, {0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC, 0x0, 0x0, }}, + {0x5B21, {0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727, 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, }}, + {0x5B41, {0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0x68B3, }}, + {0x5B61, {0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD, 0x0, 0x0, }}, + {0x5C21, {0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961, }}, + {0x5C41, {0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2, }}, + {0x5C61, {0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3, 0x0, 0x0, }}, + {0x5D21, {0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, }}, + {0x5D41, {0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80, 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE, }}, + {0x5D61, {0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE, 0x0, 0x0, }}, + {0x5E21, {0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, }}, + {0x5E41, {0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, }}, + {0x5E61, {0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC, 0x0, 0x0, }}, + {0x5F21, {0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80, 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, }}, + {0x5F41, {0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0x70D9, }}, + {0x5F61, {0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC, 0x0, 0x0, }}, + {0x6021, {0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE, }}, + {0x6041, {0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB, }}, + {0x6061, {0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1, 0x0, 0x0, }}, + {0x6121, {0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, }}, + {0x6141, {0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC, }}, + {0x6161, {0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670, 0x0, 0x0, }}, + {0x6221, {0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, }}, + {0x6241, {0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, }}, + {0x6261, {0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC, 0x0, 0x0, }}, + {0x6321, {0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC, }}, + {0x6341, {0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6, }}, + {0x6361, {0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50, 0x0, 0x0, }}, + {0x6421, {0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, }}, + {0x6441, {0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65, }}, + {0x6461, {0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06, 0x0, 0x0, }}, + {0x6521, {0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, }}, + {0x6541, {0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22, 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32, }}, + {0x6561, {0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A, 0x0, 0x0, }}, + {0x6621, {0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, }}, + {0x6641, {0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073, }}, + {0x6661, {0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B, 0x0, 0x0, }}, + {0x6721, {0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9, }}, + {0x6741, {0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207, 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262, }}, + {0x6761, {0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9, 0x0, 0x0, }}, + {0x6821, {0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, }}, + {0x6841, {0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F, }}, + {0x6861, {0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1, 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548, 0x0, 0x0, }}, + {0x6921, {0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591, 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C, 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0, 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B, }}, + {0x6941, {0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D, 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9, 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0, 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF, }}, + {0x6961, {0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759, 0x0, 0x0, }}, + {0x6A21, {0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, }}, + {0x6A41, {0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1, }}, + {0x6A61, {0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E, 0x0, 0x0, }}, + {0x6B21, {0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E, 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10, }}, + {0x6B41, {0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4, }}, + {0x6B61, {0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B, 0x0, 0x0, }}, + {0x6C21, {0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, }}, + {0x6C41, {0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D, }}, + {0x6C61, {0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A, 0x0, 0x0, }}, + {0x6D21, {0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60, 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87, 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99, 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, }}, + {0x6D41, {0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62, }}, + {0x6D61, {0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8, 0x0, 0x0, }}, + {0x6E21, {0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, }}, + {0x6E41, {0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9, 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, }}, + {0x6E61, {0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E, 0x0, 0x0, }}, + {0x6F21, {0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C, 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394, 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, }}, + {0x6F41, {0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452, 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470, 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0x95A0, }}, + {0x6F61, {0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E, 0x0, 0x0, }}, + {0x7021, {0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E, }}, + {0x7041, {0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790, }}, + {0x7061, {0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870, 0x0, 0x0, }}, + {0x7121, {0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4, 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, }}, + {0x7141, {0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E, }}, + {0x7161, {0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7, 0x0, 0x0, }}, + {0x7221, {0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, }}, + {0x7241, {0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, }}, + {0x7261, {0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48, 0x0, 0x0, }}, + {0x7321, {0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, }}, + {0x7341, {0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4, }}, + {0x7361, {0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0, 0x0, 0x0, }}, + {0x7421, {0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }}, + {0x7532, {0xFE33, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFE30, 0x0, 0x0, 0x0, 0x0, 0xFE35, 0xFE36, 0xFE39, 0xFE3A, 0x0, 0x0, 0xFE37, 0xFE38, }}, + {0x7552, {0xFE3F, 0xFE40, 0xFE3D, 0xFE3E, 0xFE41, 0xFE42, 0xFE43, 0xFE44, 0xFE3B, 0xFE3C, }}, +}; + +static inline UniChar __CFFromJIS0208(UInt16 bytes) { + UniChar ch = CFStringEncodingUnicodeTo16BitEncodingWithArray32(__CFFromJIS0208CharMap, NUM_FROMJIS0208_CHARMAP, bytes); + return (ch ? ch : 0xFFFD); +} + + +/* Precomposition */ +static Boolean __CFIsValidCombiningCharJapanese(UniChar character) { + switch (character) { + case 0x0306: + case 0x0308: + case 0x0338: + case 0x3099: + case 0x309A: + return TRUE; + + default: + return FALSE; + } +} + +static inline UniChar __CFPrecomposeCharJapanese(const UniChar *character, Boolean isMacJapanese) { + UniChar ch = *character; + + switch (*(character + 1)) { + case 0x0306: + if ((ch == 0x0418) || (ch == 0x0438)) return ch + 1; + break; + + case 0x0308: + if (ch == 0x0415) return 0x0401; + else if (ch == 0x0435) return 0x0451; + break; + + case 0x0338: + if (ch == 0x003D) return 0x2260; + break; + + case 0x3099: + switch (ch) { + case 0x3046: return (isMacJapanese ? 0x3094 : 0); + case 0x30A6: return (isMacJapanese ? 0x30F4 : 0); + case 0x30EF: return (isMacJapanese ? 0x30F7 : 0); + case 0x30F0: return (isMacJapanese ? 0x30F8 : 0); + case 0x30F1: return (isMacJapanese ? 0x30F9 : 0); + case 0x30F2: return (isMacJapanese ? 0x30FA : 0); + case 0x30FD: return (isMacJapanese ? 0x30FE : 0); + default: return ch + 1; + } + break; + + case 0x309A: + return ch + 2; + } + return 0; +} + +/* Shift JIS */ +#define _CFFromShiftJISEUDC(sjisVal) ((sjisVal) - 0xF040 + 0xE000 - ((((sjisVal) & 0x0F00) >> 8) * 0x44 + ((sjisVal) & 0x0080 ? 1 : 0))) +#define _CFToShiftJISEUDC(uniVal) (((uniVal) - 0xE000) + 0xF040 + ((((uniVal) - 0xE000) / 0xBC * 0x44) + ((uniVal) - 0xE000) % 0xBC / 0x3F)) + +static inline void JIS0208ToShiftJIS(UInt16 jis, UInt8 *sjis) { + UInt8 hiByte = (jis >> 8); + UInt8 loByte = (jis & 0x7f); + + loByte += ((hiByte & 1) ? 0x1f : 0x7d); + hiByte = ((hiByte - 0x21) >> 1) + 0x81; + if (loByte >= 0x7f) loByte++; + if (hiByte > 0x9f) hiByte += 0x40; + *sjis = hiByte; + *(sjis+1) = loByte; +} + +static inline UInt16 ShiftJISToJIS0208(const UInt8 *sjis) { + UInt8 hiByte = *sjis; + UInt8 loByte = *(sjis+1); + + hiByte -= (hiByte <= 0x9f) ? 0x71 : 0xb1; + hiByte = hiByte * 2 +1; + if (loByte > 0x7f) loByte--; + if (loByte >= 0x9e) { + loByte -= 0x7d, hiByte++; + } else { + loByte -= 0x1f; + } + return (hiByte << 8) | loByte; +} + +/* MacOS Japanese */ +static inline UInt16 __CFLookupF86XSeq(const UniChar *characters, const UniChar *table, UInt32 size) { + const UniChar *u1, *u2; + UInt32 length; + + while (*table) { + u1 = characters; + u2 = table + 1; + for (length = size - 1;length;length--) if (*u1++ != *u2++) break; + if (!length) return *table; + table += size; + } + + return 0; +} + +static struct { + UInt16 word; + UniChar seq[2]; +} __CFF860SeqTable[] = { + {0x8591, {0x0030, 0x002E}}, + {0x85AD, {0x0058, 0x0056}}, + {0x85C1, {0x0078, 0x0076}}, + {0x865D, {0x0054, 0x0042}}, + {0x86CE, {0x2193, 0x2191}}, + {0}, +}; + +static struct { + UInt16 word; + UniChar seq[3]; +} __CFF861SeqTable[] = { + {0x85AC, {0x0058, 0x0049, 0x0056}}, + {0x85C0, {0x0078, 0x0069, 0x0076}}, + {0x869E, {0x0046, 0x0041, 0x0058}}, + {0}, +}; + +static struct { + UInt16 word; + UniChar seq[4]; +} __CFF862SeqTable[] = { + {0x85AB, {0x0058, 0x0049, 0x0049, 0x0049}}, + {0x85BF, {0x0078, 0x0069, 0x0069, 0x0069}}, + {0x87FB, {0x6709, 0x9650, 0x4F1A, 0x793E}}, + {0x87FC, {0x8CA1, 0x56E3, 0x6CD5, 0x4EBA}}, + {0}, +}; + +UInt32 __CFToMacJapanese(UInt32 flags, const UniChar *characters, UInt32 numChars, UInt8 *bytes, UInt32 maxByteLen, UInt32 *usedByteLen) { + UInt32 processedCharLen = 0; + UInt32 theUsedByteLen = 0; + UniChar ch; + Boolean mapBackSlushToYen = (flags & kCFStringEncodingUseHFSPlusCanonical ? TRUE : FALSE); + + while ((processedCharLen < numChars) && (!maxByteLen || ((theUsedByteLen < maxByteLen) || ((flags & kCFStringEncodingComposeCombinings) && __CFIsValidCombiningCharJapanese(*characters))))) { + ch = *characters; + + if (ch < 0x80) { + theUsedByteLen++; + if (maxByteLen) *bytes++ = (mapBackSlushToYen && ch == 0x5c ? 0x80 : (UInt8)ch); + } else if ((ch >= 0xFF61) && (ch <= 0xFF9F)) { + theUsedByteLen++; + if (maxByteLen) *bytes++ = (UInt8)(ch - 0xFF61 + 0xA1); + } else { + UInt16 word; + + if ((word = __CFToJIS(ch)) <= 0xFF) { + theUsedByteLen++; + if (maxByteLen) *bytes++ = (UInt8)word; + } else if (word < 0x8000) { + theUsedByteLen += 2; + if (maxByteLen) { + if (theUsedByteLen > maxByteLen) break; + JIS0208ToShiftJIS(word, bytes); + bytes += 2; + } + } else if ((ch >= 0xE000) && (ch <= 0xE98B)) { // EUDC + word = _CFToShiftJISEUDC(ch); + theUsedByteLen += 2; + if (maxByteLen) { + if (theUsedByteLen > maxByteLen) break; + *bytes++ = (word >> 8); *bytes++ = (word & 0xFF); + } + } else if ((word == 0xFFFD) && ((processedCharLen > 0) || ((ch & 0xFFF0) == 0xF860)) && !(flags & kCFStringEncodingSubstituteCombinings)) { + if (flags & kCFStringEncodingComposeCombinings) { + if (__CFIsValidCombiningCharJapanese(ch)) { + if ((word = __CFToJIS(__CFPrecomposeCharJapanese((characters - 1), TRUE))) < 0x8000) { + if (maxByteLen) { + JIS0208ToShiftJIS(word, bytes - (*(bytes - 1) == 0x003D ? 1 : 2)); // Should have cleaner solution for backtracking ? + } + } else { + *usedByteLen = theUsedByteLen; + return processedCharLen; + } + } else if (ch == 0x20DD) { + switch (*(characters - 1)) { + case 0x5927: word = 0x8791; break; + case 0x5C0F: word = 0x8792; break; + case 0x63A7: word = 0x879D; break; + default: + *usedByteLen = theUsedByteLen; + return processedCharLen; + } + + if (maxByteLen) { + *(bytes - 2) = (word >> 8); + *(bytes - 1) = (word & 0xFF); + } + } else if (ch == 0xF87A) { + switch (*(characters - 1)) { + case 0x21E6: word = 0x86D4; break; + case 0x21E7: word = 0x86D5; break; + case 0x21E8: word = 0x86D3; break; + case 0x21E9: word = 0x86D6; break; + default: + *usedByteLen = theUsedByteLen; + return processedCharLen; + } + + if (maxByteLen) { + *(bytes - 2) = (word >> 8); + *(bytes - 1) = (word & 0xFF); + } + } else if (ch == 0xF87E) { + switch (*(characters - 1)) { + case 0x2010: word = 0xEB5D; break; + case 0x2016: word = 0xEB61; break; + case 0x203E: word = 0xEB50; break; + case 0x22EF: word = 0xEB63; break; + case 0x3001: word = 0xEB41; break; + case 0x3002: word = 0xEB42; break; + case 0x301C: word = 0xEB60; break; + case 0x3041: word = 0xEC9F; break; + case 0x3043: word = 0xECA1; break; + case 0x3045: word = 0xECA3; break; + case 0x3047: word = 0xECA5; break; + case 0x3049: word = 0xECA7; break; + case 0x3063: word = 0xECC1; break; + case 0x3083: word = 0xECE1; break; + case 0x3085: word = 0xECE3; break; + case 0x3087: word = 0xECE5; break; + case 0x308E: word = 0xECEC; break; + case 0x30A1: word = 0xED40; break; + case 0x30A3: word = 0xED42; break; + case 0x30A5: word = 0xED44; break; + case 0x30A7: word = 0xED46; break; + case 0x30A9: word = 0xED48; break; + case 0x30C3: word = 0xED62; break; + case 0x30E3: word = 0xED83; break; + case 0x30E5: word = 0xED85; break; + case 0x30E7: word = 0xED87; break; + case 0x30EE: word = 0xED8E; break; + case 0x30F5: word = 0xED95; break; + case 0x30F6: word = 0xED96; break; + case 0x30FC: word = 0xEB5B; break; + case 0xFF1D: word = 0xEB81; break; + case 0xFF3B: word = 0xEB6D; break; + case 0xFF3D: word = 0xEB6E; break; + case 0xFF5C: word = 0xEB62; break; + default: + *usedByteLen = theUsedByteLen; + return processedCharLen; + } + + if (maxByteLen) { + *(bytes - 2) = (word >> 8); + *(bytes - 1) = (word & 0xFF); + } + } else if (ch == 0xF87F) { + switch (*(characters - 1)) { + case 0xFF47: word = 0x864B; break; + case 0xFF4D: word = 0x8645; break; + default: + *usedByteLen = theUsedByteLen; + return processedCharLen; + } + + if (maxByteLen) { + *(bytes - 2) = (word >> 8); + *(bytes - 1) = (word & 0xFF); + } + } else if (ch == 0xF860) { + if (((processedCharLen + 3) > numChars) || !(word = __CFLookupF86XSeq(++characters, (const UniChar*)__CFF860SeqTable, 3))) break; + if (maxByteLen) { + *bytes++ = (word >> 8); *bytes++ = (word & 0xFF); + } + theUsedByteLen += 2; + characters += 1; + processedCharLen += 2; + } else if (ch == 0xF861) { + if (((processedCharLen + 4) > numChars) || !(word = __CFLookupF86XSeq(++characters, (const UniChar*)__CFF861SeqTable, 4))) break; + if (maxByteLen) { + *bytes++ = (word >> 8); *bytes++ = (word & 0xFF); + } + theUsedByteLen += 2; + characters += 2; + processedCharLen += 3; + } else if (ch == 0xF862) { + if (((processedCharLen + 5) > numChars) || !(word = __CFLookupF86XSeq(++characters, (const UniChar*)__CFF862SeqTable, 5))) break; + if (maxByteLen) { + *bytes++ = (word >> 8); *bytes++ = (word & 0xFF); + } + theUsedByteLen += 2; + characters += 3; + processedCharLen += 4; + } else { + break; + } + } + } else { + break; + } + } + characters++; + processedCharLen++; + } + + *usedByteLen = theUsedByteLen; + return processedCharLen; +} + +static inline UInt16 __CFFromMacJapaneseCore(const UInt8 *bytes, UInt32 numBytes, UniChar *character, Boolean mapBackSlushToYen) { + if ((*bytes <= 0x80) || (*bytes == 0xA0)) { // ASCII + if (mapBackSlushToYen) { + *character = (*bytes == 0x5C ? (UniChar)0xA5 : (*bytes == 0x80 ? (UniChar)0x5C : (UniChar)*bytes)); + } else { + *character = (UniChar)*bytes; + } + return 1; + } else if (*bytes > 0xA0 && *bytes < 0xE0) { // Half width Kana + *character = (UniChar)(*bytes - 0xA1 + 0xFF61); + return 1; + } else { + switch (*bytes) { + case 0xFD: *character = 0x00A9; return 1; + case 0xFE: *character = 0x2122; return 1; + case 0xFF: *character = 0x2026; return 1; + + default: + if (numBytes > 1) { + if ((*character = __CFFromJIS0208(ShiftJISToJIS0208(bytes))) != 0xFFFD) { + return 2; + } else if (((*bytes >= 0xF0) && (*bytes <= 0xFC)) && ((*(bytes + 1) >= 0x40) && (*(bytes + 1) <= 0xFC) && (*(bytes + 1) != 0x7F))) { // EUDC + *character = _CFFromShiftJISEUDC(*bytes << 8 | *(bytes + 1)); + return 2; + } + } + } + return 0; + } +} + +/* This table maps MacJapanese encoded word to index into the tables below. Most 2bits are used for decomposed len selector */ +#define NUM_FROM_MACJAPANESE_DECOMP 55 +static const CFStringEncodingUnicodeTo8BitCharMap macjapanese_to_uni_decomp[NUM_FROM_MACJAPANESE_DECOMP] = { + {0x8591, 65}, // digit zero full stop + {0x85AB, 194}, // roman numeral thirteen + {0x85AC, 131}, // roman numeral fourteen + {0x85AD, 68}, // roman numeral fifteen + {0x85BF, 197}, // small roman numeral thirteen + {0x85C0, 134}, // small roman numeral fourteen + {0x85C1, 71}, // small roman numeral fifteen + {0x8645, 1}, // square m + {0x864B, 2}, // square g + {0x865D, 72}, // square TB + {0x869E, 137}, // FAX sign + {0x86CE, 74}, // downwards arrow leftwards of upwards arrow + {0x86D3, 3}, // rightwards black arrow + {0x86D4, 4}, // leftwards black arrow + {0x86D5, 5}, // upwards black arrow + {0x86D6, 6}, // downwards black arrow + {0x8791, 7}, // ideograph big + COMBINING ENCLOSING CIRCLE + {0x8792, 8}, // ideograph small + COMBINING ENCLOSING CIRCLE + {0x879D, 9}, // ideograph memo + COMBINING ENCLOSING CIRCLE + {0x87FB, 203}, // square "limited company, ltd. [yuugen gaisha]" + {0x87FC, 204}, // square "foundation [zaidan houjin]" + {0xEB41, 10}, // vertical form for IDEOGRAPHIC COMMA + {0xEB42, 11}, // vertical form for IDEOGRAPHIC FULL STOP + {0xEB50, 12}, // vertical form for OVERLINE + {0xEB5B, 13}, // vertical form for KATAKANA-HIRAGANA PROLONGED SOUND MARK + {0xEB5D, 14}, // vertical form for HYPHEN + {0xEB60, 15}, // vertical form for WAVE DASH + {0xEB61, 16}, // vertical form for DOUBLE VERTICAL LINE + {0xEB62, 17}, // vertical form for FULLWIDTH VERTICAL LINE + {0xEB63, 18}, // vertical form for MIDLINE HORIZONTAL ELLIPSIS + {0xEB6D, 19}, // vertical form for FULLWIDTH LEFT SQUARE BRACKET + {0xEB6E, 20}, // vertical form for FULLWIDTH RIGHT SQUARE BRACKET + {0xEB81, 21}, // vertical form for FULLWIDTH EQUALS SIGN + {0xEC9F, 22}, // vertical form for HIRAGANA LETTER SMALL A + {0xECA1, 23}, // vertical form for HIRAGANA LETTER SMALL I + {0xECA3, 24}, // vertical form for HIRAGANA LETTER SMALL U + {0xECA5, 25}, // vertical form for HIRAGANA LETTER SMALL E + {0xECA7, 26}, // vertical form for HIRAGANA LETTER SMALL O + {0xECC1, 27}, // vertical form for HIRAGANA LETTER SMALL TU + {0xECE1, 28}, // vertical form for HIRAGANA LETTER SMALL YA + {0xECE3, 29}, // vertical form for HIRAGANA LETTER SMALL YU + {0xECE5, 30}, // vertical form for HIRAGANA LETTER SMALL YO + {0xECEC, 31}, // vertical form for HIRAGANA LETTER SMALL WA + {0xED40, 32}, // vertical form for KATAKANA LETTER SMALL A + {0xED42, 33}, // vertical form for KATAKANA LETTER SMALL I + {0xED44, 34}, // vertical form for KATAKANA LETTER SMALL U + {0xED46, 35}, // vertical form for KATAKANA LETTER SMALL E + {0xED48, 36}, // vertical form for KATAKANA LETTER SMALL O + {0xED62, 37}, // vertical form for KATAKANA LETTER SMALL TU + {0xED83, 38}, // vertical form for KATAKANA LETTER SMALL YA + {0xED85, 39}, // vertical form for KATAKANA LETTER SMALL YU + {0xED87, 40}, // vertical form for KATAKANA LETTER SMALL YO + {0xED8E, 41}, // vertical form for KATAKANA LETTER SMALL WA + {0xED95, 42}, // vertical form for KATAKANA LETTER SMALL KA + {0xED96, 43}, // vertical form for KATAKANA LETTER SMALL KE +}; + +static const struct { + const UniChar seq[2]; +} __CFTwoCharDecompSeqTable[] = { + {{0xFF4D, 0xF87F}}, // square m + {{0xFF47, 0xF87F}}, // square g + {{0x21E8, 0xF87A}}, // rightwards black arrow + {{0x21E6, 0xF87A}}, // leftwards black arrow + {{0x21E7, 0xF87A}}, // upwards black arrow + {{0x21E9, 0xF87A}}, // downwards black arrow + {{0x5927, 0x20DD}}, // ideograph big , COMBINING ENCLOSING CIRCLE + {{0x5C0F, 0x20DD}}, // ideograph small , COMBINING ENCLOSING CIRCLE + {{0x63A7, 0x20DD}}, // ideograph memo , COMBINING ENCLOSING CIRCLE + {{0x3001, 0xF87E}}, // vertical form for IDEOGRAPHIC COMMA + {{0x3002, 0xF87E}}, // vertical form for IDEOGRAPHIC FULL STOP + {{0x203E, 0xF87E}}, // vertical form for OVERLINE + {{0x30FC, 0xF87E}}, // vertical form for KATAKANA-HIRAGANA PROLONGED SOUND MARK + {{0x2010, 0xF87E}}, // vertical form for HYPHEN + {{0x301C, 0xF87E}}, // vertical form for WAVE DASH + {{0x2016, 0xF87E}}, // vertical form for DOUBLE VERTICAL LINE + {{0xFF5C, 0xF87E}}, // vertical form for FULLWIDTH VERTICAL LINE + {{0x22EF, 0xF87E}}, // vertical form for MIDLINE HORIZONTAL ELLIPSIS + {{0xFF3B, 0xF87E}}, // vertical form for FULLWIDTH LEFT SQUARE BRACKET + {{0xFF3D, 0xF87E}}, // vertical form for FULLWIDTH RIGHT SQUARE BRACKET + {{0xFF1D, 0xF87E}}, // vertical form for FULLWIDTH EQUALS SIGN + {{0x3041, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL A + {{0x3043, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL I + {{0x3045, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL U + {{0x3047, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL E + {{0x3049, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL O + {{0x3063, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL TU + {{0x3083, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL YA + {{0x3085, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL YU + {{0x3087, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL YO + {{0x308E, 0xF87E}}, // vertical form for HIRAGANA LETTER SMALL WA + {{0x30A1, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL A + {{0x30A3, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL I + {{0x30A5, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL U + {{0x30A7, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL E + {{0x30A9, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL O + {{0x30C3, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL TU + {{0x30E3, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL YA + {{0x30E5, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL YU + {{0x30E7, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL YO + {{0x30EE, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL WA + {{0x30F5, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL KA + {{0x30F6, 0xF87E}}, // vertical form for KATAKANA LETTER SMALL KE +}; + +static const struct { + const UniChar seq[5]; +} __CFF86XCharDecompSeqTable[] = { + {{0xF860, 0x0030, 0x002E}}, // digit zero full stop + {{0xF862, 0x0058, 0x0049, 0x0049, 0x0049}}, // roman numeral thirteen + {{0xF861, 0x0058, 0x0049, 0x0056}}, // roman numeral fourteen + {{0xF860, 0x0058, 0x0056}}, // roman numeral fifteen + {{0xF862, 0x0078, 0x0069, 0x0069, 0x0069}}, // small roman numeral thirteen + {{0xF861, 0x0078, 0x0069, 0x0076}}, // small roman numeral fourteen + {{0xF860, 0x0078, 0x0076}}, // small roman numeral fifteen + {{0xF860, 0x0054, 0x0042}}, // square TB + {{0xF861, 0x0046, 0x0041, 0x0058}}, // FAX sign + {{0xF860, 0x2193, 0x2191}}, // downwards arrow leftwards of upwards arrow + {{0xF862, 0x6709, 0x9650, 0x4F1A, 0x793E}}, // square "limited company, ltd. [yuugen gaisha]" + {{0xF862, 0x8CA1, 0x56E3, 0x6CD5, 0x4EBA}}, // square "foundation [zaidan houjin]" +}; + +static inline void __usncpy(UniChar *c1, const UniChar *c2, UInt32 length) { + while (length--) *c1++ = *c2++; +} + + +/* Binary searches CFStringEncodingUnicodeTo8BitCharMap */ +static inline Boolean CFStringEncodingUnicodeTo8BitEncoding(const CFStringEncodingUnicodeTo8BitCharMap *theTable, UInt32 numElem, UniChar character, UInt8 *ch) { + const CFStringEncodingUnicodeTo8BitCharMap *p, *q, *divider; + + if ((character < theTable[0]._u) || (character > theTable[numElem-1]._u)) { + return 0; + } + p = theTable; + q = p + (numElem-1); + while (p <= q) { + divider = p + ((q - p) >> 1); /* divide by 2 */ + if (character < divider->_u) { q = divider - 1; } + else if (character > divider->_u) { p = divider + 1; } + else { *ch = divider->_c; return 1; } + } + return 0; +} + +UInt32 __CFFromMacJapanese(UInt32 flags, const UInt8 *bytes, UInt32 numBytes, UniChar *characters, UInt32 maxCharLen, UInt32 *usedCharLen) { + UInt32 processedByteLen = 0; + UniChar character; + UInt16 usedLen; + UniChar decompBuffer[5]; + UInt16 decompUsedLen; + UInt32 noF86x = (flags & kCFStringEncodingDisableCorporateArea); + Boolean mapBackSlushToYen = (flags & kCFStringEncodingUseHFSPlusCanonical ? TRUE : FALSE); + *usedCharLen = 0; + + while (numBytes && (!maxCharLen || (*usedCharLen < maxCharLen))) { + if (!(usedLen = __CFFromMacJapaneseCore(bytes, numBytes, &character, mapBackSlushToYen))) { + UInt8 byte; + + if ((numBytes > 1) && CFStringEncodingUnicodeTo8BitEncoding(macjapanese_to_uni_decomp, NUM_FROM_MACJAPANESE_DECOMP, (*bytes << 8) | *(bytes + 1), &byte)) { + UInt8 length = (byte >> 6) + 2; + UInt8 isLongSeq = (length > 2); + if (noF86x && (isLongSeq || (__CFTwoCharDecompSeqTable[(byte & 0x3F) - 1].seq[1] != 0x20DD))) length--; // Remove 0xF86x char from length + + if (maxCharLen) { + if (*usedCharLen + length > maxCharLen) break; + __usncpy(characters, (isLongSeq ? __CFF86XCharDecompSeqTable[(byte & 0x3F) - 1].seq + (noF86x ? 1 : 0) : __CFTwoCharDecompSeqTable[(byte & 0x3F) - 1].seq), length); + characters += length; + } + *usedCharLen += length; + processedByteLen += 2; + bytes += 2; + numBytes -= 2; + continue; + } else { + break; + } + } + + if ((flags & kCFStringEncodingUseCanonical) && CFStringEncodingIsDecomposableCharacter(character, (flags & kCFStringEncodingUseHFSPlusCanonical) != FALSE)) { + UniChar *decompPtr = decompBuffer; + decompUsedLen = CFStringEncodingDecomposeCharacter(flags, character, decompPtr); + (*usedCharLen) += decompUsedLen; + if (maxCharLen) { + if (*usedCharLen > maxCharLen) return processedByteLen; + while (decompUsedLen-- > 0) *characters++ = *decompPtr++; + } + } else { + if (maxCharLen) *(characters++) = character; + (*usedCharLen)++; + } + processedByteLen += usedLen; + bytes += usedLen; + numBytes -= usedLen; + } + + return processedByteLen; +} + diff --git a/hfs_japanese/hfs_japanese.kmodproj/Makefile b/hfs_japanese/hfs_japanese.kmodproj/Makefile new file mode 100644 index 0000000..e2885bb --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/Makefile @@ -0,0 +1,50 @@ +# +# Generated by the Apple Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = HFS_Japanese.kmod + +PROJECTVERSION = 2.8 +PROJECT_TYPE = Kernel Module + +HFILES = CFStub.h + +CFILES = hfs_japanese.c JapaneseConverter.c + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble\ + CustomInfo.xml + + +MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = kmod.make +NEXTSTEP_INSTALLDIR = /System/Library/Extensions +LIBS = +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) + + +NEXTSTEP_PB_CFLAGS = -Wno-format -Wno-four-char-constants + + +NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc +WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc +PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc +NEXTSTEP_JAVA_COMPILER = /usr/bin/javac +WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe +PDO_UNIX_JAVA_COMPILER = $(JDKBINDIR)/javac + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/hfs_japanese/hfs_japanese.kmodproj/Makefile.postamble b/hfs_japanese/hfs_japanese.kmodproj/Makefile.postamble new file mode 100644 index 0000000..411cde6 --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/Makefile.postamble @@ -0,0 +1,100 @@ +############################################################################### +# Makefile.postamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile, which is imported after all other makefiles, to +# override attributes for a project's Makefile environment. This allows you +# to take advantage of the environment set up by the other Makefiles. +# You can also define custom rules at the end of this file. +# +############################################################################### +# +# These variables are exported by the standard makefiles and can be +# used in any customizations you make. They are *outputs* of +# the Makefiles and should be used, not set. +# +# PRODUCTS: products to install. All of these products will be placed in +# the directory $(DSTROOT)$(INSTALLDIR) +# GLOBAL_RESOURCE_DIR: The directory to which resources are copied. +# LOCAL_RESOURCE_DIR: The directory to which localized resources are copied. +# OFILE_DIR: Directory into which .o object files are generated. +# DERIVED_SRC_DIR: Directory used for all other derived files +# +# ALL_CFLAGS: flags to pass when compiling .c files +# ALL_MFLAGS: flags to pass when compiling .m files +# ALL_CCFLAGS: flags to pass when compiling .cc, .cxx, and .C files +# ALL_MMFLAGS: flags to pass when compiling .mm, .mxx, and .M files +# ALL_PRECOMPFLAGS: flags to pass when precompiling .h files +# ALL_LDFLAGS: flags to pass when linking object files +# ALL_LIBTOOL_FLAGS: flags to pass when libtooling object files +# ALL_PSWFLAGS: flags to pass when processing .psw and .pswm (pswrap) files +# ALL_RPCFLAGS: flags to pass when processing .rpc (rpcgen) files +# ALL_YFLAGS: flags to pass when processing .y (yacc) files +# ALL_LFLAGS: flags to pass when processing .l (lex) files +# +# NAME: name of application, bundle, subproject, palette, etc. +# LANGUAGES: langages in which the project is written (default "English") +# English_RESOURCES: localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES: non-localized resources of project +# +# SRCROOT: base directory in which to place the new source files +# SRCPATH: relative path from SRCROOT to present subdirectory +# +# INSTALLDIR: Directory the product will be installed into by 'install' target +# PUBLIC_HDR_INSTALLDIR: where to install public headers. Don't forget +# to prefix this with DSTROOT when you use it. +# PRIVATE_HDR_INSTALLDIR: where to install private headers. Don't forget +# to prefix this with DSTROOT when you use it. +# +# EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows) +# +############################################################################### + +# Some compiler flags can be overridden here for certain build situations. +# +# WARNING_CFLAGS: flag used to set warning level (defaults to -Wmost) +# DEBUG_SYMBOLS_CFLAGS: debug-symbol flag passed to all builds (defaults +# to -g) +# DEBUG_BUILD_CFLAGS: flags passed during debug builds (defaults to -DDEBUG) +# OPTIMIZE_BUILD_CFLAGS: flags passed during optimized builds (defaults +# to -O) +# PROFILE_BUILD_CFLAGS: flags passed during profile builds (defaults +# to -pg -DPROFILE) +# LOCAL_DIR_INCLUDE_DIRECTIVE: flag used to add current directory to +# the include path (defaults to -I.) +# DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags +# passed to ld/libtool (defaults to nothing) + + +# Library and Framework projects only: +# INSTALL_NAME_DIRECTIVE: This directive ensures that executables linked +# against the framework will run against the correct version even if +# the current version of the framework changes. You may override this +# to "" as an alternative to using the DYLD_LIBRARY_PATH during your +# development cycle, but be sure to restore it before installing. + + +# Ownership and permissions of files installed by 'install' target + +#INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +#INSTALL_PERMISSIONS = + # If set, 'install' chmod's executable to this + + +# Options to strip. Note: -S strips debugging symbols (executables can be stripped +# down further with -x or, if they load no bundles, with no options at all). + +#STRIPFLAGS = -S + + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. Include them in +# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble. +# +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# diff --git a/hfs_japanese/hfs_japanese.kmodproj/Makefile.preamble b/hfs_japanese/hfs_japanese.kmodproj/Makefile.preamble new file mode 100644 index 0000000..c1624b4 --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/Makefile.preamble @@ -0,0 +1,137 @@ +############################################################################### +# Makefile.preamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile for configuring the standard application makefiles +# associated with ProjectBuilder. It is included before the main makefile. +# In Makefile.preamble you set attributes for a project, so they are available +# to the project's makefiles. In contrast, you typically write additional rules or +# override built-in behavior in the Makefile.postamble. +# +# Each directory in a project tree (main project plus subprojects) should +# have its own Makefile.preamble and Makefile.postamble. +############################################################################### +# +# Before the main makefile is included for this project, you may set: +# +# MAKEFILEDIR: Directory in which to find $(MAKEFILE) +# MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make) + +# Compiler/linker flags added to the defaults: The OTHER_* variables will be +# inherited by all nested sub-projects, but the LOCAL_ versions of the same +# variables will not. Put your -I, -D, -U, and -L flags in ProjectBuilder's +# Build Attributes inspector if at all possible. To override the default flags +# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble. The +# variables below are *inputs* to the build process and distinct from the override +# settings done (less often) in the Makefile.postamble. +# +# OTHER_CFLAGS, LOCAL_CFLAGS: additional flags to pass to the compiler +# Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m, +# .cc, .cxx, .C, and .M files. There is no need to respecify the +# flags in OTHER_MFLAGS, etc. +# OTHER_MFLAGS, LOCAL_MFLAGS: additional flags for .m files +# OTHER_CCFLAGS, LOCAL_CCFLAGS: additional flags for .cc, .cxx, and ...C files +# OTHER_MMFLAGS, LOCAL_MMFLAGS: additional flags for .mm and .M files +# OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS: additional flags used when +# precompiling header files +# OTHER_LDFLAGS, LOCAL_LDFLAGS: additional flags passed to ld and libtool +# OTHER_PSWFLAGS, LOCAL_PSWFLAGS: additional flags passed to pswrap +# OTHER_RPCFLAGS, LOCAL_RPCFLAGS: additional flags passed to rpcgen +# OTHER_YFLAGS, LOCAL_YFLAGS: additional flags passed to yacc +# OTHER_LFLAGS, LOCAL_LFLAGS: additional flags passed to lex + +# These variables provide hooks enabling you to add behavior at almost every +# stage of the make: +# +# BEFORE_PREBUILD: targets to build before installing headers for a subproject +# AFTER_PREBUILD: targets to build after installing headers for a subproject +# BEFORE_BUILD_RECURSION: targets to make before building subprojects +# BEFORE_BUILD: targets to make before a build, but after subprojects +# AFTER_BUILD: targets to make after a build +# +# BEFORE_INSTALL: targets to build before installing the product +# AFTER_INSTALL: targets to build after installing the product +# BEFORE_POSTINSTALL: targets to build before postinstalling every subproject +# AFTER_POSTINSTALL: targts to build after postinstalling every subproject +# +# BEFORE_INSTALLHDRS: targets to build before installing headers for a +# subproject +# AFTER_INSTALLHDRS: targets to build after installing headers for a subproject +# BEFORE_INSTALLSRC: targets to build before installing source for a subproject +# AFTER_INSTALLSRC: targets to build after installing source for a subproject +# +# BEFORE_DEPEND: targets to build before building dependencies for a +# subproject +# AFTER_DEPEND: targets to build after building dependencies for a +# subproject +# +# AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is +# updated every time the project is built. If NO, the dependency +# file is only built when the depend target is invoked. + +# Framework-related variables: +# FRAMEWORK_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the framework's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables + +# Library-related variables: +# PUBLIC_HEADER_DIR: Determines where public exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. For library projects you should +# set this to something like /Developer/Headers/$(NAME). Do not set +# this variable for framework projects unless you do not want the +# header files included in the framework. +# PRIVATE_HEADER_DIR: Determines where private exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. +# LIBRARY_STYLE: This may be either STATIC or DYNAMIC, and determines +# whether the libraries produced are statically linked when they +# are used or if they are dynamically loadable. This defaults to +# DYNAMIC. +# LIBRARY_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the library's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables +# +# INSTALL_AS_USER: owner of the intalled products (default root) +# INSTALL_AS_GROUP: group of the installed products (default wheel) +# INSTALL_PERMISSIONS: permissions of the installed product (default o+rX) +# +# OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be +# passed on the command line to recursive invocations of make. Note that +# the values in OTHER_*FLAGS are inherited by subprojects automatically -- +# you do not have to (and shouldn't) add OTHER_*FLAGS to +# OTHER_RECURSIVE_VARIABLES. + +# Additional headers to export beyond those in the PB.project: +# OTHER_PUBLIC_HEADERS +# OTHER_PROJECT_HEADERS +# OTHER_PRIVATE_HEADERS + +# Additional files for the project's product: <> +# OTHER_RESOURCES: (non-localized) resources for this project +# OTHER_OFILES: relocatables to be linked into this project +# OTHER_LIBS: more libraries to link against +# OTHER_PRODUCT_DEPENDS: other dependencies of this project +# OTHER_SOURCEFILES: other source files maintained by .pre/postamble +# OTHER_GARBAGE: additional files to be removed by `make clean' + +# Set this to YES if you don't want a final libtool call for a library/framework. +# BUILD_OFILES_LIST_ONLY + +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +# OTHER_GENERATED_OFILES = $(VERS_OFILE) + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +# Uncomment to suppress generation of a KeyValueCoding index when installing +# frameworks (This index is used by WOB and IB to determine keys available +# for an object). Set to YES by default. +# PREINDEX_FRAMEWORK = NO + +# Change this definition to install projects somewhere other than the +# standard locations. NEXT_ROOT defaults to "C:/Apple" on Windows systems +# and "" on other systems. +DSTROOT = $(HOME) diff --git a/hfs_japanese/hfs_japanese.kmodproj/PB.project b/hfs_japanese/hfs_japanese.kmodproj/PB.project new file mode 100644 index 0000000..428c241 --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/PB.project @@ -0,0 +1,25 @@ +{ + DYNAMIC_CODE_GEN = NO; + FILESTABLE = { + H_FILES = (CFStub.h); + OTHER_LINKED = (hfs_japanese.c, JapaneseConverter.c); + OTHER_SOURCES = (Makefile.preamble, Makefile, Makefile.postamble, CustomInfo.xml); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = {}; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_COMPILEROPTIONS = "-Wno-format -Wno-four-char-constants"; + NEXTSTEP_INSTALLDIR = /System/Library/Extensions; + NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; + NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; + PDO_UNIX_JAVA_COMPILER = "$(JDKBINDIR)/javac"; + PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; + PROJECTNAME = HFS_Japanese.kmod; + PROJECTTYPE = "Kernel Module"; + PROJECTVERSION = 2.8; + WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; + WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; + WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; +} diff --git a/hfs_japanese/hfs_japanese.kmodproj/hfs_japanese.c b/hfs_japanese/hfs_japanese.kmodproj/hfs_japanese.c new file mode 100644 index 0000000..667a078 --- /dev/null +++ b/hfs_japanese/hfs_japanese.kmodproj/hfs_japanese.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#include +#include + +#include "CFStub.h" +#include + + +int +MacJapaneseToUnicode(Str31 hfs_str, UniChar *uni_str, UniCharCount maxCharLen, UniCharCount *usedCharLen) +{ + UInt32 processedChars; + + processedChars = __CFFromMacJapanese(kCFStringEncodingUseCanonical | kCFStringEncodingUseHFSPlusCanonical, + &hfs_str[1], + hfs_str[0], + uni_str, + maxCharLen, + usedCharLen); + + if (processedChars == (UInt32)hfs_str[0]) + return (0); + else + return (-1); +} + +int +UnicodeToMacJapanese(UniChar *uni_str, UniCharCount unicodeChars, Str31 hfs_str) +{ + UniCharCount srcCharsUsed; + UInt32 usedByteLen = 0; + + srcCharsUsed = __CFToMacJapanese(kCFStringEncodingComposeCombinings | kCFStringEncodingUseHFSPlusCanonical, + uni_str, + unicodeChars, + (UInt8*)&hfs_str[1], + sizeof(Str31) - 1, + &usedByteLen); + + hfs_str[0] = usedByteLen; + + if (srcCharsUsed == unicodeChars) + return (0); + else + return (-1); +} + + +__private_extern__ int +hfs_japanese_start(kmod_info_t *ki, void *data) +{ + int result; + + result = hfs_addconverter(ki->id, kCFStringEncodingMacJapanese, + MacJapaneseToUnicode, UnicodeToMacJapanese); + + return (result == 0 ? KERN_SUCCESS : KERN_FAILURE); +} + +__private_extern__ int +hfs_japanese_stop(kmod_info_t *ki, void *data) +{ + int result; + + result = hfs_remconverter(ki->id, kCFStringEncodingMacJapanese); + + return (result == 0 ? KERN_SUCCESS : KERN_FAILURE); +} + + + diff --git a/hfs_util/Info.plist b/hfs_util/Info.plist new file mode 100644 index 0000000..1a8164f --- /dev/null +++ b/hfs_util/Info.plist @@ -0,0 +1,126 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.filesystems.hfs + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + hfs + CFBundlePackageType + fs + CFBundleSignature + ???? + CFBundleVersion + 1.0 + CFBundleShortVersionString + 1.0 + FSMediaTypes + + Apple_HFS + + FSMediaProperties + + Content Hint + Apple_HFS + Leaf + + + FSProbeArguments + -p + FSProbeExecutable + ../../hfs.util + FSProbeOrder + 1000 + + CD + + FSMediaProperties + + Content Hint + CD_ROM_Mode_1 + Leaf + + + FSProbeArguments + -p + FSProbeExecutable + ../../hfs.util + FSProbeOrder + 3000 + + Partitionless + + FSMediaProperties + + Leaf + + Whole + + + FSProbeArguments + -p + FSProbeExecutable + ../../hfs.util + FSProbeOrder + 3000 + + + FSPersonalities + + HFS + + FSFormatArguments + -h + FSFormatContentMask + Apple_HFS + FSFormatExecutable + ../../../../../../sbin/newfs_hfs + FSFormatMinimumSize + 0 + FSMountArguments + + FSMountExecutable + ../../../../../../sbin/mount_hfs + FSName + Mac OS Standard + FSRepairArguments + -y + FSRepairExecutable + ../../../../../../sbin/fsck_hfs + FSVerificationArguments + -n + FSVerificationExecutable + ../../../../../../sbin/fsck_hfs + + HFS+ + + FSFormatArguments + -w + FSFormatContentMask + Apple_HFS + FSFormatExecutable + ../../../../../../sbin/newfs_hfs + FSFormatMinimumSize + 4194304 + FSMountArguments + + FSMountExecutable + ../../../../../../sbin/mount_hfs + FSName + Mac OS Extended + FSRepairArguments + -y + FSRepairExecutable + ../../../../../../sbin/fsck_hfs + FSVerificationArguments + -n + FSVerificationExecutable + ../../../../../../sbin/fsck_hfs + + + + diff --git a/hfs_util/InfoPlist.strings b/hfs_util/InfoPlist.strings new file mode 100644 index 0000000..5a09ea5 --- /dev/null +++ b/hfs_util/InfoPlist.strings @@ -0,0 +1,21 @@ + + + + + CFBundleName + hfs + FSPersonalities + + HFS + + FSName + Mac OS Standard + + HFS+ + + FSName + Mac OS Extended + + + + diff --git a/hfs_util/Makefile b/hfs_util/Makefile new file mode 100644 index 0000000..e92132b --- /dev/null +++ b/hfs_util/Makefile @@ -0,0 +1,50 @@ +# +# Generated by the Apple Project Builder. +# +# NOTE: Do NOT change this file -- Project Builder maintains it. +# +# Put all of your customizations in files called Makefile.preamble +# and Makefile.postamble (both optional), and Makefile will include them. +# + +NAME = hfs.util + +PROJECTVERSION = 2.8 +PROJECT_TYPE = Tool + +CFILES = hfsutil_main.c + +OTHERSRCS = Makefile.preamble Makefile Makefile.postamble\ + hfs_CD.fs.tiff hfs_CD.openfs.tiff hfs_FD.fs.tiff\ + hfs_FD.openfs.tiff hfs_HD.fs.tiff hfs_HD.openfs.tiff\ + hfs_RHD.fs.tiff hfs_RHD.openfs.tiff Info.plist InfoPlist.strings PkgInfo version.plist + + +MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles +CODE_GEN_STYLE = DYNAMIC +MAKEFILE = tool.make +NEXTSTEP_INSTALLDIR = $(SYSTEM_LIBRARY_DIR)/Filesystems/hfs.fs +LIBS = +DEBUG_LIBS = $(LIBS) +PROF_LIBS = $(LIBS) + + +FRAMEWORKS = -framework CoreFoundation + + +NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc +WINDOWS_OBJCPLUS_COMPILER = $(DEVDIR)/gcc +PDO_UNIX_OBJCPLUS_COMPILER = $(NEXTDEV_BIN)/gcc +NEXTSTEP_JAVA_COMPILER = /usr/bin/javac +WINDOWS_JAVA_COMPILER = $(JDKBINDIR)/javac.exe +PDO_UNIX_JAVA_COMPILER = $(NEXTDEV_BIN)/javac + +include $(MAKEFILEDIR)/platform.make + +-include Makefile.preamble + +include $(MAKEFILEDIR)/$(MAKEFILE) + +-include Makefile.postamble + +-include Makefile.dependencies diff --git a/hfs_util/Makefile.postamble b/hfs_util/Makefile.postamble new file mode 100644 index 0000000..fbe7123 --- /dev/null +++ b/hfs_util/Makefile.postamble @@ -0,0 +1,112 @@ +############################################################################### +# Makefile.postamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile, which is imported after all other makefiles, to +# override attributes for a project's Makefile environment. This allows you +# to take advantage of the environment set up by the other Makefiles. +# You can also define custom rules at the end of this file. +# +############################################################################### +# +# These variables are exported by the standard makefiles and can be +# used in any customizations you make. They are *outputs* of +# the Makefiles and should be used, not set. +# +# PRODUCTS: products to install. All of these products will be placed in +# the directory $(DSTROOT)$(INSTALLDIR) +# GLOBAL_RESOURCE_DIR: The directory to which resources are copied. +# LOCAL_RESOURCE_DIR: The directory to which localized resources are copied. +# OFILE_DIR: Directory into which .o object files are generated. +# DERIVED_SRC_DIR: Directory used for all other derived files +# +# ALL_CFLAGS: flags to pass when compiling .c files +# ALL_MFLAGS: flags to pass when compiling .m files +# ALL_CCFLAGS: flags to pass when compiling .cc, .cxx, and .C files +# ALL_MMFLAGS: flags to pass when compiling .mm, .mxx, and .M files +# ALL_PRECOMPFLAGS: flags to pass when precompiling .h files +# ALL_LDFLAGS: flags to pass when linking object files +# ALL_LIBTOOL_FLAGS: flags to pass when libtooling object files +# ALL_PSWFLAGS: flags to pass when processing .psw and .pswm (pswrap) files +# ALL_RPCFLAGS: flags to pass when processing .rpc (rpcgen) files +# ALL_YFLAGS: flags to pass when processing .y (yacc) files +# ALL_LFLAGS: flags to pass when processing .l (lex) files +# +# NAME: name of application, bundle, subproject, palette, etc. +# LANGUAGE: langage in which the project is written (default "English") +# LOCAL_RESOURCES: localized resources (e.g. nib's, images) of project +# GLOBAL_RESOURCES: non-localized resources of project +# +# SRCROOT: base directory in which to place the new source files +# SRCPATH: relative path from SRCROOT to present subdirectory +# +# INSTALLDIR: Directory the product will be installed into by 'install' target +# PUBLIC_HDR_INSTALLDIR: where to install public headers. Don't forget +# to prefix this with DSTROOT when you use it. +# PRIVATE_HDR_INSTALLDIR: where to install private headers. Don't forget +# to prefix this with DSTROOT when you use it. +# +# EXECUTABLE_EXT: Executable extension for the platform (i.e. .exe on Windows) +# +############################################################################### + +# Some compiler flags can be overridden here for certain build situations. +# +# WARNING_CFLAGS: flag used to set warning level (defaults to -Wmost) +# DEBUG_SYMBOLS_CFLAGS: debug-symbol flag passed to all builds (defaults +# to -g) +# DEBUG_BUILD_CFLAGS: flags passed during debug builds (defaults to -DDEBUG) +# OPTIMIZE_BUILD_CFLAGS: flags passed during optimized builds (defaults +# to -O) +# PROFILE_BUILD_CFLAGS: flags passed during profile builds (defaults +# to -pg -DPROFILE) +# LOCAL_DIR_INCLUDE_DIRECTIVE: flag used to add current directory to +# the include path (defaults to -I.) +# DEBUG_BUILD_LDFLAGS, OPTIMIZE_BUILD_LDFLAGS, PROFILE_BUILD_LDFLAGS: flags +# passed to ld/libtool (defaults to nothing) + + +# Library and Framework projects only: +# INSTALL_NAME_DIRECTIVE: This directive ensures that executables linked +# against the framework will run against the correct version even if +# the current version of the framework changes. You may override this +# to "" as an alternative to using the DYLD_LIBRARY_PATH during your +# development cycle, but be sure to restore it before installing. + + +# Ownership and permissions of files installed by 'install' target + +INSTALL_AS_USER = root + # User/group ownership +#INSTALL_AS_GROUP = wheel + # (probably want to set both of these) +INSTALL_PERMISSIONS = 4555 + # If set, 'install' chmod's executable to this + + +# Options to strip. Note: -S strips debugging symbols (executables can be stripped +# down further with -x or, if they load no bundles, with no options at all). + +#STRIPFLAGS = -S + + +######################################################################### +# Put rules to extend the behavior of the standard Makefiles here. Include them in +# the dependency tree via cvariables like AFTER_INSTALL in the Makefile.preamble. +# +# You should avoid redefining things like "install" or "app", as they are +# owned by the top-level Makefile API and no context has been set up for where +# derived files should go. +# + +after_install:: + +buildContentsDir: + mkdir -p $(DSTROOT)$(INSTALLDIR)/Contents/Resources/English.lproj + cp -pr Info.plist $(DSTROOT)$(INSTALLDIR)/Contents + cp -pr PkgInfo $(DSTROOT)$(INSTALLDIR)/Contents + cp -pr version.plist $(DSTROOT)$(INSTALLDIR)/Contents + cp -pr InfoPlist.strings $(DSTROOT)$(INSTALLDIR)/Contents/Resources/English.lproj + chown -Rf root:wheel $(DSTROOT)$(INSTALLDIR)/Contents + find $(DSTROOT)$(INSTALLDIR)/Contents -type d -exec chmod 755 {} \; + find $(DSTROOT)$(INSTALLDIR)/Contents -type f -exec chmod 644 {} \; diff --git a/hfs_util/Makefile.preamble b/hfs_util/Makefile.preamble new file mode 100644 index 0000000..53ec2e7 --- /dev/null +++ b/hfs_util/Makefile.preamble @@ -0,0 +1,127 @@ +############################################################################### +# Makefile.preamble +# Copyright 1997, Apple Computer, Inc. +# +# Use this makefile for configuring the standard application makefiles +# associated with ProjectBuilder. It is included before the main makefile. +# In Makefile.preamble you set attributes for a project, so they are available +# to the project's makefiles. In contrast, you typically write additional rules or +# override built-in behavior in the Makefile.postamble. +# +# Each directory in a project tree (main project plus subprojects) should +# have its own Makefile.preamble and Makefile.postamble. +############################################################################### +# +# Before the main makefile is included for this project, you may set: +# +# MAKEFILEDIR: Directory in which to find $(MAKEFILE) +# MAKEFILE: Top level mechanism Makefile (e.g., app.make, bundle.make) + +# Compiler/linker flags added to the defaults: The OTHER_* variables will be +# inherited by all nested sub-projects, but the LOCAL_ versions of the same +# variables will not. Put your -I, -D, -U, and -L flags in ProjectBuilder's +# Build Attributes inspector if at all possible. To override the default flags +# that get passed to ${CC} (e.g. change -O to -O2), see Makefile.postamble. The +# variables below are *inputs* to the build process and distinct from the override +# settings done (less often) in the Makefile.postamble. +# +# OTHER_CFLAGS, LOCAL_CFLAGS: additional flags to pass to the compiler +# Note that $(OTHER_CFLAGS) and $(LOCAL_CFLAGS) are used for .h, ...c, .m, +# .cc, .cxx, .C, and .M files. There is no need to respecify the +# flags in OTHER_MFLAGS, etc. +# OTHER_MFLAGS, LOCAL_MFLAGS: additional flags for .m files +# OTHER_CCFLAGS, LOCAL_CCFLAGS: additional flags for .cc, .cxx, and ...C files +# OTHER_MMFLAGS, LOCAL_MMFLAGS: additional flags for .mm and .M files +# OTHER_PRECOMPFLAGS, LOCAL_PRECOMPFLAGS: additional flags used when +# precompiling header files +# OTHER_LDFLAGS, LOCAL_LDFLAGS: additional flags passed to ld and libtool +# OTHER_PSWFLAGS, LOCAL_PSWFLAGS: additional flags passed to pswrap +# OTHER_RPCFLAGS, LOCAL_RPCFLAGS: additional flags passed to rpcgen +# OTHER_YFLAGS, LOCAL_YFLAGS: additional flags passed to yacc +# OTHER_LFLAGS, LOCAL_LFLAGS: additional flags passed to lex + +# These variables provide hooks enabling you to add behavior at almost every +# stage of the make: +# +# BEFORE_PREBUILD: targets to build before installing headers for a subproject +# AFTER_PREBUILD: targets to build after installing headers for a subproject +# BEFORE_BUILD_RECURSION: targets to make before building subprojects +# BEFORE_BUILD: targets to make before a build, but after subprojects +# AFTER_BUILD: targets to make after a build +# +# BEFORE_INSTALL: targets to build before installing the product +# AFTER_INSTALL: targets to build after installing the product +# BEFORE_POSTINSTALL: targets to build before postinstalling every subproject +# AFTER_POSTINSTALL: targts to build after postinstalling every subproject +# +# BEFORE_INSTALLHDRS: targets to build before installing headers for a +# subproject +# AFTER_INSTALLHDRS: targets to build after installing headers for a subproject +# BEFORE_INSTALLSRC: targets to build before installing source for a subproject +# AFTER_INSTALLSRC: targets to build after installing source for a subproject +# +# BEFORE_DEPEND: targets to build before building dependencies for a +# subproject +# AFTER_DEPEND: targets to build after building dependencies for a +# subproject +# +# AUTOMATIC_DEPENDENCY_INFO: if YES, then the dependency file is +# updated every time the project is built. If NO, the dependency +# file is only built when the depend target is invoked. + +# Framework-related variables: +# FRAMEWORK_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the framework's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables + +# Library-related variables: +# PUBLIC_HEADER_DIR: Determines where public exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. +# PRIVATE_HEADER_DIR: Determines where private exported header files +# should be installed. Do not include $(DSTROOT) in this value -- +# it is prefixed automatically. +# LIBRARY_STYLE: This may be either STATIC or DYNAMIC, and determines +# whether the libraries produced are statically linked when they +# are used or if they are dynamically loadable. <> +# LIBRARY_DLL_INSTALLDIR: On Windows platforms, this variable indicates +# where to put the library's DLL. This variable defaults to +# $(INSTALLDIR)/../Executables +# +# INSTALL_AS_USER: owner of the intalled products (default root) +# INSTALL_AS_GROUP: group of the installed products (default wheel) +# INSTALL_PERMISSION: permissions of the installed product (default o+rX) +# +# OTHER_RECURSIVE_VARIABLES: The names of variables which you want to be +# passed on the command line to recursive invocations of make. Note that +# the values in OTHER_*FLAGS are inherited by subprojects automatically -- +# you do not have to (and shouldn't) add OTHER_*FLAGS to +# OTHER_RECURSIVE_VARIABLES. + +# Additional headers to export beyond those in the PB.project: +# OTHER_PUBLIC_HEADERS +# OTHER_PROJECT_HEADERS +# OTHER_PRIVATE_HEADERS + +# Additional files for the project's product: <> +# OTHER_RESOURCES: (non-localized) resources for this project +# OTHER_OFILES: relocatables to be linked into this project +# OTHER_LIBS: more libraries to link against +# OTHER_PRODUCT_DEPENDS: other dependencies of this project +# OTHER_SOURCEFILES: other source files maintained by .pre/postamble +# OTHER_GARBAGE: additional files to be removed by `make clean' + +#OTHER_LIBS += -lkernload + +# Set this to YES if you don't want a final libtool call for a library/framework. +# BUILD_OFILES_LIST_ONLY + +# To include a version string, project source must exist in a directory named +# $(NAME).%d[.%d][.%d] and the following line must be uncommented. +OTHER_GENERATED_OFILES = $(VERS_OFILE) + +# This definition will suppress stripping of debug symbols when an executable +# is installed. By default it is YES. +# STRIP_ON_INSTALL = NO + +AFTER_INSTALL += buildContentsDir diff --git a/hfs_util/PB.project b/hfs_util/PB.project new file mode 100644 index 0000000..7bc97c2 --- /dev/null +++ b/hfs_util/PB.project @@ -0,0 +1,51 @@ +{ + DYNAMIC_CODE_GEN = YES; + FILESTABLE = { + BUNDLES = (); + CLASSES = (); + C_FILES = (); + FRAMEWORKS = (CoreFoundation.framework); + FRAMEWORKSEARCH = (); + H_FILES = (); + M_FILES = (); + OTHER_LINKED = (hfsutil_main.c); + OTHER_SOURCES = ( + Makefile.preamble, + Makefile, + Makefile.postamble, + hfs_CD.fs.tiff, + hfs_CD.openfs.tiff, + hfs_FD.fs.tiff, + hfs_FD.openfs.tiff, + hfs_HD.fs.tiff, + hfs_HD.openfs.tiff, + hfs_RHD.fs.tiff, + hfs_RHD.openfs.tiff, + Info.plist, + InfoPlist.strings, + PkgInfo, + version.plist + ); + PRECOMPILED_HEADERS = (); + PROJECT_HEADERS = (); + PUBLIC_HEADERS = (); + SUBPROJECTS = (); + TOOLS = (); + }; + LANGUAGE = English; + LOCALIZABLE_FILES = {}; + MAKEFILEDIR = "$(MAKEFILEPATH)/pb_makefiles"; + NEXTSTEP_BUILDTOOL = /bin/gnumake; + NEXTSTEP_INSTALLDIR = "$(SYSTEM_LIBRARY_DIR)/Filesystems/hfs.fs"; + NEXTSTEP_JAVA_COMPILER = /usr/bin/javac; + NEXTSTEP_OBJCPLUS_COMPILER = /usr/bin/cc; + PDO_UNIX_BUILDTOOL = $NEXT_ROOT/Developer/bin/make; + PDO_UNIX_JAVA_COMPILER = "$(NEXTDEV_BIN)/javac"; + PDO_UNIX_OBJCPLUS_COMPILER = "$(NEXTDEV_BIN)/gcc"; + PROJECTNAME = hfs.util; + PROJECTTYPE = Tool; + PROJECTVERSION = 2.8; + WINDOWS_BUILDTOOL = $NEXT_ROOT/Developer/Executables/make; + WINDOWS_JAVA_COMPILER = "$(JDKBINDIR)/javac.exe"; + WINDOWS_OBJCPLUS_COMPILER = "$(DEVDIR)/gcc"; +} diff --git a/hfs_util/PkgInfo b/hfs_util/PkgInfo new file mode 100644 index 0000000..b2c4b86 --- /dev/null +++ b/hfs_util/PkgInfo @@ -0,0 +1 @@ +fs ???? \ No newline at end of file diff --git a/hfs_util/hfs_CD.fs.tiff b/hfs_util/hfs_CD.fs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..970b4f179f90efef01c75dd60cc1230d40cb3a2f GIT binary patch literal 7686 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 literal 0 HcmV?d00001 diff --git a/hfs_util/hfs_CD.openfs.tiff b/hfs_util/hfs_CD.openfs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..970b4f179f90efef01c75dd60cc1230d40cb3a2f GIT binary patch literal 7686 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 literal 0 HcmV?d00001 diff --git a/hfs_util/hfs_FD.fs.tiff b/hfs_util/hfs_FD.fs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..986b454c81464b9a3b00de84a8f4342ac0a89e74 GIT binary patch literal 5372 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 k{ZEbo7YE@V$2=DT|8cx^QS%?iKQH+I literal 0 HcmV?d00001 diff --git a/hfs_util/hfs_FD.openfs.tiff b/hfs_util/hfs_FD.openfs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..986b454c81464b9a3b00de84a8f4342ac0a89e74 GIT binary patch literal 5372 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 k{ZEbo7YE@V$2=DT|8cx^QS%?iKQH+I literal 0 HcmV?d00001 diff --git a/hfs_util/hfs_HD.fs.tiff b/hfs_util/hfs_HD.fs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..1e464843fc402aef91ef0fb9d77215cb37e6cd6d GIT binary patch literal 3938 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 N%>Roqarysi>|cUe(82%! literal 0 HcmV?d00001 diff --git a/hfs_util/hfs_RHD.fs.tiff b/hfs_util/hfs_RHD.fs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..12a989d75e943611e6cbcda0791bd6f2771a587f GIT binary patch literal 3796 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 uH~;e0ES%H-g(To1uuR8 literal 0 HcmV?d00001 diff --git a/hfs_util/hfs_RHD.openfs.tiff b/hfs_util/hfs_RHD.openfs.tiff new file mode 100644 index 0000000000000000000000000000000000000000..99a28817bedbf96f069b2bf76d0533c4e500fc93 GIT binary patch literal 3854 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 +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#define READ_DEFAULT_ENCODING 1 + +#ifndef FSUR_MOUNT_HIDDEN +#define FSUR_MOUNT_HIDDEN (-9) +#endif + +#ifndef FSUC_GETKEY +#define FSUC_GETKEY 'k' +#endif + +#ifndef FSUC_ADOPT +#define FSUC_ADOPT 'a' +#endif + +#ifndef FSUC_DISOWN +#define FSUC_DISOWN 'd' +#endif + +#ifndef FSUC_NEWUUID +#define FSUC_NEWUUID 'n' +#endif + + + +/* **************************************** L O C A L S ******************************************* */ + +#define HFS_BLOCK_SIZE 512 + +char gHFS_FS_NAME[] = "hfs"; +char gHFS_FS_NAME_NAME[] = "HFS"; + +char gFS_UUID_SUFFIX[] = ".uuid"; +char gNewlineString[] = "\n"; + +char gMountCommand[] = "/sbin/mount"; + +char gUnmountCommand[] = "/sbin/umount"; + +char gReadOnlyOption[] = "-r"; +char gReadWriteOption[] = "-w"; + +char gUsePermissionsOption[] = "perm"; +char gIgnorePermissionsOption[] = "noperm"; + +boolean_t gIsEjectable = 0; + +#define AUTO_ADOPT_FIXED 1 +#define AUTO_ENTER_FIXED 0 + + +#define VOLUMEUUIDVALUESIZE 2 +typedef union VolumeUUID { + unsigned long value[VOLUMEUUIDVALUESIZE]; + struct { + unsigned long high; + unsigned long low; + } v; +} VolumeUUID; + +#define VOLUMEUUIDLENGTH 16 +typedef char VolumeUUIDString[VOLUMEUUIDLENGTH+1]; + +#define VOLUME_RECORDED 0x80000000 +#define VOLUME_USEPERMISSIONS 0x00000001 +#define VOLUME_VALIDSTATUSBITS ( VOLUME_USEPERMISSIONS ) + +typedef void *VolumeStatusDBHandle; + +void GenerateVolumeUUID(VolumeUUID *newVolumeID); +void ConvertVolumeUUIDStringToUUID(const char *UUIDString, VolumeUUID *volumeID); +void ConvertVolumeUUIDToString(VolumeUUID *volumeID, char *UUIDString); + +int OpenVolumeStatusDB(VolumeStatusDBHandle *DBHandlePtr); +int GetVolumeStatusDBEntry(VolumeStatusDBHandle DBHandle, VolumeUUID *volumeID, unsigned long *VolumeStatus); +int SetVolumeStatusDBEntry(VolumeStatusDBHandle DBHandle, VolumeUUID *volumeID, unsigned long VolumeStatus); +int DeleteVolumeStatusDBEntry(VolumeStatusDBHandle DBHandle, VolumeUUID *volumeID); +int CloseVolumeStatusDB(VolumeStatusDBHandle DBHandle); + +/* ************************************ P R O T O T Y P E S *************************************** */ + +static void DoDisplayUsage( const char * argv[] ); +static void DoFileSystemFile( char * theFileNameSuffixPtr, char * theContentsPtr ); +static int DoMount( char * theDeviceNamePtr, const char * theMountPointPtr, boolean_t isLocked ); +static int DoProbe( char * theDeviceNamePtr ); +static int DoUnmount( const char * theMountPointPtr ); +static int DoGetUUIDKey( const char * theDeviceNamePtr ); +static int DoChangeUUIDKey( const char * theDeviceNamePtr ); +static int DoAdopt( const char * theDeviceNamePtr ); +static int DoDisown( const char * theDeviceNamePtr ); +static int ParseArgs( int argc, const char * argv[], const char ** actionPtr, const char ** mountPointPtr, boolean_t * isEjectablePtr, boolean_t * isLockedPtr ); + +static int GetVolumeUUID(const char *deviceNamePtr, VolumeUUID *volumeUUIDPtr, boolean_t generate); +static int SetVolumeUUID(const char *deviceNamePtr, VolumeUUID *volumeUUIDPtr); +static int GetEmbeddedHFSPlusVol(HFSMasterDirectoryBlock * hfsMasterDirectoryBlockPtr, off_t * startOffsetPtr); +static int GetNameFromHFSPlusVolumeStartingAt(int fd, off_t hfsPlusVolumeOffset, char * name_o); +static int GetBTreeNodeInfo(int fd, off_t btreeOffset, u_int32_t *nodeSize, u_int32_t *firstLeafNode); +static off_t CalcLeafNodeOffset(off_t fileOffset, u_int32_t blockSize, u_int32_t extentCount, + HFSPlusExtentDescriptor *extentList); +static int GetCatalogOverflowExtents(int fd, off_t hfsPlusVolumeOffset, HFSPlusVolumeHeader *volHdrPtr, + HFSPlusExtentDescriptor **catalogExtents, u_int32_t *catalogExtCount); +static ssize_t readAt( int fd, void * buf, off_t offset, ssize_t length ); +static ssize_t writeAt( int fd, void * buf, off_t offset, ssize_t length ); + + +/* + * The fuction CFStringGetSystemEncoding does not work correctly in + * our context (autodiskmount deamon). We include a local copy here + * so that we can derive the default encoding. Radar 2516316. + */ +#if READ_DEFAULT_ENCODING +#define __kCFUserEncodingFileName ("/.CFUserTextEncoding") + +static unsigned int __CFStringGetDefaultEncodingForHFSUtil() { + struct passwd *passwdp; + + if ((passwdp = getpwuid(0))) { // root account + char buffer[MAXPATHLEN + 1]; + int fd; + + strcpy(buffer, passwdp->pw_dir); + strcat(buffer, __kCFUserEncodingFileName); + + if ((fd = open(buffer, O_RDONLY, 0)) > 0) { + size_t readSize; + + readSize = read(fd, buffer, MAXPATHLEN); + buffer[(readSize < 0 ? 0 : readSize)] = '\0'; + close(fd); + return strtol(buffer, NULL, 0); + } + } + return 0; // Fallback to smRoman +} +#endif + +/* ******************************************** main ************************************************ +Purpose - +This our main entry point to this utility. We get called by the WorkSpace. See ParseArgs +for detail info on input arguments. +Input - +argc - the number of arguments in argv. +argv - array of arguments. +Output - +returns FSUR_IO_SUCCESS if OK else one of the other FSUR_xyz errors in loadable_fs.h. +*************************************************************************************************** */ + +int main (int argc, const char *argv[]) +{ + const char * actionPtr = NULL; + char rawDeviceName[MAXPATHLEN]; + char blockDeviceName[MAXPATHLEN]; + const char * mountPointPtr = NULL; + int result = FSUR_IO_SUCCESS; + boolean_t isLocked = 0; /* reasonable assumptions */ + + /* Verify our arguments */ + if ( (result = ParseArgs( argc, argv, & actionPtr, & mountPointPtr, & gIsEjectable, & isLocked )) != 0 ) { + goto AllDone; + } + + /* + -- Build our device name (full path), should end up with something like: + -- "/dev/disk0s2" + */ + + sprintf(rawDeviceName, "/dev/r%s", argv[2]); + sprintf(blockDeviceName, "/dev/%s", argv[2]); + + /* call the appropriate routine to handle the given action argument after becoming root */ + + result = seteuid( 0 ); + if ( result ) { + result = FSUR_INVAL; + goto AllDone; + } + + result = setegid( 0 ); // PPD - is this necessary? + + switch( * actionPtr ) { + case FSUC_PROBE: + result = DoProbe(rawDeviceName); + break; + + case FSUC_MOUNT: + case FSUC_MOUNT_FORCE: + result = DoMount(blockDeviceName, mountPointPtr, isLocked); + break; + + case FSUC_UNMOUNT: + result = DoUnmount( mountPointPtr ); + break; + + case FSUC_GETKEY: + result = DoGetUUIDKey( blockDeviceName ); + break; + + case FSUC_NEWUUID: + result = DoChangeUUIDKey( blockDeviceName ); + break; + + case FSUC_ADOPT: + result = DoAdopt( blockDeviceName ); + break; + + case FSUC_DISOWN: + result = DoDisown( blockDeviceName ); + break; + + default: + /* should never get here since ParseArgs should handle this situation */ + DoDisplayUsage( argv ); + result = FSUR_INVAL; + break; + } + +AllDone: + + exit(result); + + return result; /*...and make main fit the ANSI spec. */ +} + + +/* ***************************** DoMount ******************************** +Purpose - +This routine will fire off a system command to mount the given device at the given mountpoint. +autodiskmount will make sure the mountpoint exists and will remove it at Unmount time. +Input - +deviceNamePtr - pointer to the device name (full path, like /dev/disk0s2). +mountPointPtr - pointer to the mount point. +isLocked - a flag +Output - +returns FSUR_IO_SUCCESS everything is cool else one of several other FSUR_xyz error codes. +*********************************************************************** */ +static int +DoMount(char *deviceNamePtr, const char *mountPointPtr, boolean_t isLocked) +{ + int pid; + char *isLockedstr; + char *permissionsOption; + int result = FSUR_IO_FAIL; + union wait status; + char encodeopt[16] = ""; + CFStringEncoding encoding; + VolumeUUID targetVolumeUUID; + VolumeStatusDBHandle vsdbhandle = NULL; + unsigned long targetVolumeStatus; + + if (mountPointPtr == NULL || *mountPointPtr == '\0') + return (FSUR_IO_FAIL); + + /* get the volume UUID to check if permissions should be used: */ + targetVolumeStatus = 0; + if (((result = GetVolumeUUID(deviceNamePtr, &targetVolumeUUID, FALSE)) != FSUR_IO_SUCCESS) || + (targetVolumeUUID.v.high ==0) || + (targetVolumeUUID.v.low == 0)) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: GetVolumeUUID returned %d.\n", result); +#endif +#if AUTO_ADOPT_FIXED + if (gIsEjectable == 0) { + result = DoAdopt( deviceNamePtr ); +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: Auto-adopting %s; result = %d.\n", deviceNamePtr, result); +#endif + targetVolumeStatus = VOLUME_USEPERMISSIONS; + } else { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: Not adopting ejectable %s.\n", deviceNamePtr); +#endif + targetVolumeStatus = 0; + }; +#endif + } else { + /* We've got a real volume UUID! */ +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: UUID = %08lX%08lX.\n", targetVolumeUUID.v.high, targetVolumeUUID.v.low); +#endif + if ((result = OpenVolumeStatusDB(&vsdbhandle)) != 0) { + /* Can't even get access to the volume info db; assume permissions are OK. */ +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: OpenVolumeStatusDB returned %d; ignoring permissions.\n", result); +#endif + targetVolumeStatus = VOLUME_USEPERMISSIONS; + } else { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: Looking up volume status...\n"); +#endif + if ((result = GetVolumeStatusDBEntry(vsdbhandle, &targetVolumeUUID, &targetVolumeStatus)) != 0) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: GetVolumeStatusDBEntry returned %d.\n", result); +#endif +#if AUTO_ENTER_FIXED + if (gIsEjectable == 0) { + result = DoAdopt( deviceNamePtr ); +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: Auto-adopting %s; result = %d.\n", deviceNamePtr, result); +#endif + targetVolumeStatus = VOLUME_USEPERMISSIONS; + } else { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: DoMount: Not adopting ejectable %s.\n", deviceNamePtr); +#endif + targetVolumeStatus = 0; + }; +#else + targetVolumeStatus = 0; +#endif + }; + (void)CloseVolumeStatusDB(vsdbhandle); + vsdbhandle = NULL; + }; + }; + + pid = fork(); + if (pid == 0) { + isLockedstr = isLocked ? gReadOnlyOption : gReadWriteOption; + + permissionsOption = + (targetVolumeStatus & VOLUME_USEPERMISSIONS) ? gUsePermissionsOption : gIgnorePermissionsOption; + + /* get default encoding value (for hfs volumes) */ +#if READ_DEFAULT_ENCODING + encoding = __CFStringGetDefaultEncodingForHFSUtil(); +#else + encoding = CFStringGetSystemEncoding(); +#endif + sprintf(encodeopt, "-e=%d", (int)encoding); +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: %s %s -o -x -o %s -o %s -o -u=unknown,-g=unknown,-m=0777 -t %s %s %s ...\n", + gMountCommand, isLockedstr, encodeopt, permissionsOption, gHFS_FS_NAME, deviceNamePtr, mountPointPtr); +#endif + (void) execl(gMountCommand, gMountCommand, isLockedstr, + "-o", encodeopt, "-o", permissionsOption, + "-o", "-u=unknown,-g=unknown,-m=0777", + "-t", gHFS_FS_NAME, deviceNamePtr, mountPointPtr, NULL); + + /* IF WE ARE HERE, WE WERE UNSUCCESFULL */ + return (FSUR_IO_FAIL); + } + + if (pid == -1) + return (FSUR_IO_FAIL); + + /* Success! */ + if ((wait4(pid, (int *)&status, 0, NULL) == pid) && (WIFEXITED(status))) + result = status.w_retcode; + else + result = -1; + + return (result == 0) ? FSUR_IO_SUCCESS : FSUR_IO_FAIL; +} + + +/* ****************************************** DoUnmount ********************************************* +Purpose - + This routine will fire off a system command to unmount the given device. +Input - + theDeviceNamePtr - pointer to the device name (full path, like /dev/disk0s2). +Output - + returns FSUR_IO_SUCCESS everything is cool else FSUR_IO_FAIL. +*************************************************************************************************** */ +static int +DoUnmount(const char * theMountPointPtr) +{ + int pid; + union wait status; + int result; + + if (theMountPointPtr == NULL || *theMountPointPtr == '\0') return (FSUR_IO_FAIL); + + pid = fork(); + if (pid == 0) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: %s %s ...\n", gUnmountCommand, theMountPointPtr); +#endif + (void) execl(gUnmountCommand, gUnmountCommand, theMountPointPtr, NULL); + + /* IF WE ARE HERE, WE WERE UNSUCCESFULL */ + return (FSUR_IO_FAIL); + } + + if (pid == -1) + return (FSUR_IO_FAIL); + + /* Success! */ + if ((wait4(pid, (int *)&status, 0, NULL) == pid) && (WIFEXITED(status))) + result = status.w_retcode; + else + result = -1; + + return (result == 0 ? FSUR_IO_SUCCESS : FSUR_IO_FAIL); + +} /* DoUnmount */ + + +/* ******************************************* DoProbe ********************************************** +Purpose - + This routine will open the given raw device and check to make sure there is media that looks + like an HFS. +Input - + theDeviceNamePtr - pointer to the device name (full path, like /dev/disk0s2). +Output - + returns FSUR_MOUNT_HIDDEN (previously FSUR_RECOGNIZED) if we can handle the media else one of the FSUR_xyz error codes. +*************************************************************************************************** */ +static int +DoProbe(char *deviceNamePtr) +{ + int result = FSUR_UNRECOGNIZED; + int fd = 0; + char * bufPtr; + HFSMasterDirectoryBlock * mdbPtr; + HFSPlusVolumeHeader * volHdrPtr; + u_char volnameUTF8[NAME_MAX+1]; + + bufPtr = (char *)malloc(HFS_BLOCK_SIZE); + if ( ! bufPtr ) { + result = FSUR_UNRECOGNIZED; + goto Return; + } + + mdbPtr = (HFSMasterDirectoryBlock *) bufPtr; + volHdrPtr = (HFSPlusVolumeHeader *) bufPtr; + + fd = open( deviceNamePtr, O_RDONLY, 0 ); + if( fd <= 0 ) { + result = FSUR_IO_FAIL; + goto Return; + } + + /* + * Read the HFS Master Directory Block from sector 2 + */ + result = readAt(fd, bufPtr, (off_t)(2 * HFS_BLOCK_SIZE), HFS_BLOCK_SIZE); + if (FSUR_IO_FAIL == result) + goto Return; + + /* get classic HFS volume name (from MDB) */ + if (mdbPtr->drSigWord == kHFSSigWord && + mdbPtr->drEmbedSigWord != kHFSPlusSigWord) { + Boolean cfOK; + CFStringRef cfstr; + CFStringEncoding encoding; + + encoding = CFStringGetSystemEncoding(); + cfstr = CFStringCreateWithPascalString(kCFAllocatorDefault, + mdbPtr->drVN, encoding); + cfOK = CFStringGetCString(cfstr, volnameUTF8, NAME_MAX, + kCFStringEncodingUTF8); + CFRelease(cfstr); + + if (!cfOK && encoding != kCFStringEncodingMacRoman) { + + /* default to MacRoman on conversion errors */ + cfstr = CFStringCreateWithPascalString(kCFAllocatorDefault, + mdbPtr->drVN, kCFStringEncodingMacRoman); + CFStringGetCString(cfstr, volnameUTF8, NAME_MAX, + kCFStringEncodingUTF8); + CFRelease(cfstr); + } + + /* get HFS Plus volume name (from Catalog) */ + } else if ((volHdrPtr->signature == kHFSPlusSigWord) || + (mdbPtr->drSigWord == kHFSSigWord && + mdbPtr->drEmbedSigWord == kHFSPlusSigWord)) { + off_t startOffset; + + if (volHdrPtr->signature == kHFSPlusSigWord) { + startOffset = 0; + } else {/* embedded volume, first find offset */ + result = GetEmbeddedHFSPlusVol(mdbPtr, &startOffset); + if ( result != FSUR_IO_SUCCESS ) + goto Return; + } + + result = GetNameFromHFSPlusVolumeStartingAt(fd, startOffset, + volnameUTF8); + } else { + result = FSUR_UNRECOGNIZED; + } + + if (FSUR_IO_SUCCESS == result) { + CFStringRef slash; + CFStringRef colon; + CFMutableStringRef volumeName; + CFIndex volumeNameLength; + CFRange foundSubString; + + slash = CFStringCreateWithCString(kCFAllocatorDefault, "/", kCFStringEncodingUTF8); + if (slash == NULL) { + result = FSUR_IO_FAIL; + goto Return; + }; + + colon = CFStringCreateWithCString(kCFAllocatorDefault, ":", kCFStringEncodingUTF8); + if (colon == NULL) { + result = FSUR_IO_FAIL; + goto Return; + }; + + volumeName = CFStringCreateMutableCopy( + kCFAllocatorDefault, + 0, /* maxLength */ + CFStringCreateWithCString(kCFAllocatorDefault, volnameUTF8, kCFStringEncodingUTF8)); + if (volumeName == NULL) { + result = FSUR_IO_FAIL; + goto Return; + }; + volumeNameLength = CFStringGetLength(volumeName); + + while (CFStringFindWithOptions(volumeName, slash, CFRangeMake(0, volumeNameLength-1), 0, &foundSubString)) { + CFStringReplace(volumeName, foundSubString, colon); + }; + + CFStringGetCString(volumeName, volnameUTF8, NAME_MAX, kCFStringEncodingUTF8); + + DoFileSystemFile( FS_NAME_SUFFIX, gHFS_FS_NAME_NAME ); + DoFileSystemFile( FS_LABEL_SUFFIX, volnameUTF8 ); + result = FSUR_MOUNT_HIDDEN; + } + +Return: + + if ( bufPtr ) + free( bufPtr ); + + if (fd > 0) + close(fd); + + return result; + +} /* DoProbe */ + + + +/* **************************************** DoGetUUIDKey ******************************************* +Purpose - + This routine will open the given block device and return the volume UUID in text form. +Input - + theDeviceNamePtr - pointer to the device name (full path, like /dev/disk0s2). +Output - + returns FSUR_IO_SUCCESS or else one of the FSUR_xyz error codes. +*************************************************************************************************** */ +static int +DoGetUUIDKey( const char * theDeviceNamePtr ) { + int result; + VolumeUUID targetVolumeUUID; + VolumeUUIDString UUIDString; + char uuidLine[VOLUMEUUIDLENGTH+2]; + + if ((result = GetVolumeUUID(theDeviceNamePtr, &targetVolumeUUID, FALSE)) != FSUR_IO_SUCCESS) goto Err_Exit; + + ConvertVolumeUUIDToString( &targetVolumeUUID, UUIDString); + strncpy(uuidLine, UUIDString, VOLUMEUUIDLENGTH+1); + strcat(uuidLine, gNewlineString); + DoFileSystemFile( gFS_UUID_SUFFIX, uuidLine ); + result = FSUR_IO_SUCCESS; + +Err_Exit: + return result; +} + + + +/* *************************************** DoChangeUUIDKey ****************************************** +Purpose - + This routine will change the UUID on the specified block device. +Input - + theDeviceNamePtr - pointer to the device name (full path, like /dev/disk0s2). +Output - + returns FSUR_IO_SUCCESS or else one of the FSUR_xyz error codes. +*************************************************************************************************** */ +static int +DoChangeUUIDKey( const char * theDeviceNamePtr ) { + int result; + VolumeUUID newVolumeUUID; + + GenerateVolumeUUID(&newVolumeUUID); + result = SetVolumeUUID(theDeviceNamePtr, &newVolumeUUID); + + return result; +} + + + +/* **************************************** DoAdopt ******************************************* +Purpose - + This routine will add the UUID of the specified block device to the list of local volumes. +Input - + theDeviceNamePtr - pointer to the device name (full path, like /dev/disk0s2). +Output - + returns FSUR_IO_SUCCESS or else one of the FSUR_xyz error codes. +*************************************************************************************************** */ +static int +DoAdopt( const char * theDeviceNamePtr ) { + int result, closeresult; + VolumeUUID targetVolumeUUID; + VolumeStatusDBHandle vsdbhandle = NULL; + unsigned long targetVolumeStatus; + + if ((result = GetVolumeUUID(theDeviceNamePtr, &targetVolumeUUID, TRUE)) != FSUR_IO_SUCCESS) goto Err_Return; + + if ((result = OpenVolumeStatusDB(&vsdbhandle)) != 0) goto Err_Exit; + if ((result = GetVolumeStatusDBEntry(vsdbhandle, &targetVolumeUUID, &targetVolumeStatus)) != 0) { + targetVolumeStatus = 0; + }; + targetVolumeStatus = (targetVolumeStatus & VOLUME_VALIDSTATUSBITS) | VOLUME_USEPERMISSIONS; + if ((result = SetVolumeStatusDBEntry(vsdbhandle, &targetVolumeUUID, targetVolumeStatus)) != 0) goto Err_Exit; + + result = FSUR_IO_SUCCESS; + +Err_Exit: + if (vsdbhandle) { + closeresult = CloseVolumeStatusDB(vsdbhandle); + vsdbhandle = NULL; + if (result == FSUR_IO_SUCCESS) result = closeresult; + }; + + if ((result != 0) && (result != FSUR_IO_SUCCESS)) result = FSUR_IO_FAIL; + +Err_Return: +#if TRACE_HFS_UTIL + if (result != FSUR_IO_SUCCESS) fprintf(stderr, "DoAdopt: returning %d...\n", result); +#endif + return result; +} + + + +/* **************************************** DoDisown ******************************************* +Purpose - + This routine will change the status of the specified block device to ignore its permissions. +Input - + theDeviceNamePtr - pointer to the device name (full path, like /dev/disk0s2). +Output - + returns FSUR_IO_SUCCESS or else one of the FSUR_xyz error codes. +*************************************************************************************************** */ +static int +DoDisown( const char * theDeviceNamePtr ) { + int result, closeresult; + VolumeUUID targetVolumeUUID; + VolumeStatusDBHandle vsdbhandle = NULL; + unsigned long targetVolumeStatus; + + if ((result = GetVolumeUUID(theDeviceNamePtr, &targetVolumeUUID, TRUE)) != FSUR_IO_SUCCESS) goto Err_Return; + + if ((result = OpenVolumeStatusDB(&vsdbhandle)) != 0) goto Err_Exit; + if ((result = GetVolumeStatusDBEntry(vsdbhandle, &targetVolumeUUID, &targetVolumeStatus)) != 0) { + targetVolumeStatus = 0; + }; + targetVolumeStatus = (targetVolumeStatus & VOLUME_VALIDSTATUSBITS) & ~VOLUME_USEPERMISSIONS; + if ((result = SetVolumeStatusDBEntry(vsdbhandle, &targetVolumeUUID, targetVolumeStatus)) != 0) goto Err_Exit; + + result = FSUR_IO_SUCCESS; + +Err_Exit: + if (vsdbhandle) { + closeresult = CloseVolumeStatusDB(vsdbhandle); + vsdbhandle = NULL; + if (result == FSUR_IO_SUCCESS) result = closeresult; + }; + + if ((result != 0) && (result != FSUR_IO_SUCCESS)) { +#if TRACE_HFS_UTIL + if (result != 0) fprintf(stderr, "DoDisown: result = %d; changing to %d...\n", result, FSUR_IO_FAIL); +#endif + result = FSUR_IO_FAIL; + }; + +Err_Return: +#if TRACE_HFS_UTIL + if (result != FSUR_IO_SUCCESS) fprintf(stderr, "DoDisown: returning %d...\n", result); +#endif + return result; +} + + + +/* **************************************** ParseArgs ******************************************** +Purpose - + This routine will make sure the arguments passed in to us are cool. + Here is how this utility is used: + +usage: hfs.util actionArg deviceArg [mountPointArg] [flagsArg] +actionArg: + -p (Probe for mounting) + -P (Probe for initializing - not supported) + -m (Mount) + -r (Repair - not supported) + -u (Unmount) + -M (Force Mount) + -i (Initialize - not supported) + +deviceArg: + disk0s2 (for example) + +mountPointArg: + /foo/bar/ (required for Mount and Force Mount actions) + +flagsArg: + (these are ignored for CDROMs) + either "readonly" OR "writable" + either "removable" OR "fixed" + +examples: + hfs.util -p disk0s2 removable writable + hfs.util -p disk0s2 removable readonly + hfs.util -m disk0s2 /my/hfs + +Input - + argc - the number of arguments in argv. + argv - array of arguments. +Output - + returns FSUR_INVAL if we find a bad argument else 0. +*************************************************************************************************** */ +static int +ParseArgs(int argc, const char *argv[], const char ** actionPtr, + const char ** mountPointPtr, boolean_t * isEjectablePtr, + boolean_t * isLockedPtr) +{ + int result = FSUR_INVAL; + int deviceLength; + int index; + + /* Must have at least 3 arguments and the action argument must start with a '-' */ + if ( (argc < 3) || (argv[1][0] != '-') ) { + DoDisplayUsage( argv ); + goto Return; + } + + /* we only support actions Probe, Mount, Force Mount, and Unmount */ + + * actionPtr = & argv[1][1]; + + switch ( argv[1][1] ) { + case FSUC_PROBE: + /* action Probe and requires 5 arguments (need the flags) */ + if ( argc < 5 ) { + DoDisplayUsage( argv ); + goto Return; + } else { + index = 3; + } + break; + + case FSUC_UNMOUNT: + /* Note: the device argument in argv[2] is checked further down but ignored. */ + * mountPointPtr = argv[3]; + index = 0; /* No isEjectable/isLocked flags for unmount. */ + break; + + case FSUC_MOUNT: + case FSUC_MOUNT_FORCE: + /* action Mount and ForceMount require 6 arguments (need the mountpoint and the flags) */ + if ( argc < 6 ) { + DoDisplayUsage( argv ); + goto Return; + } else { + * mountPointPtr = argv[3]; + index = 4; + } + break; + + case FSUC_GETKEY: + index = 0; + break; + + case FSUC_NEWUUID: + index = 0; + break; + + case FSUC_ADOPT: + index = 0; + break; + + case FSUC_DISOWN: + index = 0; + break; + + default: + DoDisplayUsage( argv ); + goto Return; + break; + } + + /* Make sure device (argv[2]) is something reasonable */ + deviceLength = strlen( argv[2] ); + if ( deviceLength < 3 || deviceLength > 10 ) { + DoDisplayUsage( argv ); + goto Return; + } + + if ( index ) { + /* Flags: removable/fixed. */ + if ( 0 == strcmp(argv[index],"removable") ) { + * isEjectablePtr = 1; + } else if ( 0 == strcmp(argv[index],"fixed") ) { + * isEjectablePtr = 0; + } else { + printf("hfs.util: ERROR: unrecognized flag (removable/fixed) argv[%d]='%s'\n",index,argv[index]); + } + + /* Flags: readonly/writable. */ + if ( 0 == strcmp(argv[index+1],"readonly") ) { + * isLockedPtr = 1; + } else if ( 0 == strcmp(argv[index+1],"writable") ) { + * isLockedPtr = 0; + } else { + printf("hfs.util: ERROR: unrecognized flag (readonly/writable) argv[%d]='%s'\n",index,argv[index+1]); + } + } + + result = 0; + +Return: + return result; + +} /* ParseArgs */ + + +/* *************************************** DoDisplayUsage ******************************************** +Purpose - + This routine will do a printf of the correct usage for this utility. +Input - + argv - array of arguments. +Output - + NA. +*************************************************************************************************** */ +static void +DoDisplayUsage(const char *argv[]) +{ + printf("usage: %s action_arg device_arg [mount_point_arg] [Flags] \n", argv[0]); + printf("action_arg:\n"); + printf(" -%c (Probe for mounting)\n", FSUC_PROBE); + printf(" -%c (Mount)\n", FSUC_MOUNT); + printf(" -%c (Unmount)\n", FSUC_UNMOUNT); + printf(" -%c (Force Mount)\n", FSUC_MOUNT_FORCE); + printf(" -%c (Get UUID Key)\n", FSUC_GETKEY); + printf(" -%c (New UUID Key)\n", FSUC_NEWUUID); + printf(" -%c (Adopt permissions)\n", FSUC_ADOPT); + printf("device_arg:\n"); + printf(" device we are acting upon (for example, 'disk0s2')\n"); + printf("mount_point_arg:\n"); + printf(" required for Mount and Force Mount \n"); + printf("Flags:\n"); + printf(" required for Mount, Force Mount and Probe\n"); + printf(" indicates removable or fixed (for example 'fixed')\n"); + printf(" indicates readonly or writable (for example 'readonly')\n"); + printf("Examples:\n"); + printf(" %s -p disk0s2 fixed writable\n", argv[0]); + printf(" %s -m disk0s2 /my/hfs removable readonly\n", argv[0]); + + return; + +} /* DoDisplayUsage */ + + +/* ************************************** DoFileSystemFile ******************************************* +Purpose - + This routine will create a file system info file that is used by WorkSpace. After creating the + file it will write whatever theContentsPtr points to the new file. + We end up with a file something like: + /System/Library/Filesystems/hfs.fs/hfs.name + when our file system name is "hfs" and theFileNameSuffixPtr points to ".name" +Input - + theFileNameSuffixPtr - pointer to a suffix we add to the file name we're creating. + theContentsPtr - pointer to C string to write into the file. +Output - + NA. +*************************************************************************************************** */ +static void +DoFileSystemFile(char *fileNameSuffixPtr, char *contentsPtr) +{ + int fd; + char fileName[MAXPATHLEN]; + + sprintf(fileName, "%s/%s%s/%s", FS_DIR_LOCATION, gHFS_FS_NAME, + FS_DIR_SUFFIX, gHFS_FS_NAME ); + strcat(fileName, fileNameSuffixPtr ); + unlink(fileName); /* delete existing string */ + + if ( strlen( fileNameSuffixPtr ) ) { + int oldMask = umask(0); + + fd = open( & fileName[0], O_CREAT | O_TRUNC | O_WRONLY, 0644 ); + umask( oldMask ); + if ( fd > 0 ) { + write( fd, contentsPtr, strlen( contentsPtr ) ); + close( fd ); + } else { + perror( fileName ); + } + } + + return; + +} /* DoFileSystemFile */ + + + + +/* + -- GetVolumeUUID + -- + -- Returns: FSUR_IO_SUCCESS, FSUR_IO_FAIL + */ + +static int +GetVolumeUUID(const char *deviceNamePtr, VolumeUUID *volumeUUIDPtr, boolean_t generate) { + int fd = 0; + char * bufPtr; + HFSMasterDirectoryBlock * mdbPtr; + HFSPlusVolumeHeader * volHdrPtr; + VolumeUUID *finderInfoUUIDPtr; + int result; + + bufPtr = (char *)malloc(HFS_BLOCK_SIZE); + if ( ! bufPtr ) { + result = FSUR_UNRECOGNIZED; + goto Err_Exit; + } + + mdbPtr = (HFSMasterDirectoryBlock *) bufPtr; + volHdrPtr = (HFSPlusVolumeHeader *) bufPtr; + + fd = open( deviceNamePtr, O_RDWR, 0 ); + if( fd <= 0 ) { + fd = open( deviceNamePtr, O_RDONLY, 0); + if (fd <= 0) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: GetVolumeUUID: device open failed (errno = %d).\n", errno); +#endif + result = FSUR_IO_FAIL; + goto Err_Exit; + }; + }; + + /* + * Read the HFS Master Directory Block from sector 2 + */ + result = readAt(fd, volHdrPtr, (off_t)(2 * HFS_BLOCK_SIZE), HFS_BLOCK_SIZE); + if (result != FSUR_IO_SUCCESS) { + goto Err_Exit; + }; + + if (mdbPtr->drSigWord == kHFSSigWord && + mdbPtr->drEmbedSigWord != kHFSPlusSigWord) { + finderInfoUUIDPtr = (VolumeUUID *)(&mdbPtr->drFndrInfo[6]); + if (generate && ((finderInfoUUIDPtr->v.high == 0) || (finderInfoUUIDPtr->v.low == 0))) { + GenerateVolumeUUID(volumeUUIDPtr); + bcopy(volumeUUIDPtr, finderInfoUUIDPtr, sizeof(*finderInfoUUIDPtr)); + result = writeAt(fd, volHdrPtr, (off_t)(2 * HFS_BLOCK_SIZE), HFS_BLOCK_SIZE); + if (result != FSUR_IO_SUCCESS) goto Err_Exit; + }; + bcopy(finderInfoUUIDPtr, volumeUUIDPtr, sizeof(*volumeUUIDPtr)); + result = FSUR_IO_SUCCESS; + } else if ((volHdrPtr->signature == kHFSPlusSigWord) || + ((mdbPtr->drSigWord == kHFSSigWord) && + (mdbPtr->drEmbedSigWord == kHFSPlusSigWord))) { + off_t startOffset; + + if (volHdrPtr->signature == kHFSPlusSigWord) { + startOffset = 0; + } else {/* embedded volume, first find offset */ + result = GetEmbeddedHFSPlusVol(mdbPtr, &startOffset); + if ( result != FSUR_IO_SUCCESS ) { + goto Err_Exit; + }; + } + + result = readAt( fd, volHdrPtr, startOffset + (off_t)(2*HFS_BLOCK_SIZE), HFS_BLOCK_SIZE ); + if (result != FSUR_IO_SUCCESS) { + goto Err_Exit; // return FSUR_IO_FAIL + } + + /* Verify that it is an HFS+ volume. */ + + if (volHdrPtr->signature != kHFSPlusSigWord) { + result = FSUR_IO_FAIL; + goto Err_Exit; + } + + finderInfoUUIDPtr = (VolumeUUID *)&volHdrPtr->finderInfo[24]; + if (generate && ((finderInfoUUIDPtr->v.high == 0) || (finderInfoUUIDPtr->v.low == 0))) { + GenerateVolumeUUID(volumeUUIDPtr); + bcopy(volumeUUIDPtr, finderInfoUUIDPtr, sizeof(*finderInfoUUIDPtr)); + result = writeAt( fd, volHdrPtr, startOffset + (off_t)(2*HFS_BLOCK_SIZE), HFS_BLOCK_SIZE ); + if (result != FSUR_IO_SUCCESS) { + goto Err_Exit; + }; + }; + bcopy(finderInfoUUIDPtr, volumeUUIDPtr, sizeof(*volumeUUIDPtr)); + result = FSUR_IO_SUCCESS; + } else { + result = FSUR_UNRECOGNIZED; + }; + +Err_Exit: + if (fd > 0) close(fd); + if (bufPtr) free(bufPtr); + +#if TRACE_HFS_UTIL + if (result != FSUR_IO_SUCCESS) fprintf(stderr, "hfs.util: GetVolumeUUID: result = %d...\n", result); +#endif + return (result == FSUR_IO_SUCCESS) ? FSUR_IO_SUCCESS : FSUR_IO_FAIL; +}; + + + +/* + -- SetVolumeUUID + -- + -- Returns: FSUR_IO_SUCCESS, FSUR_IO_FAIL + */ + +static int +SetVolumeUUID(const char *deviceNamePtr, VolumeUUID *volumeUUIDPtr) { + int fd = 0; + char * bufPtr; + HFSMasterDirectoryBlock * mdbPtr; + HFSPlusVolumeHeader * volHdrPtr; + VolumeUUID *finderInfoUUIDPtr; + int result; + + bufPtr = (char *)malloc(HFS_BLOCK_SIZE); + if ( ! bufPtr ) { + result = FSUR_UNRECOGNIZED; + goto Err_Exit; + } + + mdbPtr = (HFSMasterDirectoryBlock *) bufPtr; + volHdrPtr = (HFSPlusVolumeHeader *) bufPtr; + + fd = open( deviceNamePtr, O_RDWR, 0 ); + if( fd <= 0 ) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: SetVolumeUUID: device open failed (errno = %d).\n", errno); +#endif + result = FSUR_IO_FAIL; + goto Err_Exit; + }; + + /* + * Read the HFS Master Directory Block from sector 2 + */ + result = readAt(fd, volHdrPtr, (off_t)(2 * HFS_BLOCK_SIZE), HFS_BLOCK_SIZE); + if (result != FSUR_IO_SUCCESS) { + goto Err_Exit; + }; + + if (mdbPtr->drSigWord == kHFSSigWord && + mdbPtr->drEmbedSigWord != kHFSPlusSigWord) { + finderInfoUUIDPtr = (VolumeUUID *)(&mdbPtr->drFndrInfo[6]); + bcopy(volumeUUIDPtr, finderInfoUUIDPtr, sizeof(*finderInfoUUIDPtr)); + result = writeAt(fd, volHdrPtr, (off_t)(2 * HFS_BLOCK_SIZE), HFS_BLOCK_SIZE); + } else if ((volHdrPtr->signature == kHFSPlusSigWord) || + ((mdbPtr->drSigWord == kHFSSigWord) && + (mdbPtr->drEmbedSigWord == kHFSPlusSigWord))) { + off_t startOffset; + + if (volHdrPtr->signature == kHFSPlusSigWord) { + startOffset = 0; + } else {/* embedded volume, first find offset */ + result = GetEmbeddedHFSPlusVol(mdbPtr, &startOffset); + if ( result != FSUR_IO_SUCCESS ) { + goto Err_Exit; + }; + } + + result = readAt( fd, volHdrPtr, startOffset + (off_t)(2*HFS_BLOCK_SIZE), HFS_BLOCK_SIZE ); + if (result != FSUR_IO_SUCCESS) { + goto Err_Exit; // return FSUR_IO_FAIL + } + + /* Verify that it is an HFS+ volume. */ + + if (volHdrPtr->signature != kHFSPlusSigWord) { + result = FSUR_IO_FAIL; + goto Err_Exit; + } + + finderInfoUUIDPtr = (VolumeUUID *)&volHdrPtr->finderInfo[24]; + bcopy(volumeUUIDPtr, finderInfoUUIDPtr, sizeof(*finderInfoUUIDPtr)); + result = writeAt( fd, volHdrPtr, startOffset + (off_t)(2*HFS_BLOCK_SIZE), HFS_BLOCK_SIZE ); + if (result != FSUR_IO_SUCCESS) { + goto Err_Exit; + }; + result = FSUR_IO_SUCCESS; + } else { + result = FSUR_UNRECOGNIZED; + }; + +Err_Exit: + if (fd > 0) close(fd); + if (bufPtr) free(bufPtr); + +#if TRACE_HFS_UTIL + if (result != FSUR_IO_SUCCESS) fprintf(stderr, "hfs.util: SetVolumeUUID: result = %d...\n", result); +#endif + return (result == FSUR_IO_SUCCESS) ? FSUR_IO_SUCCESS : FSUR_IO_FAIL; +}; + + + +/* + -- GetEmbeddedHFSPlusVol + -- + -- In: hfsMasterDirectoryBlockPtr + -- Out: startOffsetPtr - the disk offset at which the HFS+ volume starts + (that is, 2 blocks before the volume header) + -- + */ + +static int +GetEmbeddedHFSPlusVol (HFSMasterDirectoryBlock * hfsMasterDirectoryBlockPtr, off_t * startOffsetPtr) +{ + int result = FSUR_IO_SUCCESS; + u_int32_t allocationBlockSize, firstAllocationBlock, startBlock, blockCount; + + if (hfsMasterDirectoryBlockPtr->drSigWord != kHFSSigWord) { + result = FSUR_UNRECOGNIZED; + goto Return; + } + + allocationBlockSize = hfsMasterDirectoryBlockPtr->drAlBlkSiz; + firstAllocationBlock = hfsMasterDirectoryBlockPtr->drAlBlSt; + + if (hfsMasterDirectoryBlockPtr->drEmbedSigWord != kHFSPlusSigWord) { + result = FSUR_UNRECOGNIZED; + goto Return; + } + + startBlock = hfsMasterDirectoryBlockPtr->drEmbedExtent.startBlock; + blockCount = hfsMasterDirectoryBlockPtr->drEmbedExtent.blockCount; + + if ( startOffsetPtr ) + *startOffsetPtr = ((u_int64_t)startBlock * (u_int64_t)allocationBlockSize) + + ((u_int64_t)firstAllocationBlock * (u_int64_t)HFS_BLOCK_SIZE); + +Return: + return result; + +} + + + +/* + -- GetNameFromHFSPlusVolumeStartingAt + -- + -- Caller's responsibility to allocate and release memory for the converted string. + -- + -- Returns: FSUR_IO_SUCCESS, FSUR_IO_FAIL + */ + +static int +GetNameFromHFSPlusVolumeStartingAt(int fd, off_t hfsPlusVolumeOffset, char * name_o) +{ + int result = FSUR_IO_SUCCESS; + u_int32_t blockSize; + char * bufPtr = NULL; + HFSPlusVolumeHeader * volHdrPtr; + off_t offset; + BTNodeDescriptor * bTreeNodeDescriptorPtr; + u_int32_t catalogNodeSize; + u_int32_t leafNode; + u_int32_t catalogExtCount; + HFSPlusExtentDescriptor *catalogExtents = NULL; + + volHdrPtr = (HFSPlusVolumeHeader *)malloc(HFS_BLOCK_SIZE); + if ( ! volHdrPtr ) { + result = FSUR_IO_FAIL; + goto Return; + } + + /* + * Read the Volume Header + * (This is a little redundant for a pure, unwrapped HFS+ volume) + */ + result = readAt( fd, volHdrPtr, hfsPlusVolumeOffset + (off_t)(2*HFS_BLOCK_SIZE), HFS_BLOCK_SIZE ); + if (result == FSUR_IO_FAIL) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: GetNameFromHFSPlusVolumeStartingAt: readAt failed\n"); +#endif + goto Return; // return FSUR_IO_FAIL + } + + /* Verify that it is an HFS+ volume. */ + + if (volHdrPtr->signature != kHFSPlusSigWord) { + result = FSUR_IO_FAIL; +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: GetNameFromHFSPlusVolumeStartingAt: volHdrPtr->signature != kHFSPlusSigWord\n"); +#endif + goto Return; + } + + blockSize = volHdrPtr->blockSize; + catalogExtents = (HFSPlusExtentDescriptor *) malloc(sizeof(HFSPlusExtentRecord)); + if ( ! catalogExtents ) { + result = FSUR_IO_FAIL; + goto Return; + } + bcopy(volHdrPtr->catalogFile.extents, catalogExtents, sizeof(HFSPlusExtentRecord)); + catalogExtCount = kHFSPlusExtentDensity; + + /* if there are overflow catalog extents, then go get them */ + if (catalogExtents[7].blockCount != 0) { + result = GetCatalogOverflowExtents(fd, hfsPlusVolumeOffset, volHdrPtr, &catalogExtents, &catalogExtCount); + if (result != FSUR_IO_SUCCESS) + goto Return; + } + + offset = (off_t)catalogExtents[0].startBlock * (off_t)blockSize; + + /* Read the header node of the catalog B-Tree */ + + result = GetBTreeNodeInfo(fd, hfsPlusVolumeOffset + offset, &catalogNodeSize, &leafNode); + if (result != FSUR_IO_SUCCESS) + goto Return; + + /* Calculate the starting block of the first leaf node */ + + offset = CalcLeafNodeOffset((leafNode * catalogNodeSize), blockSize, catalogExtCount, catalogExtents); + + if ( offset == 0 ) { + result = FSUR_IO_FAIL; +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: can't find leaf block\n"); +#endif + goto Return; + } + + /* Read the first leaf node of the catalog b-tree */ + + bufPtr = (char *)malloc(catalogNodeSize); + if ( ! bufPtr ) { + result = FSUR_IO_FAIL; + goto Return; + } + + bTreeNodeDescriptorPtr = (BTNodeDescriptor *)bufPtr; + + result = readAt( fd, bufPtr, hfsPlusVolumeOffset + offset, catalogNodeSize ); + if (result == FSUR_IO_FAIL) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: readAt (first leaf) failed\n"); +#endif + goto Return; // return FSUR_IO_FAIL + } + + { + u_int16_t * v; + char * p; + HFSPlusCatalogKey * k; + CFStringRef cfstr; + + if ( bTreeNodeDescriptorPtr->numRecords < 1) { + result = FSUR_IO_FAIL; +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: bTreeNodeDescriptorPtr->numRecords < 1\n"); +#endif + goto Return; + } + + // Get the offset (in bytes) of the first record from the list of offsets at the end of the node. + + p = bufPtr + catalogNodeSize - sizeof(u_int16_t); // pointer arithmetic in bytes + v = (u_int16_t *)p; + + // Get a pointer to the first record. + + p = bufPtr + *v; // pointer arithmetic in bytes + k = (HFSPlusCatalogKey *)p; + + // There should be only one record whose parent is the root parent. It should be the first record. + + if (k->parentID != kHFSRootParentID) { + result = FSUR_IO_FAIL; +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: k->parentID != kHFSRootParentID\n"); +#endif + goto Return; + } + + /* Extract the name of the root directory */ + + cfstr = CFStringCreateWithCharacters(kCFAllocatorDefault, k->nodeName.unicode, k->nodeName.length); + (void) CFStringGetCString(cfstr, name_o, NAME_MAX, kCFStringEncodingUTF8); + CFRelease(cfstr); + } + + result = FSUR_IO_SUCCESS; + +Return: + if (volHdrPtr) + free((char*) volHdrPtr); + + if (catalogExtents) + free((char*) catalogExtents); + + if (bufPtr) + free((char*)bufPtr); + + return result; + +} /* GetNameFromHFSPlusVolumeStartingAt */ + + +#pragma options align=mac68k +typedef struct { + BTNodeDescriptor node; + BTHeaderRec header; +} HeaderRec, *HeaderPtr; +#pragma options align=reset + +/* + -- + -- + -- Returns: FSUR_IO_SUCCESS, FSUR_IO_FAIL + -- + */ +static int +GetBTreeNodeInfo(int fd, off_t btreeOffset, u_int32_t *nodeSize, u_int32_t *firstLeafNode) +{ + int result; + HeaderRec * bTreeHeaderPtr = NULL; + + bTreeHeaderPtr = (HeaderRec *) malloc(HFS_BLOCK_SIZE); + if (bTreeHeaderPtr == NULL) + return (FSUR_IO_FAIL); + + /* Read the b-tree header node */ + + result = readAt( fd, bTreeHeaderPtr, btreeOffset, HFS_BLOCK_SIZE ); + if ( result == FSUR_IO_FAIL ) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: readAt (header node) failed\n"); +#endif + goto free; + } + + if ( bTreeHeaderPtr->node.kind != kBTHeaderNode ) { + result = FSUR_IO_FAIL; +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: bTreeHeaderPtr->node.kind != kBTHeaderNode\n"); +#endif + goto free; + } + + *nodeSize = bTreeHeaderPtr->header.nodeSize; + + if (bTreeHeaderPtr->header.leafRecords == 0) + *firstLeafNode = 0; + else + *firstLeafNode = bTreeHeaderPtr->header.firstLeafNode; + +free:; + free((char*) bTreeHeaderPtr); + + return result; + +} /* GetBTreeNodeInfo */ + + +/* + -- + -- + -- Returns: byte offset to first leaf node + -- + */ +static off_t +CalcLeafNodeOffset(off_t fileOffset, u_int32_t blockSize, u_int32_t extentCount, + HFSPlusExtentDescriptor *extentList) +{ + off_t offset = 0; + int i; + u_long extblks; + u_long leafblk; + + /* Find this block in the list of extents */ + + leafblk = fileOffset / blockSize; + extblks = 0; + + for (i = 0; i < extentCount; ++i) { + if (extentList[i].startBlock == 0 || extentList[i].blockCount == 0) + break; /* done when we reach empty extents */ + + extblks += extentList [i].blockCount; + + if (extblks > leafblk) { + offset = (off_t) extentList[i].startBlock * (off_t) blockSize; + offset += fileOffset - (off_t) ((extblks - extentList[i].blockCount) * blockSize); + break; + } + } + + return offset; + +} /* CalcLeafNodeOffset */ + + +/* + -- + -- + -- Returns: FSUR_IO_SUCCESS, FSUR_IO_FAIL + -- + */ +static int +GetCatalogOverflowExtents(int fd, off_t hfsPlusVolumeOffset, + HFSPlusVolumeHeader *volHdrPtr, + HFSPlusExtentDescriptor **catalogExtents, + u_int32_t *catalogExtCount) +{ + off_t offset; + u_int32_t nodeSize; + u_int32_t leafNode; + BTNodeDescriptor * bTreeNodeDescriptorPtr; + HFSPlusExtentDescriptor * extents; + size_t listsize; + char * bufPtr = NULL; + int i; + int result; + + listsize = *catalogExtCount * sizeof(HFSPlusExtentDescriptor); + extents = *catalogExtents; + offset = (off_t)volHdrPtr->extentsFile.extents[0].startBlock * + (off_t)volHdrPtr->blockSize; + + /* Read the header node of the extents B-Tree */ + + result = GetBTreeNodeInfo(fd, hfsPlusVolumeOffset + offset, + &nodeSize, &leafNode); + if (result != FSUR_IO_SUCCESS || leafNode == 0) + goto Return; + + /* Calculate the starting block of the first leaf node */ + + offset = CalcLeafNodeOffset((leafNode * nodeSize), volHdrPtr->blockSize, + kHFSPlusExtentDensity, &volHdrPtr->extentsFile.extents[0]); + + if (offset == 0) { + result = FSUR_IO_FAIL; +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: can't find extents b-tree leaf block\n"); +#endif + goto Return; + } + + /* Read the first leaf node of the extents b-tree */ + + bufPtr = (char *)malloc(nodeSize); + if (! bufPtr) { + result = FSUR_IO_FAIL; + goto Return; + } + + bTreeNodeDescriptorPtr = (BTNodeDescriptor *)bufPtr; + +again: + result = readAt(fd, bufPtr, hfsPlusVolumeOffset + offset, nodeSize); + if ( result == FSUR_IO_FAIL ) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: readAt (first leaf) failed\n"); +#endif + goto Return; + } + + if (bTreeNodeDescriptorPtr->kind != kBTLeafNode) { + result = FSUR_IO_FAIL; + goto Return; + } + + for (i = 1; i <= bTreeNodeDescriptorPtr->numRecords; ++i) { + u_int16_t * v; + char * p; + HFSPlusExtentKey * k; + + /* + * Get the offset (in bytes) of the record from the + * list of offsets at the end of the node + */ + p = bufPtr + nodeSize - (sizeof(u_int16_t) * i); + v = (u_int16_t *)p; + + /* Get a pointer to the record */ + + p = bufPtr + *v; /* pointer arithmetic in bytes */ + k = (HFSPlusExtentKey *)p; + + if (k->fileID != kHFSCatalogFileID) + goto Return; + + /* grow list and copy additional extents */ + listsize += sizeof(HFSPlusExtentRecord); + extents = (HFSPlusExtentDescriptor *) realloc(extents, listsize); + bcopy(p + k->keyLength + sizeof(u_int16_t), + &extents[*catalogExtCount], sizeof(HFSPlusExtentRecord)); + + *catalogExtCount += kHFSPlusExtentDensity; + *catalogExtents = extents; + } + + if ((leafNode = bTreeNodeDescriptorPtr->fLink) != 0) { + + offset = CalcLeafNodeOffset((leafNode * nodeSize), + volHdrPtr->blockSize, kHFSPlusExtentDensity, + &volHdrPtr->extentsFile.extents[0]); + + if (offset == 0) { + result = FSUR_IO_FAIL; +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: ERROR: can't find extents b-tree leaf block\n"); +#endif + goto Return; + } + goto again; + } + +Return:; + if (bufPtr) + free(bufPtr); + + return (result); +} + + +/* + -- readAt = lseek() + read() + -- + -- Returns: FSUR_IO_SUCCESS, FSUR_IO_FAIL + -- + */ + +static ssize_t +readAt( int fd, void * bufPtr, off_t offset, ssize_t length ) +{ + int blocksize; + off_t lseekResult; + ssize_t readResult; + void * rawData = NULL; + off_t rawOffset; + ssize_t rawLength; + int result = FSUR_IO_SUCCESS; + + if (ioctl(fd, DKIOCBLKSIZE, &blocksize) < 0) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: readAt: couldn't determine block size of device.\n"); +#endif + result = FSUR_IO_FAIL; + goto Return; + } + /* put offset and length in terms of device blocksize */ + rawOffset = offset / blocksize * blocksize; + rawLength = ((length + blocksize - 1) / blocksize) * blocksize; + rawData = malloc(rawLength); + if (rawData == NULL) { + result = FSUR_IO_FAIL; + goto Return; + } + + lseekResult = lseek( fd, rawOffset, SEEK_SET ); + if ( lseekResult != rawOffset ) { + result = FSUR_IO_FAIL; + goto Return; + } + + readResult = read(fd, rawData, rawLength); + if ( readResult != rawLength ) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: readAt: attempt to read data from device failed (errno = %d)?\n", errno); +#endif + result = FSUR_IO_FAIL; + goto Return; + } + bcopy(rawData + (offset - rawOffset), bufPtr, length); + +Return: + if (rawData) { + free(rawData); + } + return result; + +} /* readAt */ + +/* + -- writeAt = lseek() + write() + -- + -- Returns: FSUR_IO_SUCCESS, FSUR_IO_FAIL + -- + */ + +static ssize_t +writeAt( int fd, void * bufPtr, off_t offset, ssize_t length ) +{ + int blocksize; + off_t deviceoffset; + ssize_t bytestransferred; + void * rawData = NULL; + off_t rawOffset; + ssize_t rawLength; + int result = FSUR_IO_SUCCESS; + + if (ioctl(fd, DKIOCBLKSIZE, &blocksize) < 0) { +#if TRACE_HFS_UTIL + fprintf(stderr, "hfs.util: couldn't determine block size of device.\n"); +#endif + result = FSUR_IO_FAIL; + goto Return; + } + /* put offset and length in terms of device blocksize */ + rawOffset = offset / blocksize * blocksize; + rawLength = ((length + blocksize - 1) / blocksize) * blocksize; + rawData = malloc(rawLength); + if (rawData == NULL) { + result = FSUR_IO_FAIL; + goto Return; + } + + deviceoffset = lseek( fd, rawOffset, SEEK_SET ); + if ( deviceoffset != rawOffset ) { + result = FSUR_IO_FAIL; + goto Return; + } + + /* If the write isn't block-aligned, read the existing data before writing the new data: */ + if (((rawOffset % blocksize) != 0) || ((rawLength % blocksize) != 0)) { + bytestransferred = read(fd, rawData, rawLength); + if ( bytestransferred != rawLength ) { +#if TRACE_HFS_UTIL + fprintf(stderr, "writeAt: attempt to pre-read data from device failed (errno = %d)\n", errno); +#endif + result = FSUR_IO_FAIL; + goto Return; + } + }; + + bcopy(bufPtr, rawData + (offset - rawOffset), length); /* Copy in the new data */ + + deviceoffset = lseek( fd, rawOffset, SEEK_SET ); + if ( deviceoffset != rawOffset ) { + result = FSUR_IO_FAIL; + goto Return; + } + + bytestransferred = write(fd, rawData, rawLength); + if ( bytestransferred != rawLength ) { +#if TRACE_HFS_UTIL + fprintf(stderr, "writeAt: attempt to write data to device failed?!"); +#endif + result = FSUR_IO_FAIL; + goto Return; + } + +Return: + if (rawData) free(rawData); + + return result; + +} /* writeAt */ + + +/****************************************************************************** + * + * V O L U M E S T A T U S D A T A B A S E R O U T I N E S + * + *****************************************************************************/ + +#define DBHANDLESIGNATURE 0x75917737 + +/* Flag values for operation options: */ +#define DBMARKPOSITION 1 + +static char gVSDBPath[] = "/var/db/volinfo.database"; + +#define MAXIOMALLOC 16384 + +/* Database layout: */ + +struct VSDBKey { + char uuid[16]; +}; + +struct VSDBRecord { + char statusFlags[8]; +}; + +struct VSDBEntry { + struct VSDBKey key; + char keySeparator; + char space; + struct VSDBRecord record; + char terminator; +}; + +#define DBKEYSEPARATOR ':' +#define DBBLANKSPACE ' ' +#define DBRECORDTERMINATOR '\n' + +/* In-memory data structures: */ + +struct VSDBState { + unsigned long signature; + int dbfile; + int dbmode; + off_t recordPosition; +}; + +typedef struct VSDBState *VSDBStatePtr; + +typedef struct { + unsigned long state[5]; + unsigned long count[2]; + unsigned char buffer[64]; +} SHA1_CTX; + + + +/* Internal function prototypes: */ +static int LockDB(VSDBStatePtr dbstateptr, int lockmode); +static int UnlockDB(VSDBStatePtr dbstateptr); + +static int FindVolumeRecordByUUID(VSDBStatePtr dbstateptr, VolumeUUID *volumeID, struct VSDBEntry *dbentry, unsigned long options); +static int AddVolumeRecord(VSDBStatePtr dbstateptr, struct VSDBEntry *dbentry); +static int UpdateVolumeRecord(VSDBStatePtr dbstateptr, struct VSDBEntry *dbentry); +static int GetVSDBEntry(VSDBStatePtr dbstateptr, struct VSDBEntry *dbentry); +static int CompareVSDBKeys(struct VSDBKey *key1, struct VSDBKey *key2); + +static void FormatULong(unsigned long u, char *s); +static void FormatUUID(VolumeUUID *volumeID, char *UUIDField); +static void FormatDBKey(VolumeUUID *volumeID, struct VSDBKey *dbkey); +static void FormatDBRecord(unsigned long volumeStatusFlags, struct VSDBRecord *dbrecord); +static void FormatDBEntry(VolumeUUID *volumeID, unsigned long volumeStatusFlags, struct VSDBEntry *dbentry); +static unsigned long ConvertHexStringToULong(const char *hs, long maxdigits); + +static void SHA1Transform(unsigned long state[5], unsigned char buffer[64]); +static void SHA1Init(SHA1_CTX* context); +static void SHA1Update(SHA1_CTX* context, void* data, size_t len); +static void SHA1Final(unsigned char digest[20], SHA1_CTX* context); + + + +/****************************************************************************** + * + * P U B L I S H E D I N T E R F A C E R O U T I N E S + * + *****************************************************************************/ + +void GenerateVolumeUUID(VolumeUUID *newVolumeID) { + SHA1_CTX context; + char randomInputBuffer[26]; + unsigned char digest[20]; + time_t now; + clock_t uptime; + int mib[2]; + int sysdata; + char sysctlstring[128]; + size_t datalen; + struct loadavg sysloadavg; + struct vmtotal sysvmtotal; + + do { + /* Initialize the SHA-1 context for processing: */ + SHA1Init(&context); + + /* Now process successive bits of "random" input to seed the process: */ + + /* The current system's uptime: */ + uptime = clock(); + SHA1Update(&context, &uptime, sizeof(uptime)); + + /* The kernel's boot time: */ + mib[0] = CTL_KERN; + mib[1] = KERN_BOOTTIME; + datalen = sizeof(sysdata); + sysctl(mib, 2, &sysdata, &datalen, NULL, 0); + SHA1Update(&context, &sysdata, datalen); + + /* The system's host id: */ + mib[0] = CTL_KERN; + mib[1] = KERN_HOSTID; + datalen = sizeof(sysdata); + sysctl(mib, 2, &sysdata, &datalen, NULL, 0); + SHA1Update(&context, &sysdata, datalen); + + /* The system's host name: */ + mib[0] = CTL_KERN; + mib[1] = KERN_HOSTNAME; + datalen = sizeof(sysctlstring); + sysctl(mib, 2, sysctlstring, &datalen, NULL, 0); + SHA1Update(&context, sysctlstring, datalen); + + /* The running kernel's OS release string: */ + mib[0] = CTL_KERN; + mib[1] = KERN_OSRELEASE; + datalen = sizeof(sysctlstring); + sysctl(mib, 2, sysctlstring, &datalen, NULL, 0); + SHA1Update(&context, sysctlstring, datalen); + + /* The running kernel's version string: */ + mib[0] = CTL_KERN; + mib[1] = KERN_VERSION; + datalen = sizeof(sysctlstring); + sysctl(mib, 2, sysctlstring, &datalen, NULL, 0); + SHA1Update(&context, sysctlstring, datalen); + + /* The system's load average: */ + mib[0] = CTL_VM; + mib[1] = VM_LOADAVG; + datalen = sizeof(sysloadavg); + sysctl(mib, 2, &sysloadavg, &datalen, NULL, 0); + SHA1Update(&context, &sysloadavg, datalen); + + /* The system's VM statistics: */ + mib[0] = CTL_VM; + mib[1] = VM_METER; + datalen = sizeof(sysvmtotal); + sysctl(mib, 2, &sysvmtotal, &datalen, NULL, 0); + SHA1Update(&context, &sysvmtotal, datalen); + + /* The current GMT (26 ASCII characters): */ + time(&now); + strncpy(randomInputBuffer, asctime(gmtime(&now)), 26); /* "Mon Mar 27 13:46:26 2000" */ + SHA1Update(&context, randomInputBuffer, 26); + + /* Pad the accumulated input and extract the final digest hash: */ + SHA1Final(digest, &context); + + memcpy(newVolumeID, digest, sizeof(*newVolumeID)); + } while ((newVolumeID->v.high == 0) || (newVolumeID->v.low == 0)); +} + + + +void ConvertVolumeUUIDStringToUUID(const char *UUIDString, VolumeUUID *volumeID) { + int i; + char c; + unsigned long nextdigit; + unsigned long high = 0; + unsigned long low = 0; + unsigned long carry; + + for (i = 0; (i < VOLUMEUUIDLENGTH) && ((c = UUIDString[i]) != (char)0) ; ++i) { + if ((c >= '0') && (c <= '9')) { + nextdigit = c - '0'; + } else if ((c >= 'A') && (c <= 'F')) { + nextdigit = c - 'A' + 10; + } else if ((c >= 'a') && (c <= 'f')) { + nextdigit = c - 'a' + 10; + } else { + nextdigit = 0; + }; + carry = ((low & 0xF0000000) >> 28) & 0x0000000F; + high = (high << 4) | carry; + low = (low << 4) | nextdigit; + }; + + volumeID->v.high = high; + volumeID->v.low = low; +} + + + +void ConvertVolumeUUIDToString(VolumeUUID *volumeID, char *UUIDString) { + FormatUUID(volumeID, UUIDString); + *(UUIDString+16) = (char)0; /* Append a terminating null character */ +} + + + +int OpenVolumeStatusDB(VolumeStatusDBHandle *DBHandlePtr) { + VSDBStatePtr dbstateptr; + + *DBHandlePtr = NULL; + + dbstateptr = (VSDBStatePtr)malloc(sizeof(*dbstateptr)); + if (dbstateptr == NULL) { + return ENOMEM; + }; + + dbstateptr->dbmode = O_RDWR; + dbstateptr->dbfile = open(gVSDBPath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (dbstateptr->dbfile == -1) { + /* + The file couldn't be opened for read/write access: + try read-only access before giving up altogether. + */ + dbstateptr->dbmode = O_RDONLY; + dbstateptr->dbfile = open(gVSDBPath, O_RDONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + if (dbstateptr->dbfile == -1) { + return errno; + }; + }; + + dbstateptr->signature = DBHANDLESIGNATURE; + *DBHandlePtr = (VolumeStatusDBHandle)dbstateptr; + return 0; +} + + + +int GetVolumeStatusDBEntry(VolumeStatusDBHandle DBHandle, VolumeUUID *volumeID, unsigned long *VolumeStatus) { + VSDBStatePtr dbstateptr = (VSDBStatePtr)DBHandle; + struct VSDBEntry dbentry; + int result; + + if (dbstateptr->signature != DBHANDLESIGNATURE) return EINVAL; + + if ((result = LockDB(dbstateptr, LOCK_SH)) != 0) return result; + + if ((result = FindVolumeRecordByUUID(dbstateptr, volumeID, &dbentry, 0)) != 0) { + goto ErrExit; + }; + *VolumeStatus = VOLUME_RECORDED | ConvertHexStringToULong(dbentry.record.statusFlags, sizeof(dbentry.record.statusFlags)); + + result = 0; + +ErrExit: + UnlockDB(dbstateptr); + return result; +} + + + +int SetVolumeStatusDBEntry(VolumeStatusDBHandle DBHandle, VolumeUUID *volumeID, unsigned long VolumeStatus) { + VSDBStatePtr dbstateptr = (VSDBStatePtr)DBHandle; + struct VSDBEntry dbentry; + int result; + + if (dbstateptr->signature != DBHANDLESIGNATURE) return EINVAL; + if (VolumeStatus & ~VOLUME_VALIDSTATUSBITS) return EINVAL; + + if ((result = LockDB(dbstateptr, LOCK_EX)) != 0) return result; + + FormatDBEntry(volumeID, VolumeStatus, &dbentry); + if ((result = FindVolumeRecordByUUID(dbstateptr, volumeID, NULL, DBMARKPOSITION)) == 0) { +#if DEBUG_TRACE + fprintf(stderr,"AddLocalVolumeUUID: found record in database; updating in place.\n"); +#endif + result = UpdateVolumeRecord(dbstateptr, &dbentry); + } else if (result == -1) { +#if DEBUG_TRACE + fprintf(stderr,"AddLocalVolumeUUID: record not found in database; appending at end.\n"); +#endif + result = AddVolumeRecord(dbstateptr, &dbentry); + } else { + goto ErrExit; + }; + + fsync(dbstateptr->dbfile); + + result = 0; + +ErrExit: + UnlockDB(dbstateptr); + return result; +} + + + +int DeleteVolumeStatusDBEntry(VolumeStatusDBHandle DBHandle, VolumeUUID *volumeID) { + VSDBStatePtr dbstateptr = (VSDBStatePtr)DBHandle; + struct stat dbinfo; + int result; + unsigned long iobuffersize; + void *iobuffer = NULL; + off_t dataoffset; + unsigned long iotransfersize; + unsigned long bytestransferred; + + if (dbstateptr->signature != DBHANDLESIGNATURE) return EINVAL; + + if ((result = LockDB(dbstateptr, LOCK_EX)) != 0) return result; + + if ((result = FindVolumeRecordByUUID(dbstateptr, volumeID, NULL, DBMARKPOSITION)) != 0) { +#if DEBUG_TRACE + fprintf(stderr, "DeleteLocalVolumeUUID: No record with matching volume UUID in DB (result = %d).\n", result); +#endif + if (result == -1) result = 0; /* Entry wasn't in the database to begin with? */ + goto StdEdit; + } else { +#if DEBUG_TRACE + fprintf(stderr, "DeleteLocalVolumeUUID: Found record with matching volume UUID...\n"); +#endif + if ((result = stat(gVSDBPath, &dbinfo)) != 0) goto ErrExit; + if ((dbinfo.st_size - dbstateptr->recordPosition - sizeof(struct VSDBEntry)) <= MAXIOMALLOC) { + iobuffersize = dbinfo.st_size - dbstateptr->recordPosition - sizeof(struct VSDBEntry); + } else { + iobuffersize = MAXIOMALLOC; + }; +#if DEBUG_TRACE + fprintf(stderr, "DeleteLocalVolumeUUID: DB size = 0x%08lx; recordPosition = 0x%08lx;\n", + (unsigned long)dbinfo.st_size, (unsigned long)dbstateptr->recordPosition); + fprintf(stderr, "DeleteLocalVolumeUUID: I/O buffer size = 0x%lx\n", iobuffersize); +#endif + if (iobuffersize > 0) { + iobuffer = malloc(iobuffersize); + if (iobuffer == NULL) { + result = ENOMEM; + goto ErrExit; + }; + + dataoffset = dbstateptr->recordPosition + sizeof(struct VSDBEntry); + do { + iotransfersize = dbinfo.st_size - dataoffset; + if (iotransfersize > 0) { + if (iotransfersize > iobuffersize) iotransfersize = iobuffersize; + + #if DEBUG_TRACE + fprintf(stderr, "DeleteLocalVolumeUUID: reading 0x%08lx bytes starting at 0x%08lx ...\n", iotransfersize, (unsigned long)dataoffset); + #endif + lseek(dbstateptr->dbfile, dataoffset, SEEK_SET); + bytestransferred = read(dbstateptr->dbfile, iobuffer, iotransfersize); + if (bytestransferred != iotransfersize) { + result = errno; + goto ErrExit; + }; + + #if DEBUG_TRACE + fprintf(stderr, "DeleteLocalVolumeUUID: writing 0x%08lx bytes starting at 0x%08lx ...\n", iotransfersize, (unsigned long)(dataoffset - (off_t)sizeof(struct VSDBEntry))); + #endif + lseek(dbstateptr->dbfile, dataoffset - (off_t)sizeof(struct VSDBEntry), SEEK_SET); + bytestransferred = write(dbstateptr->dbfile, iobuffer, iotransfersize); + if (bytestransferred != iotransfersize) { + result = errno; + goto ErrExit; + }; + + dataoffset += (off_t)iotransfersize; + }; + } while (iotransfersize > 0); + }; +#if DEBUG_TRACE + fprintf(stderr, "DeleteLocalVolumeUUID: truncating database file to 0x%08lx bytes.\n", (unsigned long)(dbinfo.st_size - (off_t)(sizeof(struct VSDBEntry)))); +#endif + if ((result = ftruncate(dbstateptr->dbfile, dbinfo.st_size - (off_t)(sizeof(struct VSDBEntry)))) != 0) { + goto ErrExit; + }; + + fsync(dbstateptr->dbfile); + + result = 0; + }; + +ErrExit: + if (iobuffer) free(iobuffer); + UnlockDB(dbstateptr); + +StdEdit: + return result; +} + + + +int CloseVolumeStatusDB(VolumeStatusDBHandle DBHandle) { + VSDBStatePtr dbstateptr = (VSDBStatePtr)DBHandle; + + if (dbstateptr->signature != DBHANDLESIGNATURE) return EINVAL; + + dbstateptr->signature = 0; + + close(dbstateptr->dbfile); /* Nothing we can do about any errors... */ + dbstateptr->dbfile = 0; + + free(dbstateptr); + + return 0; +} + + + +/****************************************************************************** + * + * I N T E R N A L O N L Y D A T A B A S E R O U T I N E S + * + *****************************************************************************/ + +static int LockDB(VSDBStatePtr dbstateptr, int lockmode) { +#if DEBUG_TRACE + fprintf(stderr, "LockDB: Locking VSDB file...\n"); +#endif + return flock(dbstateptr->dbfile, lockmode); +} + + + +static int UnlockDB(VSDBStatePtr dbstateptr) { +#if DEBUG_TRACE + fprintf(stderr, "UnlockDB: Unlocking VSDB file...\n"); +#endif + return flock(dbstateptr->dbfile, LOCK_UN); +} + + + +static int FindVolumeRecordByUUID(VSDBStatePtr dbstateptr, VolumeUUID *volumeID, struct VSDBEntry *targetEntry, unsigned long options) { + struct VSDBKey searchkey; + struct VSDBEntry dbentry; + int result; + + FormatDBKey(volumeID, &searchkey); + lseek(dbstateptr->dbfile, 0, SEEK_SET); + + do { + result = GetVSDBEntry(dbstateptr, &dbentry); + if ((result == 0) && (CompareVSDBKeys(&dbentry.key, &searchkey) == 0)) { + if (targetEntry != NULL) { +#if DEBUG_TRACE + fprintf(stderr, "FindVolumeRecordByUUID: copying %d. bytes from %08xl to %08l...\n", sizeof(*targetEntry), &dbentry, targetEntry); +#endif + memcpy(targetEntry, &dbentry, sizeof(*targetEntry)); + }; + return 0; + }; + } while (result == 0); + + return -1; +} + + + +static int AddVolumeRecord(VSDBStatePtr dbstateptr , struct VSDBEntry *dbentry) { +#if DEBUG_TRACE + VolumeUUIDString id; +#endif + +#if DEBUG_TRACE + strncpy(id, dbentry->key.uuid, sizeof(dbentry->key.uuid)); + id[sizeof(dbentry->key.uuid)] = (char)0; + fprintf(stderr, "AddVolumeRecord: Adding record for UUID #%s...\n", id); +#endif + lseek(dbstateptr->dbfile, 0, SEEK_END); + return write(dbstateptr->dbfile, dbentry, sizeof(struct VSDBEntry)); +} + + + + +static int UpdateVolumeRecord(VSDBStatePtr dbstateptr, struct VSDBEntry *dbentry) { +#if DEBUG_TRACE + VolumeUUIDString id; +#endif + +#if DEBUG_TRACE + strncpy(id, dbentry->key.uuid, sizeof(dbentry->key.uuid)); + id[sizeof(dbentry->key.uuid)] = (char)0; + fprintf(stderr, "UpdateVolumeRecord: Updating record for UUID #%s at offset 0x%08lx in database...\n", id, (unsigned long)dbstateptr->recordPosition); +#endif + lseek(dbstateptr->dbfile, dbstateptr->recordPosition, SEEK_SET); +#if DEBUG_TRACE + fprintf(stderr, "UpdateVolumeRecord: Writing %d. bytes...\n", sizeof(*dbentry)); +#endif + return write(dbstateptr->dbfile, dbentry, sizeof(*dbentry)); +} + + + +static int GetVSDBEntry(VSDBStatePtr dbstateptr, struct VSDBEntry *dbentry) { + struct VSDBEntry entry; + int result; +#if DEBUG_TRACE + VolumeUUIDString id; +#endif + + dbstateptr->recordPosition = lseek(dbstateptr->dbfile, 0, SEEK_CUR); +#if 0 // DEBUG_TRACE + fprintf(stderr, "GetVSDBEntry: starting reading record at offset 0x%08lx...\n", (unsigned long)dbstateptr->recordPosition); +#endif + result = read(dbstateptr->dbfile, &entry, sizeof(entry)); + if ((result != sizeof(entry)) || + (entry.keySeparator != DBKEYSEPARATOR) || + (entry.space != DBBLANKSPACE) || + (entry.terminator != DBRECORDTERMINATOR)) { + return -1; + }; + +#if DEBUG_TRACE + strncpy(id, entry.key.uuid, sizeof(entry.key.uuid)); + id[sizeof(entry.key.uuid)] = (char)0; + fprintf(stderr, "GetVSDBEntry: returning entry for UUID #%s...\n", id); +#endif + memcpy(dbentry, &entry, sizeof(*dbentry)); + return 0; +}; + + + +static int CompareVSDBKeys(struct VSDBKey *key1, struct VSDBKey *key2) { +#if 0 // DEBUG_TRACE + VolumeUUIDString id; + + strncpy(id, key1->uuid, sizeof(key1->uuid)); + id[sizeof(key1->uuid)] = (char)0; + fprintf(stderr, "CompareVSDBKeys: comparing #%s to ", id); + strncpy(id, key2->uuid, sizeof(key2->uuid)); + id[sizeof(key2->uuid)] = (char)0; + fprintf(stderr, "%s (%d.)...\n", id, sizeof(key1->uuid)); +#endif + + return memcmp(key1->uuid, key2->uuid, sizeof(key1->uuid)); +} + + + +/****************************************************************************** + * + * F O R M A T T I N G A N D C O N V E R S I O N R O U T I N E S + * + *****************************************************************************/ + +static void FormatULong(unsigned long u, char *s) { + unsigned long d; + int i; + char *digitptr = s; + + for (i = 0; i < 8; ++i) { + d = ((u & 0xF0000000) >> 28) & 0x0000000F; + if (d < 10) { + *digitptr++ = (char)(d + '0'); + } else { + *digitptr++ = (char)(d - 10 + 'A'); + }; + u = u << 4; + }; +} + + + +static void FormatUUID(VolumeUUID *volumeID, char *UUIDField) { + FormatULong(volumeID->v.high, UUIDField); + FormatULong(volumeID->v.low, UUIDField+8); + +}; + + + +static void FormatDBKey(VolumeUUID *volumeID, struct VSDBKey *dbkey) { + FormatUUID(volumeID, dbkey->uuid); +} + + + +static void FormatDBRecord(unsigned long volumeStatusFlags, struct VSDBRecord *dbrecord) { + FormatULong(volumeStatusFlags, dbrecord->statusFlags); +} + + + +static void FormatDBEntry(VolumeUUID *volumeID, unsigned long volumeStatusFlags, struct VSDBEntry *dbentry) { + FormatDBKey(volumeID, &dbentry->key); + dbentry->keySeparator = DBKEYSEPARATOR; + dbentry->space = DBBLANKSPACE; + FormatDBRecord(volumeStatusFlags, &dbentry->record); +#if 0 // DEBUG_TRACE + dbentry->terminator = (char)0; + fprintf(stderr, "FormatDBEntry: '%s' (%d.)\n", dbentry, sizeof(*dbentry)); +#endif + dbentry->terminator = DBRECORDTERMINATOR; +} + + + +static unsigned long ConvertHexStringToULong(const char *hs, long maxdigits) { + int i; + char c; + unsigned long nextdigit; + unsigned long n; + + n = 0; + for (i = 0; (i < 8) && ((c = hs[i]) != (char)0) ; ++i) { + if ((c >= '0') && (c <= '9')) { + nextdigit = c - '0'; + } else if ((c >= 'A') && (c <= 'F')) { + nextdigit = c - 'A' + 10; + } else if ((c >= 'a') && (c <= 'f')) { + nextdigit = c - 'a' + 10; + } else { + nextdigit = 0; + }; + n = (n << 4) + nextdigit; + }; + + return n; +} + + + +/****************************************************************************** + * + * S H A - 1 I M P L E M E N T A T I O N R O U T I N E S + * + *****************************************************************************/ + +/* + Derived from SHA-1 in C + By Steve Reid + 100% Public Domain + + Test Vectors (from FIPS PUB 180-1) + "abc" + A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D + "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 + A million repetitions of "a" + 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F +*/ + +/* #define LITTLE_ENDIAN * This should be #define'd if true. */ +/* #define SHA1HANDSOFF * Copies data before messing with it. */ + +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +/* blk0() and blk() perform the initial expand. */ +/* I got the idea of expanding during the round function from SSLeay */ +#ifdef LITTLE_ENDIAN +#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ + |(rol(block->l[i],8)&0x00FF00FF)) +#else +#define blk0(i) block->l[i] +#endif +#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ + ^block->l[(i+2)&15]^block->l[i&15],1)) + +/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ +#if TRACE_HASH +#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);printf("t = %2d: %08lX %08lX %08lX %08lX %08lX\n", i, a, b, c, d, e); +#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);printf("t = %2d: %08lX %08lX %08lX %08lX %08lX\n", i, a, b, c, d, e); +#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);printf("t = %2d: %08lX %08lX %08lX %08lX %08lX\n", i, a, b, c, d, e); +#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);printf("t = %2d: %08lX %08lX %08lX %08lX %08lX\n", i, a, b, c, d, e); +#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);printf("t = %2d: %08lX %08lX %08lX %08lX %08lX\n", i, a, b, c, d, e); +#else +#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); +#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); +#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); +#endif + + +/* Hash a single 512-bit block. This is the core of the algorithm. */ + +static void SHA1Transform(unsigned long state[5], unsigned char buffer[64]) +{ +unsigned long a, b, c, d, e; +typedef union { + unsigned char c[64]; + unsigned long l[16]; +} CHAR64LONG16; +CHAR64LONG16* block; +#ifdef SHA1HANDSOFF +static unsigned char workspace[64]; + block = (CHAR64LONG16*)workspace; + memcpy(block, buffer, 64); +#else + block = (CHAR64LONG16*)buffer; +#endif + /* Copy context->state[] to working vars */ + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; +#if TRACE_HASH + printf(" A B C D E\n"); + printf(" -------- -------- -------- -------- --------\n"); + printf(" %08lX %08lX %08lX %08lX %08lX\n", a, b, c, d, e); +#endif + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); + R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); + R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); + R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); + R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); + R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); + R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); + R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); + R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); + R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); + R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); + R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); + R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); + R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); + R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); + R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); + R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); + R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); + R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); + R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); + /* Add the working vars back into context.state[] */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + /* Wipe variables */ + a = b = c = d = e = 0; +} + + +/* SHA1Init - Initialize new context */ + +static void SHA1Init(SHA1_CTX* context) +{ + /* SHA1 initialization constants */ + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; + context->count[0] = context->count[1] = 0; +} + + +/* Run your data through this. */ + +static void SHA1Update(SHA1_CTX* context, void* data, size_t len) +{ + unsigned char *dataptr = (char *)data; + unsigned int i, j; + + j = (context->count[0] >> 3) & 63; + if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; + context->count[1] += (len >> 29); + if ((j + len) > 63) { + memcpy(&context->buffer[j], dataptr, (i = 64-j)); + SHA1Transform(context->state, context->buffer); + for ( ; i + 63 < len; i += 64) { + SHA1Transform(context->state, &dataptr[i]); + } + j = 0; + } + else i = 0; + memcpy(&context->buffer[j], &dataptr[i], len - i); +} + + +/* Add padding and return the message digest. */ + +static void SHA1Final(unsigned char digest[20], SHA1_CTX* context) +{ +unsigned long i, j; +unsigned char finalcount[8]; + + for (i = 0; i < 8; i++) { + finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] + >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ + } + SHA1Update(context, (unsigned char *)"\200", 1); + while ((context->count[0] & 504) != 448) { + SHA1Update(context, (unsigned char *)"\0", 1); + } + SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ + for (i = 0; i < 20; i++) { + digest[i] = (unsigned char) + ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); + } + /* Wipe variables */ + i = j = 0; + memset(context->buffer, 0, 64); + memset(context->state, 0, 20); + memset(context->count, 0, 8); + memset(&finalcount, 0, 8); +#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */ + SHA1Transform(context->state, context->buffer); +#endif +} diff --git a/hfs_util/version.plist b/hfs_util/version.plist new file mode 100644 index 0000000..ce9ebcf --- /dev/null +++ b/hfs_util/version.plist @@ -0,0 +1,10 @@ + + + + + CFBundleIdentifier + com.apple.filesystems.hfs + CFBundleVersion + 0.1 + + -- 2.45.2